ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle - Package
    DB/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 패키지명; 으로 종료한다.


    여러개의 함수와 프로시저가 있어서 복잡할 수 있다.


    패키지 내의 함수를 사용하려면 반환값 := 패키지명.함수명(파라미터)로 이용한다., 값은 항상 반환값의 데이터 타입과 같아야 한다.



    반응형

    댓글

Designed by Tistory.