/*
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 |