C#,Delphi,Oracle,MSSQL 개발자블로그
[Oracle/PLSQL]6.패키지 개념 추가 정보 본문
● 오버로드
하나의 패키지 내의 여러 서브프로그램은 동일한 이름을 사용할 수 있다.
동일한 이름의 여러 서브프로그램을 구분하려면 형식 매개변수 개수, 순서 또는 테이터 유형 계열은 달라져야 한다.
- 제한사항 : 로컬 또는 패키지 서브프로그램만 오버로드 할 수 있다.
Ex.
- 패키지 명세 작성.
CREATE OR REPLACE PACKAGE over_pack
IS
PROCEDURE add_dept
(v_deptno IN dept.deptno%TYPE,
v_name IN dept.dname%TYPE DEFAULT 'unknown',
v_loc IN dept.loc%TYPE DEFAULT 'unknown');
PROCEDURE add_dept
(v_name IN dept.dname%TYPE DEFAULT 'unknown',
v_loc IN dept.loc%TYPE DEFAULT 'unknown');
END over_pack;
- 패키지 몸체 작성.
CREATE OR REPLACE PACKAGE BODY over_pack
IS
PROCEDURE add_dept
(v_deptno IN dept.deptno%TYPE,
v_name IN dept.dname%TYPE DEFAULT 'unknown',
v_loc IN dept.loc%TYPE DEFAULT 'unknown')
IS
BEGIN
INSERT INTO dept
VALUES (v_deptno, v_name, v_loc);
END add_dept;
PROCEDURE add_dept
(v_name IN dept.dname%TYPE DEFAULT 'unknown',
v_loc IN dept.loc%TYPE DEFAULT 'unknown')
IS
BEGIN
INSERT INTO dept
VALUES (dept_deptno.NEXTVAL, v_name, v_loc);
END add_dept;
END over_pack;
- 필요한 시퀀스 생성 예제.
CREATE SEQUENCE dept_deptno
INCREMENT BY 1
START WITH 1
NOCACHE
NOCYCLE
☞ 필요시 시퀀스 강제증가 구문.
ALTER SEQUENCE 시퀀스명 INCREMENT BY 증가 값.
- 실행.
EXECUTE OVER_PACK.ADD_DEPT (76,'MARKETING','ATLANTA')
EXECUTE OVER_PACK.ADD_DEPT ('SUPPORT', 'ORLANDO')
☞ 같은 패키지 서브프로그램이라도 입력하는 매개변수에 따라 다르게 동작한다.
● 사전 선언(Forward Declarations)
PL/SQL은 절차적언어이므로, 패키지내에서 서브프로그램을 호출하려고 할 때,
호출할 서브프로그램을 선언부에서 미리 선언해주거나,
호출할 서브프로그램이 호출하는 서브프로그램보다 상단에 정의되어 있어야 한다.
Ex.
- 호출할 서브프로그램이 아래쪽에 선언되어 있는 경우 호출할 수 없다.
CREATE OR REPLACE PACKAGE BODY forward_pack
IS
PROCEDURE award_bonus(. . .)
IS
BEGIN
calc_rating(. . .); -- 호출할 서브프로그램이 하단에 정의되어 있고, 선언부에도 선언되어 있지 않으므로 에러.
END;
PROCEDURE calc_rating(. . .)
IS
BEGIN
END;
END forward_pack;
- 서브프로그램을 미리 선언해서 정상 작동이 되는 경우.
CREATE OR REPLACE PACKAGE BODY forward_pack
IS
PROCEDURE calc_rating(. . .);
PROCEDURE award_bonus(. . .)
IS
BEGIN
calc_rating(. . .);
END;
PROCEDURE calc_rating(. . .)
IS
BEGIN
END;
END forward_pack;
'Programming > Oracle 공부' 카테고리의 다른 글
[Oracle/PLSQL]8. 데이터베이스 트리거 작성. (0) | 2017.06.24 |
---|---|
[Oracle/PLSQL]7.Oracle지원 패키지 (0) | 2017.06.23 |
[Oracle/PLSQL]5.패키지 작성 (0) | 2017.06.07 |
[Oracle/PLSQL]4.함수 작성 (0) | 2017.06.07 |
[Oracle/PLSQL]3.프로시저 작성 (0) | 2017.06.07 |