기록공간

OracleSQL - PL/SQL 함수(FUNCTION) 본문

DataBase/Oracle

OracleSQL - PL/SQL 함수(FUNCTION)

입코딩 2020. 10. 18. 15:05
반응형

PL/SQL 함수란 하나 이상의 PL/SQL 문으로 구성된 서브루틴으로 코드를 다시 사용할 수 있도록 캡슐화 하는데 사용된다. 오라클에서는 오라클에 정의된 기본 제공 함수를 사용하거나 직접 스토어드(Stored) 함수를 만들 수 있다. (-> 사용자 정의 함수) 이 사용자 정의 함수는 시스템 함수처럼 쿼리에서 호출하거나 저장 프로시저처럼 EXECUTE 문을 통해 실행 할 수 있다. 

 

기본 형식은 다음과 같다.

 

CREATE [OR REPLACE] FUNCTION 함수명
[ ( 매개변수명1 자료형
  , 매개변수명2 자료형
) ]
RETURN 데이터타입
IS
        -- 주요 변수 선언
BEGIN
        -- 실행문;
        ...
        RETURN 값;

        [EXCEPTION]
               -- 예외 처리 구문;
END;

사용자 정의 함수는 IN 파라미터(입력 매개변수)만 사용할 수 있으며 반드시 반환될 값의 데이터 타입을 RETURN 문에 선언해야 한다. 그리고 FUNCTION은 반드시 단일 값만 반환한다.

 

이제 사용자 정의 함수를 사용하는 예를 들어 보겠다. 주민등록번호만 가져와 사원의 성별을 확인하는 FN_GENDER() 함수를 만드려고 한다. 그렇다면 함수는 다음과 같이 정의, 사용하면 된다.

 

-- 함수 정의

CREATE OR REPLACE FUNCTION FN_GENDER( V_SSN VARCHAR2 )   -- 매개변수 : 자릿수(길이) 지정 안함
RETURN VARCHAR2                                                               -- 반환자료형 : 자릿수(길이) 지정 안함
IS
    -- 선언부 -> 주요 변수 선언
    V_RESULT        VARCHAR2(20);
BEGIN
    -- 실행부 -> 연산 및 처리
    IF ( SUBSTR(V_SSN, 8, 1) IN ('1', '3') )
        THEN V_RESULT = '남자';
    ELSIF (  SUBSTR(V_SSN, 8, 1) IN ('2', '4') )
        THEN V_RESULT = '여자';
    ELSE
        V_RESULT = '성별확인불가';
    END IF;

    RETURN V_RESULT;
END;
--==>> Function FN_GENDER이(가) 컴파일되었습니다.


-- 함수 사용
SELECT FN_GENDER('771212-1234567')
FROM DUAL;
--==>> 남자

주의할 점이 있다면 함수는 특정 테이블에 의존적인 객체가 아니기 때문에 함수 내부에서 특정 테이블에 대한 선언이나 연산을 하는 것은 바람직 하지 않다.  

반응형

'DataBase > Oracle' 카테고리의 다른 글

OracleSQL - PL/SQL 커서(CURSOR)  (0) 2020.10.24
OracleSQL - PL/SQL 프로시저(Procedure)  (0) 2020.10.24
OracleSQL - PL/SQL  (0) 2020.10.18
OracleSQL - 뷰(VIEW)  (0) 2020.10.18
OracleSQL - 무결성 제약조건(Constraint)  (0) 2020.10.18
Comments