[ORACLE] 패키지

김민성·2023년 4월 10일
0
post-thumbnail

패키지란 무엇인가?

변수, 상수, 프로시저, 함수, 서브 프로그램 등의 항목을 묶어놓은 객체이다.
패키지는 컴파일을 거쳐서 실행되며, 다른 패키지를 참조 실행할 수 있다.

패키지의 구성 요소

패키지는 선언부, 본문, 실행부로 이루어져있다.

패키지의 장점

  • 모듈화
    함수와 프로시저등을 한 곳에 모아서 사용할 수 있으므로 관리 및 사용에 수월

  • 캡슐화
    선언부만 외부에 공개되고, 본문은 감춰져 있기 때문에 접근을 제어하여 오용을 방지

  • 성능
    패키지의 서브 프로그램 호출 시 패키지 전체가 메모리에 올라가 다른 서브 프로그램 호출 시 훨씬 나은 성능을 보입니다.

패키지의 구성별 사용

패키지 선언부 (Package Definition) : 함수 또는 프로시저를 정의

CREATE OR REPLACE PACKAGE [패키지 이름]
AS
    FUNCTION 함수이름(
        	            파라미터1이름 타입,
                      파라미터2이름 타입
                    )
    RETURN 타입;
    PROCEDURE 프로시저이름 (
                        파라미터명1 입출력 타입,
                        파라미터명2 입출력 타입,
                        )
END 패키지이름;

패키지 본문 (Package Body) : 선언부에 쓴 함수들을 구체적으로 어떤 실행이 일어날 지 작성

CREATE OR REPLACE PACKAGE BODY 패키지이름
AS
  FUNCTION 함수이름(
        	          파라미터1이름 타입,
                    파라미터2이름 타입
        	          )
  RETURN 타입;
  IS
    변수선언
  BEGIN
  	실행문
	RETURN 반환값;
  END;

  PROCEDURE 프로시저이름 (
                      파라미터명1 입출력 타입,
                      파라미터명2 입출력 타입,
                      )
  IS
    변수선언
  BEGIN
  	실행문
	RETURN 반환값;
  END;
  END 패키지이름;

예외처리: 패키지 본문을 작성할 때 하단부에 예외처리를 해주기도 한다.

예외처리는 꼭 SQL에서 처리할 필요는 없고, 자바와 같은 프로그래밍 언어에서 처리 해도 된다.

EXCEPTION WHEN 예외명 THEN 예외처리    --예외명을 알 경우

WHEN OTHERS THEN 예외처리              --예외명을 모를 경우

	-- SQLCODE : 오류코드 반환
		0	: 정상
		100	: no data found 오류
		1	: (기본값)사용자 정의 예외의 경우
		음수	: 오류코드

	-- SQLERRM : SQLCODE에 해당하는 오류 메시지 반환

실행부

	SELECT 패키지이름.함수(파라미터값)
    FROM 테이블이름;
    --- OR
    BEGIN
    	패키지이름.프로시저(파라미터)
    END;

조회

패키지 내 함수와 프로시저 검색하기

SELECT *
FROM ALL_PROCEDURES
WHERE OBJECT_NAME = "패키지이름";

  • 코딩 팩토리님 블로그의 예시 중 실행부에서 바인드 변수를 사용하는 예시가 있다.
	SET SERVEOUTPUT ON;       	-- DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용

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

	EXEC EX_PKG.PROC_1;

	EXEC EX_PKG.PROC_2(10);
  • SQL에서 : (콜론)
    : 는 바인드 변수이다.
    바인드 변수를 사용하면 단일 SQL문을 여러번 재사용 할 수 있다.
    이를 활용하면, SQL injection 공격이 허용되지 않아 보안에 도움된다.
    필요한 구문 분석의 양을 줄임으로써 성능에도 도움된다.

ORACLE에서 쿼리 실행 전 프로그램 커서를 생성한다. 프로그램은 커서에 대해 파싱할 SQL을 참조하여,
SQL에 의해 참조된 바인드 변수에 대해서 값을 바인딩한다.


참조 블로그
https://coding-factory.tistory.com/454 -- 예외처리
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=giriyo&logNo=221368705446 -- SQLCODE, SQLERRM 함수
https://stackoverflow.com/questions/2177978/what-does-the-colon-sign-do-in-a-sql-query -- 바인드 변수
https://fomaios.tistory.com/entry/Oracle-패키지Package란-feat-CRUD -- 오라클 패키지
https://coding-factory.tistory.com/456 -- 오라클 패키지

profile
정리하는 개발자

0개의 댓글