[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;




image



select 문에서도 함수 호출이 가능합니다!


SELECT employee_id "사번", salary "급여", cal_bonus(employee_id) "보너스"
FROM employees;




image




  • 급여 등급 매기는 함수 (~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;




image