[Oracle] 36.저장 함수
저장 함수
저장 함수는 저장 프로시저와 거의 유사한 용도로 사용합니다.
차이점이라곤 함수는 실행 결과를 되돌려 받을 수 있다는 점입니다.
그리고 함수는 select 절에 호출이 가능하지만, 프로시저는 불가능합니다!
다음은 저장 함수를 만드는 기본 형식입니다!
CREATE [OR REPLACE ] FUNCTION 함수이름
( 매개변수1 [mode] data_taye,
매개변수2 [mode] data_taye . . .
)
RETURN data_type
IS
-- 변수 선언부
반환변수명 반환데이터 타입;
BEGIN
-- 실행부
statement1;
statement2;
RETURN 반환변수명;
END;
/
함수의 생성과 실행
- 보너스 계산 함수 (salary의 20배)
--함수 생성
CREATE OR REPLACE FUNCTION cal_bonus (
vempno IN employees.employee_id%TYPE
)
RETURN NUMBER --RETURN 데이터타입
IS
vsal NUMBER(10,2); --반환할 변수 선언
BEGIN
SELECT salary * 20
INTO vsal
FROM employees
WHERE employee_id = vempno;
return(vsal);
END;
/
VARIABLE var_res NUMBER;
EXEC :var_res := cal_bonus(100);
PRINT var_res;
select 문에서도 함수 호출이 가능합니다!
SELECT employee_id "사번", salary "급여", cal_bonus(employee_id) "보너스"
FROM employees;
- 급여 등급 매기는 함수 (~3000 낮음, 3000~5000 보통, 5000~ 높음)
CREATE OR REPLACE FUNCTION sal_grd (
vsal IN employees.salary%TYPE
)
RETURN VARCHAR2 --RETURN 데이터타입
IS
grade VARCHAR(10); --반환할 변수 선언
BEGIN
IF ( vsal <= 3000 ) THEN
grade := '낮음';
ELSIF ( vsal <= 5000 ) THEN
grade := '보통';
ELSE
grade := '높음';
END IF;
return(grade);
END;
/
SELECT employee_id "사번", salary "급여", sal_grd(salary) "등급"
FROM employees;