-
Oracle - PackageDB/Oracle 2019. 1. 8. 16:19반응형
함수나 프로시저를 분류해서 한 묶음으로 묶을 수 있다.
패키지를 정의하고 구현하면
1. 애플리케이션을 좀 더 효율적으로 개발할수 있게 도와준다.
2. 관련된 스키마 오브제그들을 재 컴파일할 필요 없이 수정이 가능하다.
3. 한번에 여러개의 패키지 오브젝트들을 메모리로 로드할 수 있다.
4. 프로시저나 함수들의 오버로딩이 가능하다.
- 패키지 내에 정의된 함수나 프로시저에서만 오버로딩이 가능하고
개별 선언된 함수나 프로시저는 오버로딩할 수 없다.
5. 패키지 내의 모든 타입, 항목, 서브 프로그램들을 public이나 private으로 사용할 수 있다.
- private으로 선언되면 패키지 내에서만 사용 가능하다.
패키지란 - 프로시저, 함수 뿐만 아니라 변수, 상수, 커서, 예외 들을 하나로 묶은 캡슐화 된 객체다.
Create or replace package 패키지명 as
-- 입, 커서, 예외 선언
TYPE EmpRecord IS RECORD (emp_id INT, salary REAL);
TYPE DeptRecord IS RECORD (dept_id INT, loc_id INT);
-- 위에서 선언한 EmpRecord를 반환하는 커서 선언
CURSOR salaries RETURN EmpRecord;
-- 급여가 맞지 않을 경우 예외처리를 위한 exception 선언
invalid_salary EXCEPTION;
--
PROCEDURE hire_employee (
first_name VARCHAR2,
last_name VARCHAR2,
emails VARCHAR2,
job_id VARCHAR2,
mgr_id REAL,
salary REAL,
commission REAL,
dept_id REAL, );
PROCEDURE fire_employee (emp_id INT);
PROCEDURE raise_salary (emp_id INT, j_id VARCHAR2, amount REAL);
FUNCTION nth_highest_salary (n INT) RETURN EmpRecord;
FUNCTION sal_ok (j_id VARCHAR2, salary REAL) RETURN BOOLEAN;
END employee_process;
/
이와 같은 방법으로 패키지 선언부를 만들 수 있다.
어떤 작업을 수행 할것인지 구현부를 만들기 위해서는
선언부를 생성한 뒤에
CREATE OR REPLACE PACKAGE BODY 패키지명 as
변수선언 -- 구현부에 선언되므로 private 속성을 지닌다.
-- 선언부에서 선언한 커서정의
커서 쿼리 입력
-- 프로시저나 함수 처리
프로시저 ~
begin ~
end ~
-- 다른 프로시저
~
end 패키지명; 으로 종료한다.
여러개의 함수와 프로시저가 있어서 복잡할 수 있다.
패키지 내의 함수를 사용하려면 반환값 := 패키지명.함수명(파라미터)로 이용한다., 값은 항상 반환값의 데이터 타입과 같아야 한다.
반응형'DB > Oracle' 카테고리의 다른 글
Oracle - DBMS_JOB 패키지 + DBMS_SCHEDULER (0) 2019.01.08 oracle - 현재 유저의 권한 보기 (0) 2019.01.08 Create Procedure (0) 2019.01.08 ORA-01756 따옴표나 잘못된 한글 입력 (0) 2019.01.08 Caused by: java.sql.SQLException: ORA-12899: value too large for column (0) 2018.10.04 댓글