[ORACLE] 매개변수가 있는 프로시저
■ 매개변수가 있는 프로시저
CREATE OR REPLACE PROCEDURE 프로시저명 ( 매개변수컬럼명 IN 타입형 )
IS
선언
BEGIN
작업
( + 예외처리 )
END;
□ 예시
▶▶LOOP문 ( 각 컬럼 선언 )
create or replace procedure p_appart(
m_apgrade IN IV_APPART.apgrade%TYPE %TYPE : 해당 테이블의 컬럼 타입과 동일하게
)
is
v_apno IV_APPART.APNO%TYPE;
v_apdiv IV_APPART.APDIV%TYPE;
v_apdept IV_APPART.APDEPT%TYPE;
v_appfield IV_APPART.APPFIELD%TYPE;
v_apgrade IV_APPART.APGRADE%TYPE;
CURSOR 선언
CURSOR p_cursor IS
select apno, apdiv, apdept, appfield, apgrade from IV_APPART where apgrade = m_apgrade;
begin
OPEN p_cursor;
LOOP
FETCH p_cursor INTO v_apno, v_apdiv, v_apdept, v_appfield, v_apgrade;
EXIT WHEN p_cursor%NOTFOUND;
%NOTFOUND: 행이 남아 있지 않은 경우 TRUE / 행이 남아 있는 경우 FALSE
-> 행이 남아 있지 않은 경우에 LOOP 빠져나온다.
DBMS_OUTPUT.PUT_LINE(v_apno||'==='||v_apdiv||'==='||v_apdept||'==='||v_appfield||'==='||v_apgrade);
END LOOP;
CLOSE p_cursor;
end;
▶▶LOOP문 ( 컬럼 통합 선언 )
create or replace procedure p_appart(
m_apgrade IN IV_APPART.apgrade%TYPE
)
is
DATA IV_APPART%ROWTYPE; %ROWTYPE : 해당 테이블의 컬럼들 타입과 동일하게
CURSOR p_cursor is
select * from IV_APPART where apgrade = m_apgrade;
begin
OPEN p_cursor;
LOOP
FETCH p_cursor INTO DATA;
EXIT WHEN p_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(DATA.apno||'==='||DATA.apdiv||'==='||DATA.apdept||'==='
||DATA.appfield||'==='||DATA.apgrade);
END LOOP;
CLOSE p_cursor;
end;
▶▶FOR문
create or replace procedure p_appart (
v_apgrade IN IV_APPART.apgrade%TYPE
)
is
CURSOR p_cursor IS
select apno, apdiv, apdept, appfield, apgrade from IV_APPART where apgrade = v_apgrade;
begin
FOR p_list IN p_cursor LOOP
DBMS_OUTPUT.PUT_LINE(p_list.apno||'==='||p_list.apdiv||'==='||p_list.apdept||'==='||p_list.appfield||'==='||p_list.apgrade);
END LOOP;
FOR 사용시
커서의 OPEN FETCH CLOSE가 자동발생하며
레코드의 이름 또한 자동 선언되므로 따로 기술할 필요가 없다.
EXCEPTION 예외처리
when NO_DATA_FOUND then
DBMS_OUTPUT.PUT_LINE('예외처리: 해당 데이터가 없습니다.');
end;