gnusraun

Oracle 패키지(Package) 본문

Database/Oracle

Oracle 패키지(Package)

gnusraun 2023. 5. 13. 20:04
728x90

:: 패키지를 사용하는 이유

프로시저와 같은 서브 프로그램의 수가 많고 관리가 힘들어져 손쉽게 관리하기 위해 패키지를 사용

 

 

:: 패키지 구성

선언부

본문

실행부

 

 

:: 선언부

 

create or replace PACKAGE ex_pkg IS

FUNCTION func_1 (
    p_product_id IN NUMBER
) -- 함수
 RETURN VARCHAR2;

PROCEDURE proc_1;

PROCEDURE proc_2 (
    p_product_id IN NUMBER
);

END ex_pkg;

 

 

:: 본문

 

create or replace PACKAGE BODY ex_pkg IS
-- 패키지 선언부 함수
FUNCTION func_1 (
    p_product_id IN NUMBER
) RETURN VARCHAR2 IS
    v_product_name VARCHAR(100);
BEGIN
    SELECT
        product_name
    INTO v_product_name
    FROM
        products
    WHERE
        product_id = p_product_id;

    RETURN nvl(v_product_name, '해당제품없음');
    dbms_output.put_line('이름확인' || v_product_name);

-- 예외처리
EXCEPTION
    WHEN OTHERS THEN
        dbms_output.put_line(sqlerrm || '에러발생');
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;

 

 

:: 실행부

 

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

-- 패키지 함수 실행
   VARIABLE RESULT VARCHAR2;
   EXEC :RESULT := EX_PKG.FUNC_1(10);
   PRINT :RESULT;

-- 패키지 프로시저1 실행
   exec ex_pkg.proc_1;

-- 패키지 프로시저2 실행
   exec ex_pkg.proc_2(5);

 

 

출처 - https://coding-factory.tistory.com/456

728x90