article thumbnail image
Published 2020. 7. 26. 21:57

 

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

 

 

복사했습니다!