오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

17
The Technique of Java Programming

Transcript of 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

Page 1: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

The Technique of Java Programming

Page 2: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

들어가기

이 자료는 교육 등 비영리 목적으로만 사용해야 합니다 !!!!

Page 3: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

만든사람 및 책 소개

• 오라클 SQL과 PL/SQL을 다루는 기술 : 오라클 프로그래밍 , 현장 밀착 입문서는 따로 있다 !

• 홍형경

• 주요 저서 : - 〈뇌를 자극하는 오라클 프로그래밍 SQL&PL/SQL

- Head First 시리즈를 비롯해 다수의 책 번역

Page 4: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

함수와 프로시저 관리를 효율을 높이는 패키지

셋째 마당 . 업무 효율을 높이는 실전 PL/SQL 프로그래밍

12장

Page 5: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

01 패키지

패키지 해부

패키지 데이터

기타 패키지 특징

02

함수와 프로시저 관리를 효율을 높이는 패키지

03

04

Page 6: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

01

패키지

패키지

● 논리적 연관성을 가진 PL/SQL 타입 , 변수 , 상수 , 서브 프로그램 , 커서 , 예외 등의 항목을 묶어 놓은 객체

● 패키지 선언부와 본문으로 구성됨

● 모듈화

● 프로그램 설계의 용이성

● 캡슐화

● 보다 나은 성능

Page 7: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

02

패키지 선언부 (Specification)

패키지 해부

● 사용자 정의 타입 , 변수 , 상수 , 예외 , 그리고 서브 프로그램의 골격을 선언해 놓는 부분

● 선언부 구조

CREATE OR REPLACE PACKAGE 패키지명 IS TYPE_ 구문 ; 상수명 CONSTANT 상수 _ 타입 ; 예외명 EXCEPTION; 변수명 변수 _ 타입 ; 커서구문 ;  FUNCTION 함수명 ( 매개변수 1 IN 매개변수 1_ 타입 , 매개변수 2 IN 매개변수 2_ 타입 , … ) RETURN 반환타입 ;  PROCEDURE 프로시저명 ( 매개변수 1 [IN, OUT, INOUT] 매개변수 1_ 타입 , 매개변수 2 [IN, OUT, INOUT] 매개변수 2_ 타입 , … ); … END 패키지명 ;

Page 8: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

02

패키지 본문 (Body)

패키지 해부

● 선언부에서 선언한 커서 , 함수 , 프로시저의 구현부

● 본문 구조

CREATE OR REPLACE PACKAGE BODY 패키지명 IS상수명 CONSTANT 상수 _ 타입 ;변수명 변수 _ 타입 ;커서정의구문 ;  FUNCTION 함수명 ( 매개변수 1 IN 매개변수 1_ 타입 , 매개변수 2 IN 매개변수 2_ 타입 , … ) RETURN 반환타입 IS IS …. BEGIN …. END 함수명 ; 

Page 9: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

02

패키지 본문 (Body)

패키지 해부

● 본문 구조

CREATE OR REPLACE PACKAGE BODY 패키지명 IS……

PROCEDURE 프로시저명 ( 매개변수 1 [IN, OUT, INOUT] 매개변수 1_ 타입 , 매개변수 2 [IN, OUT, INOUT] 매개변수 2_ 타입 , … ) IS …. BEGIN …. END 프로시저명 ; … END 패키지명 ;

Page 10: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

02

패키지 사용

패키지 해부

● “ 패키지명 . 서브 _ 프로그램명” , “ 패키지명 . 변수” 형태로 사용

● 인사업무를 처리하는 hr_pkg 패키지

ㆍ fn_get_emp_name 사번을 전달받아 이름을 반환하는 함수 ㆍ new_emp_proc 신규사원을 등록하는 프로시저 ㆍ retire_emp_proc 퇴사한 사원을 처리하는 프로시저

● 일반적인 함수 , 프로시저 사용법과 동일하지만 , 맨 앞에 “패키지명 .” 이 붙여야 함

Page 11: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

03

패키지 상수와 변수

패키지 데이터

● 패키지 내에 상수나 변수 선언 시 , 생존주기는 세션 단위

세션이 살아있는 동안 데이터가 메모리 상에 유지

● “ 패키지명 . 상수명” , “ 패키지명 . 변수명” 형태로 참조

● 패키지 선언부에서 선언한 변수

공용항목 (Public Item) 으로 패키지 외부에서 참조 , 접근 가능

● 패키지 본문에서 선언한 변수

내부 ( 전용 ) 항목 (Private Item) 으로 패키지 내부에서만 참조 , 접근 가능

외부에서 전용항목 변수 참조 , 접근을 위해서는 패키지 함수 , 프로시저를 이용해야 함

Page 12: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

03

패키지 커서

패키지 데이터

● 패키지 내에 명시적 커서를 정의해 사용 가능

● “ 패키지명 . 커서명” 형태로 참조 가능

● 패키지 선언부에서 커서 헤더와 정의부분 ( 패키지 쿼리 ) 전체를 선언해 사용하는 경우

● 패키지 선언부에서는 커서 헤더만 , 본문에서 정의부분을 선언해 사용하는 경우

패키지 커서 정의부분을 외부에 숨길 수 있음

선언부에서 반드시 “ RETURN 커서반환타입”을 명시해야 함

● 패키지 커서 역시 세션이 살아있는 동안 유지되므로 패키지 커서를 사용한 다음 반드시 해당

커서를 닫아야 한다

Page 13: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

03

패키지 레코드와 컬렉션

패키지 데이터

● 패키지 내에 레코드와 컬렉션 타입 변수 선언 가능

● TYPE 문으로 레코드나 컬렉션 타입 선언 후 , 해당 변수 선언해 사용

● 사용 예

CREATE OR REPLACE PACKAGE ch12_col_pkg IS -- 중첩 테이블 선언 TYPE nt_dep_name IS TABLE OF VARCHAR2(30); -- 중첩 테이블 변수 선언 및 생성자로 초기화 pv_nt_dep_name nt_dep_name := nt_dep_name(); …

Page 14: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

04

PRAGMA SERIALLY_REUSABLE 옵션

기타 패키지 특징

● 패키지 선언부와 본문에 “ PRAGMA SERIALLY_REUSABLE;” 설정

● 패키지 변수 , 커서 등의 생명주기가 세션이 아닌 호출 단위로 설정됨

● 같은 세션이라도 값이 공유되지 않음

Page 15: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

04

오버로딩 (Overloading)

기타 패키지 특징

● 객체지향의 오버로딩 기능 지원

● 패키지에서 선언한 함수와 프로시저에 한해 매개변수가 다른 경우 , 동일한 이름으로 생성 가능

Page 16: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

04

유용한 시스템 패키지

기타 패키지 특징

● DBMS_APPLICATION_INFO : 프로시저 수행 시 세션 정보에 해당 프로시저 정보를 등록

● DBMS_ERRLOG : DML 작업 중 오류 발생 시 오류 로그 정보를 담을 테이블을 생성하는

CREATE_ERROR_LOG 라는 프로시저를 제공한다

● DBMS_METADATA : 객체상세정보 추출

● DBMS_LOB : LOB 타입 처리

● DBMS_OUTPUT : 값 출력

● DBMS_RANDOM : 난수 발생

● DBMS_SQL : 동적 쿼리

Page 17: 오라클 SQL과 PL/SQL을 다루는 기술 - 12장.패키지

04

유용한 시스템 패키지

기타 패키지 특징

● DBMS_SCHEDULER 와 DBMS_JOB : 스케줄 처리

● UTL_FILE : 운영체제의 파일 처리

● UTL_SMTP 와 UTL_MAIL : 이메일 전송