DB/구자료

저장 함수 (FUNCTION)

쿠키는고양이 2022. 8. 28. 15:21

 

지난 포스팅에서 정리한 내용은 프로시저는 단독으로 실행할 수 있는 작업 단위를 말한다면,

저장 함수는 결과를 보기(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 를 비교하여 조건을 완성하는 것을 볼 수 있다.