Function은 예전에 JAVA에서 사용하던 메소드, C에서 함수와 거의 비슷한 개념이다.
Procedure와 차이점은 Return값이 있다는 것으로
반환값이 필요할 때 사용한다.
JAVA에서 메소드를 만들 때 처럼 역시 반환 타입을 반드시 Return문에 선언해주어야 한다, 생략할 수 없다.
또한 OUT, IN OUT을 쓸 수 없고 IN만 사용 가능하다.
예제를 볼 때 실행 부분에서 ':' 부분을 보면 msg 앞에도 붙어있는데
이것이 없으면 msg라는 함수를 찾으므로 msg가 변수임을 알리는 키워드이다.
나머지는 프로시져와 거의 비슷한 편
SET SERVEROUTPUT ON; -- 함수 선언 CREATE OR REPLACE FUNCTION hello RETURN VARCHAR2 IS msg VARCHAR2(20); BEGIN msg := 'hello, world'; RETURN msg; END; / VARIABLE message VARCHAR2(20); EXEC :message := hello; PRINT message; -- 사원번호를 받아서 해당 사원의 급여를 10% 올리고 출력 하기 CREATE OR REPLACE FUNCTION print1(emp_num IN employees.salary%TYPE) RETURN employees.salary%TYPE IS find_salary employees.salary%TYPE; BEGIN UPDATE employees SET salary = salary * 1.1 WHERE emp_no = emp_num; COMMIT; SELECT salary INTO find_salary FROM employees WHERE emp_no = emp_num; RETURN find_salary; END; / VARIABLE msg NUMBER; EXEC :msg := print1(118); PRINT msg; -- Function 조회 SELECT object_name, object_type FROM USER_PROCEDURES WHERE object_type = 'FUNCTION'; -- Function 삭제 -- DROP FUNCTION [function name] DROP FUNCTION hello;
'Oracle DB 11g > 03.PL SQL' 카테고리의 다른 글
[DB]03-06.Oracle DB PLSQL IF문, 만들어 둔 프로시저 소스 확인 (0) | 2018.10.10 |
---|---|
[DB]03-05.Oracle DB PLSQL Procedure(Insert, Update, Delete 예제) (0) | 2018.10.10 |
[DB]03-03.Oracle DB PLSQL %ROWTYPE (0) | 2018.10.10 |
[DB]03-02.Oracle DB PLSQL 스칼라 데이터 타입, Scalar (0) | 2018.10.10 |
[DB]03-01.Oracle DB PLSQL BLOCK, IN, OUT, IN OUT (0) | 2018.10.10 |