PL/SQL의 패키지(Package)

June Lee·2021년 2월 24일

PL/SQL

목록 보기
6/7

패키지란?

관련있는 프로시저/함수(서브 프로그램)를 효율적으로 관리하기 위해 모듈화시켜 배포하기 위한 단위이다. 패키지에는 서브 프로그램뿐만 아니라 상수, 변수, 커서, 레코드, 컬렉션, 예외까지 선언해서 사용할 수 있다.

패키지 선언

CREATE OR REPLACE PACKAGE my_package
IS
	PROCEDURE getEmployee(in_id IN employees.employee_id%TYPE,
    			out_id OUT employees.employee_id%TYPE,
                    out_name OUT employees.first_name%TYPE,
                    out_salary OUT employees.salary%TYPE);
    FUNCTION getSalary(p_no employees.employee_id%TYPE)
    	RETURN NUMBER;
END;

함수와 프로시저의 시그니처만 우선 위와 같이 정의해둔다.

패키지 본문 정의

CREATE OR REPLACE PACKAGE BODY my_package
IS

-- 프로시저 정의
PROCEDURE getEmployee(in_id IN employees.employee_id%TYPE,
    			out_id OUT employees.employee_id%TYPE,
                    out_name OUT employees.first_name%TYPE,
                    out_salary OUT employees.salary%TYPE)
IS
BEGIN
	SELECT employee_id, first_name, salary
    	INTO out_id, out_name, out_salary
        FROM employees
        WHERE employee_id = in_id;
END;

-- 함수 정의
FUNCTION getSalary(p_no employees.employee_id%TYPE)
    	RETURN NUMBER
IS
	v_salary employees.salary%TYPE;
BEGIN
	SELECT salary
    	INTO v_salary
        FROM employees
        WHERE employee_id = p_no;
	RETURN v_salary;
END;

END; -- 패키지의 END

함수 실행

SELECT my_package.getSalary(100) FROM dual;

프로시저 실행

DECLARE
	p_id NUMBER;
    p_name VARCHAR2(50);
	p_salary NUMBER;
BEGIN
	my_package.getEmployee(100, p_id, p_name, p_salary);
    dbms_output.put_line(p_id || ' ' || p_name || ' ' || p_salary);
    
END;
                
profile
📝 dev wiki

0개의 댓글