--■■■ PACKAGE(패키지)■■■
/*
1. PL/SQL 의 패키지는 관계되는 타입, 프로그램 객체, 서브 프로그램(PROCEDUER, FUNCTION)을
논리적으로 묶어놓은 것으로
오라클에서 제공하는 패키지 중 하나가 바로 DBMS_OUTPUT 이다
2. 패키지는 서로 유사한 업무에 사용되는 여러 개의 프로시저와 함수를
하나의 패키지로 만들어 관리함으로써 향후 유지보수가 편리하고
전체 프로그램을 모듈화 할 수 있는 장점이 있다.
3. 패키지는 명세부(PACKAGE SPECIFICATION) 와
몸체부(PACKAGE BODY)로 구성되어 있으며
명세부분에는 TYPE, CONSTRAINT, VARIABLE, EXCEPTION, CURSOR, SUBPROGRAM 이 선언되고
몸체부분에는 이들의 실제 내용이 존재하게 된다.
그리고 호출할 때에는 『패키지명.프로시저명 형식』의 참조를 이용해야 한다.
4. 형식 및 구조(명세부)
CREATE [OR REPLACE] PACKAGE 패키지명
IS
전역변수 선언;
커서 선언;
예외 선언;
함수 선언;
프로시저 선언;
:
END 패키지명;
--5. 형식 및 구조(몸체부)
CREATE [OR REPLACE] PACKAGE BODY 패키지명
IS
FUNCTION 함수명 [(인수, ...)]
RETURN 자료형
IS
변수 선언;
BEGIN
함수 몸체 구성 코드;
RETURN 값;
END;
PROCEDURE 프로시저명[(인수, ...)]
IS
변수선언;
BEGIN
프로시저 몸체 구성 코드;
END;
END 패키지명;
*/
-- ● 주민번호 입력 시 성별을 반환하는 함수
-- 이 함수를 구성요소로 취하는 패키지 작성
-- 함수 준비
CREATE OR REPLACE FUNCTION FN_GENDER(V_SSN VARCHAR2)
RETURN VARCHAR2
IS
V_RESULT VARCHAR2(20);
BEGIN
IF SUBSTR(V_SSN,8,1) IN ('1','3')
THEN V_RESULT := '남자';
ELSIF SUBSTR(V_SSN,8,1) IN ('2','4')
THEN V_RESULT := '여자';
ELSE
V_RESULT := '확인불가';
END IF;
RETURN V_RESULT;
END;
--==>>Function FN_GENDER이(가) 컴파일되었습니다.
PACKAGE 를 구성하는 함수를 미리 만들기로 함.
FN_GENDER 라는 함수는 주민등록번호를 매개변수 V_SSN 으로 넘겨주면 남자인지 여자인지 판별하고
그 결과를 VARCHAR 타입의 V_RESULT로 RETURN 해주는 함수이다.
-- 패키지 등록
-- 1. 명세부 작성
-- 2. 몸체부 작성
-- 패키지 등록
-- 1. 명세부 작성
CREATE OR REPLACE PACKAGE INSA_PACK
IS
FUNCTION FN_GENDER(V_SSN VARCHAR2)
RETURN VARCHAR2;
END INSA_PACK;
--==>>Package INSA_PACK이(가) 컴파일되었습니다.
ㅍ 패키지를 등록하기 위해서는 명세부를 작성하고 몸체부를 작성해야 한다. 명세부는 패키지 안에 어떤 프로시저 함수들이 있는지 보여주고 몸체부에서는 그러한 것들을 정의한다.
INSA_PACK 이라는 패키지의 명세부를 작성한 것을 보면 FN_GENDER() 함수가 포함된다
-- 2. 몸체부 작성
CREATE OR REPLACE PACKAGE BODY INSA_PACK
IS
FUNCTION FN_GENDER(V_SSN VARCHAR2)
RETURN VARCHAR2
IS
V_RESULT VARCHAR2(20);
BEGIN
IF SUBSTR(V_SSN,8,1) IN ('1','3')
THEN V_RESULT := '남자';
ELSIF SUBSTR(V_SSN,8,1) IN ('2','4')
THEN V_RESULT := '여자';
ELSE
V_RESULT := '확인불가';
END IF;
RETURN V_RESULT;
END;
END INSA_PACK;
--==>>Package Body INSA_PACK이(가) 컴파일되었습니다.
위에서는 CREATE OR REPLACE PACKAGE 패키지명
이었다면
몸체부는 CREATE OR REPLACE PACKAGE BODY 패키지명 이다.
(그냥 딱히 명세부를 작성한다. 몸체부를 작성한다 라고 나누기보다는 패키지를 만든다, 패키지바디를 만든다 로 보는게 더 쉽지 않나 어쨋든 한자어는 뭔가 일을 복잡하게 만든다. 차라리 영어만 쓰는 게 낫겠다...는 영어못함)
위에서 CREATE OR REPLACE를 했기 때문에
일반적으로 CREATE OR REPLACE FUNCTION 함수명 () RETURN IS BEGIN END;
이렇게 함수를 정의하는데 반해
BODY 에서는 바로 FUNCTION 함수명() RETURN IS BEGIN END; 로 정의한다.
-- ● 구성한 패키지가 유효한지 확인(테스트)
-- → 패키지에 논리적으로 구성된 함수 호출 확인
SELECT INSA_PACK.FN_GENDER('757575-1234566')
FROM DUAL;
그래서 그 결과를 FROM DUAL을 통해 살펴보면
INSA_PACK.FN_GENDER(매개변수)
이렇게 함수호출해서 사용한다.
저 코드의 결과는 8번째 자리가 1 이므로 남자
이렇게 패키지는 간단하게 살펴보고 끄웉!
지금은 함수만 살펴봤지만
패키지 바디말고 패키지 작성할 때 전역변수, 프로시저, 커서, 예외 다 선언한다는데
그 부분은 지금 안보고 지나가서 약간 찝찝
'📚Study Note > ORACLE' 카테고리의 다른 글
[오라클] insert 안됨. 무한 script runner. (0) | 2021.07.08 |
---|---|
[ ORACLE ] 오라클 세미 중입니다 (0) | 2021.04.15 |
[ ORACLE ] TRIGGER(트리거)란... 마치 부비트랩같은것💣💥 (0) | 2021.04.15 |
[ ORACLE ] CURSOR 커서란,,,마츼 깜짝상자 같은 것💥🎁 (0) | 2021.04.14 |
[ ORACLE ] PROCEDURE 내에서 예외처리 (0) | 2021.04.12 |