본문 바로가기

개발 관련 지식/오라클(Oracle)

[오라클] 프로시저(PROCEDURE)

* 프로시저(PROCEDURE)

: 프로시저는 특정한 처리를 수행하는 PL/SQL 서브 프로그램이다. 함수와 마찬가지로 프로시저는 데이터베이스에 저장되어 있는 객체이며, 이러한 이유로 내장 프로시저(stored procedure)라고도 부른다. 프로시저 역시 파라미터들을 받아 특정 처리를 수행하기는 하지만, 함수와는 달리 값을 반환하지 않는다.

 

- 프로시저 실행

 [생성 구문 형식]

CREATE OR REPLACE PROCEDURE 프로시저명

(

파라미터1 데이터타입 [ IN | OUT | INOUT ] ,

...

)

IS [AS]

변수 선언부..;

BEGIN

프로시저 본문 처리..;

EXCEPTION

예외처리..;

END;

/

 

 [프로시저 생성 예제]

CREATE OR REPLACE PROCEDURE ​register_song

(

T_NUM NUMBER,

T_NAME VARCHAR2,

T_DATE DATE,

)

IS

BEGIN

​insert into test_song(t_num, t_name, t_date)

values ( T_NUM, T_NAME, T_DATE);

COMMIT;

EXCEPTION

WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE( T_NUM || ' ' || T_NAME || ' ' register is failed!');

ROLLBACK;

END;

/

​PROCEDURE register_song Compiled

 

 

- 프로시저 실행

 [실행 구문 형식]

EXEC 혹은 EXECUTE 프로시저명 (파라미터...); 

 

 [프로시저 실행 예제]

EXECUTE register_song('1', 'test', '20140313');

 

anonymous block comleted 

 

 

- 프로시저 삭제

 [삭제 구문 형식]

DROP PROCEDURE 프로시저명;

 

 

 [참고] 프로시저 LOOP 문법

CREATE OR REPLACE PROCEDURE 프로시저이름 (
입력파라미터1 IN 파라미터타입, -- 파라미터 종류 (오라클 컬럼 타입 참고, CHAR, VARCHAR2, NUMBER ... 등)
입력파라미터2 IN 파라미터타입,
...
출력파라미터1 OUT 파라미터타입,
출력파라미터2 OUT 파라미터타입,
...) IS
-- FOR LOOP 1. 커서를 이용한 방법
CURSOR 커서변수 IS
SELECT TNAME, TABTYPE FROM TAB;
BEGIN
-- FOR LOOP 1. 커서를 이용한 방법
FOR 반복변수 IN 커서변수 LOOP
-- 커서변수에 담긴 냉요을 반복변수에 담에 LOOP 돌리면서 처리
DBMS_OUTPUT.PUT_LINE(반복변수.컬럼명);
END LOOP;

-- FOR LOOP 2. 커서를 사용하지 않고 바로 구해서 사용하는 방법
FOR 반복변수 IN (
SELECT TNAME, TABTYPE FROM TAB
) LOOP
-- 커서변수에 담긴 냉요을 반복변수에 담에 LOOP 돌리면서 처리
DBMS_OUTPUT.PUT_LINE(반복변수.컬럼명);
END LOOP;

-- Exception 처리 (필요하면 추가)
EXCEPTION
WHEN OTHER THEN
-- 여기에 Exception 발생시 처리사항 정의
-- SQLCODE 오라클 에러코드
-- SQLERRM 오라클 에러메시지
ROLLBACK;
END 프로시저이름;

 

 

 <프로시저 기본 예제>

CREATE OR REPLACE PROCEDURE TEXT_PROC

(

T_NUM IN NUMBER, -- NUMBER 타입의 입력받은 파라미터

OUT_DATA OUT SYS_REFCURSOR -- SELECT문 결과를 담을 커서(CURSOR)

)

IS

BEGIN

OPEN OUT_DATA FOR -- 커서 열기

SELECT * FROM test_song WHERE t_num = T_NUM; -- 데이터 불러오는 쿼리문

(마지막에 세미콜론은 필수)

END;

/