본문 바로가기
→ 프로그래밍.데이터베이스/DB,SQL

[ORACLE] 오라클 함수(function) 만들기. 함수 생성

by jjo_Mean 2016. 11. 5.

이번엔 오라클 함수를 직접 만드는 방법을 포스팅하려구해요~

있는 함수들을 갖다 쓰기도하지만 원하는 함수가 없을때 직접 만들어 쓰고싶을때가 많더라구요.



오라클에서 함수란.

- RETURN문을 이용해 원하는 값을 반환 하기 위해 만드는 것. 오라클 함수는 프로시저랑 비슷하지만 IN파라미터이용이 가능합니다.


밑엔 프로시저랑 함수의 차이점이니 참고해두세요!


-프로시져 : 1.PL/SQL 문으로서 실행  2.RETURN Datatype이 없음  3.값을 Return할 수 있음


-함수 : 1.식의 일부로서 사용  2. RETURN Datatype이 필수  3.값을 Return하는 것이 필수



먼저 함수를 생성하기위해 기초적이 뼈대를 알아보겠습니다.


CREATE OR REPLACE FUNCTION TEST_MINJI 

    RETURN VARCHAR

IS

   test VARCHAR2(100);

BEGIN


  test := '함수테스트입니다.';


RETURN test;

      

END;


기본적인 함수는 저 형식으로 만들어집니다.

맨위에 빨간색으로 표시된 TEST_MINJI가 함수 명입니다. 그 바로 아래있는 RETURN VARCHAR는 

RETURN 하는 값의 데이터 타입을 의미합니다.

IS뒤엔 변수선언!

BEGIN부터 이제 값이 들어가는 부분이에요.

일단 기본적인 테스트로 변수인 test에 '함수테스트입니다.'를 넣어 줬어요. 오라클에서 변수에 값을 대입하는 방식은 =가 아니라 :=로 표현됩니다.

RETURN test 해주면 test값이 반환되겠죠!? 함수를 다 작성 후 F5를 눌러주면 함수가 생성이되요ㅋ


실행쿼리 : SELECT TEST_MINJI() FROM DUAL; 


위처럼 함수를 SELECT하면 아래처럼 결과가 출력됩니다.



[ 실행 결과 ]




그럼 이제 파라미터를 넣어 출력되는 함수를 한번 만들어 볼게요.


/*------------------------------------------------------------------------------ 

-- 개체 이름: STU.F_CKB_PRT 

-- 만든 날짜: 2016-11-03 오전 10:39:24 

-- 마지막으로 수정한 날짜: 2016-11-03 오전 10:39:27 

-- 상태: INVALID 

------------------------------------------------------------------------------*/ 


CREATE OR REPLACE FUNCTION HIS.F_CKB_PRT 

       ( 

           I_YN1 IN VARCHAR2

         , I_YN2 IN VARCHAR2

         , I_YN3 IN VARCHAR2

         , I_YN4 IN VARCHAR2

         , I_YN5 IN VARCHAR2 

       ) 

       RETURN VARCHAR2 IS  

       O_RETURN VARCHAR2

       (

           100

       )

       ; 

V_CNT NUMBER;  

BEGIN  

    V_CNT := 1; 

    O_RETURN := '';  

    IF I_YN1 = 'Y' THEN  

        IF NVL(LENGTH(O_RETURN), 0) = 0 THEN 

            O_RETURN := '1'; 

        ELSE 

            O_RETURN := O_RETURN || '1'; 

        END IF;  

    END IF;  

    IF I_YN2 = 'Y' THEN  

        IF NVL(LENGTH(O_RETURN), 0) = 0 THEN 

            O_RETURN := '2'; 

        ELSE 

            O_RETURN := O_RETURN || ', 2'; 

        END IF;  

    END IF; 

    IF I_YN3 = 'Y' THEN  

        IF NVL(LENGTH(O_RETURN), 0) = 0 THEN 

            O_RETURN := '3'; 

        ELSE 

            O_RETURN := O_RETURN || ', 3'; 

        END IF;  

    END IF; 

    IF I_YN4 = 'Y' THEN  

        IF NVL(LENGTH(O_RETURN), 0) = 0 THEN 

            O_RETURN := '4'; 

        ELSE 

            O_RETURN := O_RETURN || ', 4'; 

        END IF;  

    END IF; 

    IF I_YN5 = 'Y' THEN  

        IF NVL(LENGTH(O_RETURN), 0) = 0 THEN 

            O_RETURN := '5'; 

        ELSE 

            O_RETURN := O_RETURN || ', 5'; 

        END IF;  

    END IF;   

    RETURN O_RETURN;  

EXCEPTION 

WHEN OTHERS THEN 

    RETURN(''); 

END;  



요건 제가 일하다가 필요해서 만든 함수 샘플에요ㅠㅠㅋㅋ

보기엔 복잡해 보이시겠지만, 별거없어요~ 기본틀에서 추가된게있다면 빨간색으로 표시된 파라미터 입력 받는 부분이에요.

위의 함수는 5개의 파라미터를 Y,N으로 받아 첫번째 값이 Y로 입력되면 1, 두번째 값이 Y로 입력되면 2...이런식으로

Y로 입력된 값이 몇번째에 있는지 출력해주는 함수입니다.ㅋㅋ


예를들어 YYNYY가 입력되면 1,2,4,5가 출력이 되어야되요 ㅋㅋㅋ

그럼 한번 F_CKB_PRT함수를 테스트 해보겠습니다.


실행 쿼리 : SELECT F_CKB_PRT('Y','N','Y','Y','Y') AS TEST FROM dual;



[ 실행 결과 ]


위와 같은 결과를 출력 할 수 있었어요~ㅋㅋㅋ 프로시저를 아시는 분들은 많이 비슷하다 느끼셨을텐데

다음엔 프로시저 생성하는 방법을 간단하게 포스팅해드릴게요ㅋㅋ


도움이 많이 되셨길~~~~~~~~