2015년 4월 2일 목요일

#113. PL/SQL강좌, 오라클패키지, 전위적 선언(Forward Declaration),PLSQL교육

#113. PL/SQL강좌, 오라클패키지, 전위적 선언(Forward Declaration),PLSQL교육

8.2 전위적 선언(Forward Declaration)




  • 동일한 PL/SQL블록에 여러 개의 Sub Program들이 올 수 있는데, 패키지내 함수, 프러시저는 서로 호출을 하거나 호출당하는 입장이다.
  • 어떤 프로시저/함수에서 다른 프로시저/함수를 호출할 때 호출당하는 프로시저/함수는 먼저 선언 되어야 한다.(구현부가 뒤쪽에 있는 경우)



SQL> DECLARE
  2    -- proc1 선언
  3    PROCEDURE proc1;
  4
  5    -- proc2 선언 및 구현
  6    PROCEDURE proc2(num NUMBER) IS
  7    BEGIN
  8      proc1();
  9    END;
 10
 11    -- proc1 구현
 12    PROCEDURE proc1 IS
 13    BEGIN
 14      proc2(8514790) ;
 15    END;
 16
 17  BEGIN
 18    NULL;
 19  END;
 20  /

PL/SQL 처리가 정상적으로 완료되었습니다.


SQL> DECLARE
  2    -- proc1 구현
  3    PROCEDURE proc1 IS
  4    BEGIN
  5      NULL;
  6    END;
  7    -- proc2 선언 및 구현
  8    PROCEDURE proc2(num NUMBER) IS
  9    BEGIN
 10      proc1();
 11    END;
 12  BEGIN
 13     NULL;
 14  END;
 15  /

PL/SQL 처리가 정상적으로 완료되었습니다.

#112. PL/SQL강좌, 오라클패키지, 개요및기본문법,작성법,PLSQL교육

#112. PL/SQL강좌, 오라클패키지, 개요및기본문법,작성법,PLSQL교육


8. 패키지(Package)




8.1 개요 및 기본문법




  • 패키지란? 연관성 있는, 논리적으로 연관된 PL/SQL Types, 변수, 서브프로그램(프러시저, 패키지)의 그룹이며 오라클의 스키마 오브젝트이다. 패키지 명세(Specification)와 패키지 바디(Body)로 나뉘어지며 바디는 생략도 가능하다.
  • 패키지 명세는 Create Package 명령으로, 패키지 바디는 Create Package Body 명령으로 작성한다. 패키지 명세에서 정의한 서브프로그램 및 변수들만 외부에서 접근, 호출 가능하다.
  • 패키지 명세 : 전역변수, 커서, 예외, PL/SQL 프로그램에 대한 선언
  • 패키지 바디패키지 명세에서 정의한 모든 커서, 서브프로그램을 구현

    [장점]
  • 모듈화 : 연관된 타입, 서브프로그램들을 PL/SQL 모듈안에 캡슐화
  • 쉬운 응용프로그램 디자인 : 패키지 명세를 통한 커서, 예외, 함수나 프로시저의 구조를 정의하고 이를 먼저 컴파일하는 것이 가능하다.
  • 정보의 숨김 : 패키지를 통해 타입, 서브프로그램 등을 PUBLIC, PRIVATE으로 정의가능 하다.
  • 기능 추가의 용이 : 패키지 명세에서 정의한 커서 or 예외, PUBLIC 변수들은 세션동안 유효하므로 이것들을 활용한 새로운 기능의 추가가 용이하다.
  • 성능 향상 : 패키지안의 프로시저등이 최초 호출될 때 전체 패키지가 메모리에 로드 되므로 이후 호출 부터는 DISK I/O는 없다.


    [형식]

[패키지 명세]
CREATE [OR REPLACE] PACKAGE PACKAGE_NAME IS
 
          [variable declaration]
        [cursor declaration]
        [exception declaration]
        [procedure declaration]
        [function declaration]
 
END;
 
[패키지 바디]
CREATE [OR REPLACE] PACKAGE BODY [PACKAGE_NAME] IS
 
[variable declaration]
        [cursor implementation]
        [exception implementation]
        [procedure bodies]
        [function bodies]
 
END;



-- 아래 간단히 패키지 Helloworld를 만들어 보자.
SQL> create or replace package pkgtest
  2  is
  3     procedure p_test(p_name varchar2);
  4  end;
5  /


SQL> create or replace package body pkgtest
  2  is
  3     procedure p_test(p_name varchar2)
  4     is
  5     begin
  6             dbms_output.put_line('HelloWorld ' || p_name);
  7     end;
  8  end pkgtest;
  9  /

SQL> set serveroutput on
SQL> exec pkgtest.p_test('오라클자바커뮤니티')
HelloWorld 오라클자바커뮤니티

PL/SQL 처리가 정상적으로 완료되었습니다.