Function
Stored functions are very similar to procedures,
except that a function returns a value to the environment in which it is called.
프로시저는 in, out, in out 모드를 사용하여 값을 반환 또는 반환하지 않을 수 있으나,
함수는 작업을 수행한 후에 결과를 반환한다.
- 함수의 구문 형식
create [or replace] function [ Function Name ]
parameter1 parameter datatype1,
parameter2 parameter datatype2
...
return datatype -- 반환값 설정
is[as]
pl/sql block;
- 예제 1 - 특정 부서의 최대 연봉 구하기
CREATE OR REPLACE FUNCTION dept_max_sal
(dept_id EMPLOYEES.DEPARTMENT_ID%TYPE)
RETURN NUMBER
IS max_sal EMPLOYEES.SALARY%TYPE;
BEGIN
SELECT max(SALARY) INTO max_sal
FROM EMPLOYEES e2
WHERE DEPARTMENT_ID = dept_id;
RETURN max_sal;
END;
/
- Output
- 예제 2 - 부서 별 인원 수 조회
-- 함수 생성
CREATE OR REPLACE FUNCTION cnt_member
( dept_id NUMBER )
RETURN NUMBER
IS
total_cnt NUMBER;
BEGIN
SELECT COUNT(*) INTO total_cnt
FROM EMPLOYEES e2
WHERE DEPARTMENT_ID = dept_id;
RETURN total_cnt;
END;
/
-- 조회
SELECT DISTINCT DEPARTMENT_ID, cnt_member(DEPARTMENT_ID) 부서별인원수
FROM EMPLOYEES e;
- Output
- 예제 3 - 부서 별 평균 급여 구하기
-- 함수 생성
CREATE OR REPLACE FUNCTION avg_sal
( dept_id EMPLOYEES.DEPARTMENT_ID%TYPE )
RETURN NUMBER
IS avg_salary NUMBER;
BEGIN
SELECT rount(AVG(SALARY))
FROM EMPLOYEES e
WHERE DEPARTMENT_ID = dept_id;
RETURN avg_salary;
END;
/
-- 조회
SELECT DISTINCT DEPARTMENT_ID, avg_sal(DEPARTMENT_ID) 부서별평균급여 FROM EMPLOYEES e
WHERE DEPARTMENT_ID IS NOT NULL;
- Output
'SQL' 카테고리의 다른 글
[Oracle] 트리거 Trigger, DML Trigger (0) | 2020.08.27 |
---|---|
[Oracle] PL/SQL Package 패키지의 이해 (0) | 2020.08.07 |
[Oracle] PL/SQL 서브 프로그램의 이해, 프로시저 (0) | 2020.07.26 |
[Oracle] PL/SQL 예외 처리의 개념, 종류, 사용법 (0) | 2020.07.16 |
[Oracle] PL/SQL Cursor 의미 & 사용법 (0) | 2020.07.11 |