hyeonga_code
Database_89_패키지_spec, body, 패키지 서브 프로그램 호출, 데이터 딕셔너리 패키지 정보 보기, SQL 코드 암호화, 패키지 삭제 본문
Database_89_패키지_spec, body, 패키지 서브 프로그램 호출, 데이터 딕셔너리 패키지 정보 보기, SQL 코드 암호화, 패키지 삭제
hyeonga 2023. 9. 2. 05:59-- PACKAGE_패키지
-- 논리적으로 관련된 PL/SQL 유형, 변수 및 서브 프로그램을 그룹화하는 스키마 객체입니다.
-- 오라클 서버가 동시에 여러 객체를 메모리 안으로 읽을 수 있도록 합니다.
-- 구성
-- 일반적으로 파일을 따로 작성합니다.
-- Spec
-- Specification_패키지 명세
-- Public_공용 : public_var
-- 패키지의 인터페이스입니다.
-- 패키지외부에서 참조할 수 있는 유형, 변수, 상수, 예외, 커서 및 서브 프로그램을 선언합니다.
-- Body
-- Body_패키지 몸체
-- Private_전용 : private_var
-- 커서에 대한 쿼리와 서브 프로그램에 대한 코드를 정의합니다.
-- 장점
-- 모듈화
-- 관련 생성자를 캡슐화합니다.
-- 손쉬운 유지 관리
-- 논리적으로 관련된 기능을 함께 보관합니다.
-- 쉬운 응용 프로그램 설계
-- Spec과 Body를 별도로 코딩 및 컴파일합니다.
-- 정보 숨기기 프로비저닝_Provisioning
-- Package Spec에 있는 선언만 응용 프로그램에서 볼 수 있고 엑세스할 수 있습니다.
-- Package Body의 전용_Private 생성자는 표시되지 않으며 엑세스할 수 없습니다.
-- 모든 코딩은 Package Body에서 표시되지 않습니다.
-- 성능 향상
-- 패키지가 처음으로 참조될 때 전체 패키지가 메모리에 로드됩니다.
-- 메모리에는 모든 유저에 대해 한 개의 복사본만 있습니다.
-- PACKAGE SPEC 생성
/*
CREATE [OR REPLACE] PACKAGE package_name
IS | AS
public type and variable declarations
subprogram specifications
END [package_name];
*/
-- The package spec with a public variable and a public procedure that are accessible from
-- outside the package.
CREATE OR REPLACE PACKAGE comm_pkg IS
v_std_comm NUMBER := 0.10; --initialized to 0.10
PROCEDURE reset_comm(p_new_comm NUMBER);
END comm_pkg;
/
/*
Package COMM_PKG이(가) 컴파일되었습니다.
*/
-- PACKAGE BODY 생성
/*
CREATE [ OR REPLACE ] PACKAGE BOVY package_name
IS | AS
private type and variable declarations
subprogram bodies
[ BEGIN initialization statements ]
END [ package_name ];
*/
CREATE OR REPLACE PACKAGE BODY comm_pkg IS
FUNCTION validate(p_comm NUMBER) RETURN BOOLEAN IS
v_max_comm employees.commission_pct%type;
BEGIN
SELECT MAX(commission_pct) INTO v_max_comm
FROM employees;
RETURN (p_comm BETWEEN 0.0 AND v_max_comm);
END validate;
PROCEDURE reset_comm(p_new_comm NUMBER) IS
BEGIN
IF validate(p_new_comm) THEN
v_std_comm := p_new_comm; -- reset public var
ELSE RAISE_APPLICATION_ERROR(-20210, 'Bad Commission');
END IF;
END reset_comm;
END comm_pkg;
/
/*
Package Body COMM_PKG이(가) 컴파일되었습니다.
*/
-- 패키지 서브 프로그램 호출
/*
EXECUTE package_name.procedure_name;
*/
-- SQL Developer와 같은 호출 환경에서 패키지 프로시저를 호출합니다.
EXECUTE comm_pkg.reset_comm(0.15);
/*
PL/SQL 프로시저가 성공적으로 완료되었습니다.
*/
-- 스키마 이름을 포함하여 다른 스키마의 패키지 프로시저를 호출할 수 있습니다.
EXECUTE hr.comm_pkg.reset_comm(0.15);
/*
PL/SQL 프로시저가 성공적으로 완료되었습니다.
*/
-- 데이터 딕셔너리에서 패키지 정보 보기
-- USER_OBJECTS
SELECT object_name, object_type
FROM user_objects
WHERE object_name LIKE 'COMM%';
-- 패키지에 포함된 프로시저와 함수는 개별적으로 조회할 수 없습니다.
SELECT object_name, object_type
FROM user_objects
WHERE object_type IN ('PROCEDURE', 'FUNCTION');
-- USER_RESOURCE
-- 패키지의 SPEC(명세)와 BODY 부분의 코드내용을 확인하기위해 USER_SOURCE를 조회합니다.
SELECT type, line, text
FROM user_source
WHERE name='COMM_PKG'
ORDER BY type, line;
-- SQL 코드 암호화
-- 파일을 메모장으로 '.sql'확장자로 저장합니다.
/*
D:\project\class_3> wrap iname=comm_pkg_body.sql
PL/SQL Wrapper: Release 11.2.0.2.0- 64bit Production on 일 8월 27 15:44:24 2023
Copyright (c) 1993, 2009, Oracle. All rights reserved.
Processing comm_pkg_body.sql to comm_pkg_body.plb
*/
-- 'comm_pkg_body.plb'파일이 생성됩니다.
/*
-----<comm_pkg_body.plb>-----------------------------------------------------
CREATE OR REPLACE PACKAGE BODY comm_pkg wrapped
a000000
34e
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
b
214 199
tfqhKMTxcPg6iSgpduR47slzpGwwg1zMNSdqfC+KrWS0DPSyebjH2Po1p8bi42K9odz8txZi
iWkljpuqTY5JYQNJzWWCg1g9XyCTssXDMevBKTDSqiSaFIqs5lyQXdwWodo84/GtFIPHPWEU
mGGpofrdMmA5wifdXfBv9sG6MyKps/xggalMlStU/Y7ti7mzgas6AswOb8BdoyGPSqxnwHJa
oVqwyYPvY2UnM8wi/2SZGTPRjzOpGn6N87dDWT6kV+NqCjE4UfAGFtrWDgHu0Y/KSS2d0Ab8
cxn0TYuzVVc+vnhZDqjRHpc1pTKEtiGw80DUQKR1S6VZHmC4b66GOF9l+k57up2RrqBWIrzj
B4Ic/8FqKb9Y3Myi9lHsftyfm+mKhtkeeZAk5B0PZtav
/
-----------------------------------------------------------------------------
*/
-- 암호화된 코드로 Body를 재컴파일합니다.
-- @'경로'\'파일명.plb'
-- @'파일명.plb'
/*
D:\project\class_3> sqlplus hr/hr
SQL*Plus: Release 11.2.0.2.0 Production on 일 8월 27 15:44:44 202
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> @comm_pkg_body.plb
Package body created.
*/
SELECT type, line, text
FROM user_source
WHERE name='COMM_PKG'
ORDER BY type, line;
-- 코드가 암호화되었습니다.
-- 패키지 삭제
-- 전체 삭세
/*
DROP PACKAGE package_name;
*/
-- 패키지 BODY 삭제
/*
DROP PACKAGE BODY package_name;
*/
DROP PACKAGE comm_pkg;
/*
Package COMM_PKG이(가) 삭제되었습니다.
*/
'Oracle Database' 카테고리의 다른 글
Database_91_오라클 실습 환경 정리_테이블 분석, 삭제 (0) | 2023.09.02 |
---|---|
Database_90_Trigger_트리거_Timing_BEFORE, AFTER, INSTEAD OF, EVENT, 수식자_OLD, NEW, ALTER 트리 (0) | 2023.09.02 |
Database_88_함수 (0) | 2023.09.01 |
Database_87_서브 프로그램 (0) | 2023.09.01 |
Database_86_PL/SQL_제어 구조_예외 처리 (0) | 2023.08.31 |