본문 바로가기

Oracle Database /SQL

SQL PL(FUNCTION)

/*

    FUNCTION

    데이터베이스 객체로 존재. 필요할 때마다 호출해서 사용할 수 있다

    내장 프로시저(PROCEDURE)  - INSERT, DELETE, SELECT, UPDATE

    함수(FUNCTION) - SELECT 

*/


-- 입력한 값으로부터 10%의 세율을 취득하는 함수

CREATE OR REPLACE FUNCTION tax(p_value IN NUMBER)

    RETURN NUMBER

IS

BEGIN

    RETURN(p_value * 0.1);

END;

/


SELECT tax(10000) 

FROM DUAL;


-- SCOTT

-- 급여와 커미션을 합쳐서 세금 계산 FUNCTION NVL()

CREATE OR REPLACE FUNCTION tax2(p_sal IN EMP.SAL%TYPE,

                                p_bonus IN EMP.COMM%TYPE)

    RETURN NUMBER

IS

BEGIN

    RETURN ((p_sal + NVL(p_bonus, 0))*0.1);

END;

/


SELECT EMPNO, ENAME, sal, comm, tax2(sal, comm)    

FROM EMP;




-- 급여를 10%인상시키는 함수

CREATE OR REPLACE FUNCTION FC_UPDATE_SAL(v_empno IN NUMBER)

    

-- 리턴 되는 변수의 데이터 타입의 설정

    RETURN NUMBER

IS

    v_sal EMPLOYEES.SALARY%TYPE;

    

BEGIN

    SELECT SALARY * 1.1 INTO v_sal

    FROM EMPLOYEES

    WHERE employee_id = v_empno;

    

 -- 리턴문에 존재해야 한다

RETURN v_sal;

END;

/


-- 변수를 사용

VAR salary NUMBER;

EXECUTE :salary := FC_UPDATE_SAL(100);

PRINT salary;


SELECT FIRST_NAME, FC_UPDATE_SAL(101)

FROM EMPLOYEES

WHERE EMPLOYEE_ID = 101;


-- 사원번호을 입력, 그 사원번호에 해당되는 급여를 리턴하고 출력 

CREATE OR REPLACE FUNCTION EMP_SALARY(emp_no NUMBER)

    RETURN NUMBER

IS

    nSalary NUMBER(9);

BEGIN

    nSalary := 0;

    

    SELECT SALARY INTO nSalary

    FROM EMPLOYEES

    WHERE EMPLOYEE_ID = emp_no;

    

    RETURN nSalary;

END;

/


SELECT EMP_SALARY(100)    

FROM DUAL;






                               

'Oracle Database > SQL' 카테고리의 다른 글

[ORACLE] DB의 TRIGGER(트리거)  (0) 2018.06.29
SQL PL(Trigger)  (0) 2018.06.29
SQL PL(Cursor)  (0) 2018.06.29
SQL PL(3)  (0) 2018.06.29
[ORACLE] DB의 PROCEDURE(프로시져)  (0) 2018.06.28