ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PL/SQL 에서의 FUNCTION vs PROCEDURE
    개발/Database 2018. 8. 8. 15:19

    FUNCTION 은 리턴값이 있는 서브프로그램이고,

    PROCEDURE 는 리턴값이 없는 서브프로그램이다.


    사실 와꾸만 써놓고 정리를 안해서 안 올리고 있지만 

    VBA에서나 PL/SQL에서나 FUNCTION과 PROCEDURE 의 차이점은 거의 비슷하다....

    (내가 잘 몰라서 똑같다고는 말 못함)


    직접 짜다보니 왜 프로그램이라는 명칭을 붙여줬는지 이해가 간다. 

    잘 써먹으면 정말 쪼그마한 프로그램 하나를 붙여서 쓰는 효과가 나기에...ㅎ 뭔소리야 


    아무튼 거의 2년간 PL/SQL을 만질 일이 없어서 까먹고 있다가 오랜만에 구문 보면서 짜려니 

    다른 분들의 설명이 잘 눈에 안 들어와서 내 맘대로 다시 정리한다.

    오늘도 출처는 훌륭한 구루비 선생님

    http://www.gurubee.net/lecture/1342

    http://www.gurubee.net/lecture/1044



    1. PL/SQL 블록 구조


     



    Declarative Section(선언부)

    - 변수, 상수, CURSOR, USER_DEFINE Exception 선언



    Executable Section(실행부)

    - SQL, 반복분, 조건문 실행


    - 실행부는 BEGIN으로 시작하고 END로 종료


    - 실행문은 프로그램 내용이 들어가는 부분으로서 필수적으로 사용


    - Function 의 경우에는 END를 선언하기 전에 RETURN문을 써서 반환한 결과값을 명시



    Exception Handling Section(예외처리)

    - 예외에 대한 처리


    - 일반적으로 오류를 정의하고 처리하는 부분으로 선택 사항




    2. PL/SQL 프로그램의 작성 요령


    - PL/SQL 블록내에서는 한 문장이 종료할 때마다 세미콜론(;)을 사용


    - END뒤에 세미콜론(;)을 사용하여 하나의 블록이 끝났다는 것을 명시


    - DECLARE나 BEGIN이라는 키워드로 PL/SQL블럭이 시작


    - 단일행 주석 : --

     여러행 주석 : /* */


    - PL/SQL 블록은 행에 / 가 있으면 종결




    3. 변수 선언


    스칼라 데이터 타입

     

    일반 단일 데이터 타입 변수


    - 초기값 할당 연산자 (:=) 사용하여 정의


    - 상수로 지정하고 싶으면 CONSTANT라는 키워드를 명시하면서 초기값을 할당


    - NOT NULL이 정의되어 있으면 초기값을 반드시 지정


    - 초기값 미지정 시 변수는 NULL값을 가짐


    - 한 줄에 한 개의 변수 정의


    - 예) 

    --V_PRICE 라는 이름의 숫자형 상수 선언

      V_PRICE CONSTANT NUMBER(4, 2) := 12.34;  


    --V_NAME 이라는 이름의 문자형 변수 선언

            V_NAME VARCHAR2(20);                           



     %TYPE 데이터형 변수

     

         - <변수명> <DB명>.<컬럼명>%TYPE; 


    - 이미 선언된 다른 변수 또는 데이터베이스 컬럼의 데이터 타입을 이용하여 선언


    - DB 컬럼의 정의를 정확히 알지 못하는 경우에도 사용 가능하고, 

      DB 컬럼 정의가 변경되어도 다시 PL/SQL을 수정할 필요가 없음


    - 예) 

    --V_ENAME 이라는 이름으로 EMP 테이블의 ENAME 컬럼과 같은 데이터 타입을 사용하는 변수 선언

      V_ENAME EMP.ENAME%TYPE;    

     

    --V_SAL 이라는 이름으로 EMP 테이블의 SAL 컬럼과 같은 데이터 타입을 사용하는 변수 선언

      V_SAL EMP.SAL%TYPE;              



    복합 데이터 타입


    %ROWTYPE


    - 하나 이상의 데이터값을 갖는 데이터 타입. 배열과 비슷한 역할을 하고 재사용 가능함


    - 테이블이나 뷰 내부의 컬럼 데이터형, 크기, 속성 등을 그대로 사용 가능



    테이블


    - 일종의 일차원 배열. 



    레코드


    - 여러 개의 데이터 타입을 갖는 변수들의 집합




    예) 함수 생성 예제

         FC_UPDATE_SAL 이라는 이름의 함수 생성

         파라미터는 숫자 타입의 V_EMPNO 를 받음

         PL/SQL 내에서는 V_SAL 이라는 이름의 변수를 사용하며, 이 변수의 타입은 EMP 테이블의 SAL 컬럼과 같은 데이터 타입 사용

         함수 실행 결과 반환값으로 숫자형 변수를 리턴함


    CREATE OR REPLACE FUNCTION FC_UPDATE_SAL

    (V_EMPNO IN NUMBER)

    RETURN NUMBER

    IS

    V_SAL EMP.SAL%TYPE;


    BEGIN


    UPDATE EMP

          SET SAL = SAL * 1.1

     WHERE EMPNO = V_EMPNO;


    COMMIT;


     SELECT SAL

        INTO V_SAL

       FROM EMP

     WHERE EMPNO = V_EMPNO;


    RETURN V_SAL;


    END;


     


    댓글

Designed by Tistory.