Stored Sub Program(저장 서브프로그램)
필요시 PL/SQL 호출해서 사용하고자 데이터베이스에 PL/SQL 구문을 저장해놓은 프로그램입니다. 이 프로그램은 Oracle에 저장해서 사용자간 공유하여 사용 가능하며, 메모리, 성능, 재사용성 측면에서 장점이 있습니다. 그 종류로는 SF(Stored Function), SP(Stored Prcedure), Trigger 등이 있습니다.
Stored Procedure
SP(저장 프로시저)는 오직 특정한 기능과 작업을 처리하고자 사용하는 서브 프로그램입니다. 쿼리문에서 호출이 안되고 오직 단독으로만 실행할 수 있습니다. 파라미터 여부에 따라 두가지로 나누어집니다.
1. 파라미터가 없는 프로시저
--프로시저의 선언
CREATE OR REPLACE PROCEDURE 프로시저명
IS | AS(DECLARE 대신 사용, 선언부가 없어도 반드시 명시해줘야 된다.)
선언부
BEGIN
실행부
EXCEPTION
예외처리부
END [프로시저명];
-- 프로시저의 실행 : 실행 명령어
EXEC 프로시저명;
-- 프로시저의 삭제
DROP PROCEDURE 프로시저명;
2. 파라미터 있는 프로시저
-- 프로시저의 선언
CREATE OR REPLACE PROCEDURE 프로시저명
[(
--입력하거나 DEFAULT를 지정할 수 있다.
파라미터1 [MODES] 자료형 [:= | DEFAULT 기본값],
파라미터2 [MODES] 자료형 [:= | DEFAULT 기본값],
파라미터3 [MODES] 자료형 [:= | DEFAULT 기본값],
....
)]
IS
선언부
BEGIN
실행부
EXCEPTION
예외처리부
END;
저 위에 MODES 자리에는 IN, OUT, IN OUT이 들어갑니다. IN은 생략할 때 지정되는 디폴트 값으로 프로시저가 호출되면 파라미터 값을 넣어주는 모드로, 가장 많이 사용합니다. OUT은 프로시저의 결과값을 반환해주고, IN OUT은 호출할 때 값을 입력받고 그 값을 바탕으로 실행 결과 값을 반환합니다.
파라미터의 자리수는 지정이 안되며, NOT NULL 제약 조건도 사용할 수 없습니다.
파라미터가 있는 프로시저를 실행할 때는 아래와 같은 코드를 사용합니다.
EXEC 프로시저명(파라미터값1, 파라미터값2, ....);
추가로 기본값이 지정된 파라미터라면, 위의 파라미터값은 생략 가능합니다.
--프로시저 선언
CREATE OR REPLACE PROCEDURE PRO_NOPARAM
IS
ENO VARCHAR2(8);
ENAME VARCHAR2(20);
BEGIN
ENO := '8888';
ENAME := '홍길동';
INSERT INTO EMP (ENO, ENAME)
VALUES(ENO, ENAME);
END;
/
"Procedure PRO_NOPARAM이(가) 컴파일되었습니다." 라고 뜨면 성공입니다. 해당 프로시저는 좌측 메뉴에서 "프로시저" 디렉토리에서도 확인할 수 있습니다.
프로시저를 실행해보고, EMP table에서 ENO가 8888인 사람을 확인하면 됩니다.
--프로시저 실행
EXEC PRO_NOPARAM;
SELECT *
FROM EMP
WHERE ENO = '8888';
이번에는 파라미터가 있는 프로시저입니다. 생성과 선언부는 위와 비슷합니다. 지금보면 DNO, DNAME, LOC까지는 값을 받을 수 있도록 선언하고, DIRECTOR에는 디폴트 값으로 1111을 넣었습니다. 따라서 파라미터 입력할 때 DIRECTOR 자리는 생략해도 1111이 들어가게됩니다.
CREATE OR REPLACE PROCEDURE P_NEW_DEPT
(
DNO IN VARCHAR2,
DNAME IN VARCHAR2,
LOC IN VARCHAR2,
-- DIRECTOR IN VARCHAR2 := '1111' --안 넣어도 자동으로 입력됨.
DIRECTOR IN VARCHAR2 DEFAULT '1111' --이렇게도 가능하다.
)
IS
BEGIN
INSERT INTO DEPT
VALUES (
DNO,
DNAME,
LOC, --3개만 이제 넣어줄 때 해도 1111이 DIRECTOR에 들어감.
DIRECTOR
);
END;
/
프로시저를 호출해보겠습니다. 파라미터가 있는 프로시저는 호출 시에 파라미터 값을 입력하여 전달해야 합니다. 디폴트값이 있는 영역은 제외할 수 있습니다.
--프로시저 호출 시 파라미터 전달
EXEC P_NEW_DEPT('99', '배포', '수원');
EXEC P_NEW_DEPT('98', '테스트', '대전', '2001');
SELECT * FROM DEPT;
파라미터에서 생략한 배포 부서는 DIRECTOR가 디폴트 값인 1111이 입력된 점을 확인할 수 있습니다.
'네이버 클라우드 캠프 > Oracle' 카테고리의 다른 글
[Oracle] Trigger (0) | 2023.05.02 |
---|---|
[Oracle] Stored Sub Program: SF (0) | 2023.05.01 |
[Oracle] PL/SQL(2) (0) | 2023.04.22 |
[Oracle] PL/SQL (1) (0) | 2023.04.21 |
[Oracle] 다중행 함수 (0) | 2023.04.18 |