행위

패키지

DB CAFE

thumb_up 추천메뉴 바로가기


1 패키지[편집]

  • 패키지란 변수, 상수, 서브프로그램등의 항목을 묶어놓은 객체.
  • 여러가지 항목들을 모아 하나의 이름으로 묶어놓은 객체.
  • 패키지는 컴파일 과정을 거쳐 데이터베이스에 저장되며 다른 프로그램에서 패키지의 항목을 참조하고 실행.
  • 프로그래밍을 하다보면 프로시저같은 서브 프로그램 관리하기가 힘들어지게되고 자신이 필요한 항목을 찾는것마저 어려워지는 상황 발생.
 보다 손쉽고 쳬계적으로 관리 하는 방법이  바로 패키지 임.

1.1 패키지 사용법[편집]

패키지는 선언부, 본문, 실행부 로 구성

1.2 선언부[편집]

CREATE OR REPLACE PACKAGE EX_PKG IS --패키지 선언

FUNCTION FUNC_1(P_PRODUCT_ID IN NUMBER) --패키지로 묶을 함수
RETURN VARCHAR2;

PROCEDURE PROC_1; --패키지로 묶을 프로시저1

PROCEDURE PROC_2(P_PRODUCT_ID IN NUMBER); --패키지로 묶을 프로시저2

END EX_PKG; --패키지 종료

1.3 실행부[편집]

CREATE OR REPLACE PACKAGE BODY  EX_PKG  IS --패키지 본문

    ----------패키지 선언부 함수1----------
    FUNCTION FUNC_1(P_PRODUCT_ID IN NUMBER)
    RETURN VARCHAR2
    IS
    V_PRODUCT_NAME VARCHAR2(100);
    BEGIN
    SELECT
    PRODUCT_NAME
    FROM PRODUCTS
    WHERE
    PRODUCT_ID = P_PRODUCT_ID ;
    
    RETURN NVL(PRODUCT_NAME,'존재하지 않는 제품');
    END FUNC_1;

   ----------패키지 선언부 프로시저1----------
    PROCEDURE PROC_1
    IS
    CURSOR EX_CUR IS
    SELECT 
    PRODUCT_ID,
    PRODUCT_NAME
    FROM PRODUCTS;
    
    BEGIN
    
    FOR I  IN EX_CUR LOOP
    
    DBMS_OUTPUT.PUT_LINE(' 제품ID : ' || I.PRODUCT_ID);
    DBMS_OUTPUT.PUT_LINE(' 제품명 : ' || I.PRODUCT_NAME);
    
    END LOOP;
    
    EXCEPTION
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM||'에러 발생 ');
    
    END PROC_1;

    ----------패키지 선언부 프로시저2----------
    PROCEDURE PROC_2(P_PRODUCT_ID IN NUMBER)
    IS
    CURSOR EX_CUR IS
    SELECT 
    PRODUCT_ID,
    PRODUCT_NAME
    FROM PRODUCTS
    WHERE PRODUCT_ID = P_PRODUCT_ID;
    
    BEGIN
    
    FOR I  IN EX_CUR LOOP
    
    DBMS_OUTPUT.PUT_LINE(' 제품ID : ' || I.PRODUCT_ID);
    DBMS_OUTPUT.PUT_LINE(' 제품명 : ' || I.PRODUCT_NAME);

    END LOOP;
    
    EXCEPTION
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM||'에러 발생 ');
    
    END PROC_2;

END EX_PKG; --패키지 종료

1.4 실행부[편집]

-- DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용
SET SERVEROUTPUT ON; 

-- 패키지 실행
EXEC EX_PKG.FUNC_1(10);

EXEC EX_PKG.PROC_1;

EXEC EX_PKG.PROC_2(10);