저장 함수 (FUNCTION)
지난 포스팅에서 정리한 내용은 프로시저는 단독으로 실행할 수 있는 작업 단위를 말한다면,
저장 함수는 결과를 보기(SELECT) 위한 작업의 단위이다. 개념은 다르지만 사용하는 방법은 PL / SQL 이므로
상당히 유사하다.
저장 함수에 대해 정리하기 위해 전과 마찬가지로 HUMAN, CAR 테이블을 사용한다.
1. 저장 함수 생성 / 삭제하기
전과 마찬가지로 CREATE 를 통해 함수를 생성할 수 있다.
CREATE OR REPLACE FUNCTION SEL_HUMAN
(
V_NAME IN HUMAN.H_NAME % TYPE
)
RETURN HUMAN.H_NAME % TYPE
IS
V_NUM HUMAN.H_NO % TYPE;
BEGIN
SELECT H_NO INTO V_NUM
FROM HUMAN
WHERE H_NAME = V_NAME;
RETURN V_NUM;
END;
/
이번에 주목할 점은 프로시저에서 언급하지 않은 IS 부분이다.
IS 영역은 내부에서 사용할 지역 변수를 선언하는 영역이다. 따라서 V_NUM 은 HUMAN 테이블의 H_NO와 같이
NUMBER형으로 선언된 지역변수이다.
BEGIN의 쿼리를 보면 V_NAME 변수의 값과 사람의 이름이 같으면 H_NO 의 값을 V_NUM에 넣어 리턴을 한다.
여기서 리턴은 함수의 결과를 반환해주는 역활을 한다. 자바에서 사용한 RETURN과 동일하다.
삭제하는 방법은 마찬가지로 DROP 을 사용하여 삭제할 수 있다.
DROP FUNCTION SEL_HUMAN;
2. 함수 활용하기
함수를 활용하는 방법은 두 가지를 정리하고자 한다.
1) 전역 변수를 사용하여 출력하기
전역 변수는 다음과 같이 생성이 가능하다.
VAR H_NUMBER NUMBER;
이제 이 변수를 사용하여 PL / SQL 의 방식으로 출력하면 다음과 같다.
EXECUTE :H_NUMBER := SEL_HUMAN('박길동');
PRINT H_NUMBER;
여기서 주목할 점은 : (콜론)이 붙은 위치이다. 이건 문법이니 외워두도록 하자. (:= 은 대입 연산자이다.)
위의 세 문장을 실행하면 다음과 같이 출력된다.

실행 결과
작성한 코드대로 박길동이란 사람의 번호가 나오게 된다.
2) WHERE 절을 사용하여 출력하기
이번에는 SELECT에서 WHERE를 사용하여 홍길동의 번호와 나이를 가져오고자 한다.
SELECT H_NO, H_NAME, H_AGE
FROM HUMAN
WHERE H_NO = SEL_HUMAN('홍길동');
쿼리는 흔히 사용하던 SELECT와 별 다른게 없지만 WHERE 절에서는 함수를 사용한 것을 볼 수 있다.
즉, SEL_HUMAN 이라는 함수의 리턴값과 H_NO 를 비교하여 조건을 완성하는 것을 볼 수 있다.