선언부
CREATE OR REPLACE PROCEDURE USER.PROCEDURE_NAME (
/* 프로시저 호출 시 받은 인자 */
PARAM1 IN VARCHAR2,
PARAM2 IN NUMBER
PARAM3 IN TABLE_NAME.TABLE_COLUMN%TYPE,
PARAM4 IN VARCHAR2:=TO_CHAR(SYSDATE, 'YYYYMMDD')
PARAM5 OUT INTEGER
)
IS
/* 프로시저에서 사용할 지역 변수 */
VAR1 IN VARCHAR(20);
VAR2 IN INTEGER;
VAR3 IN INTEGER;
/* 조회한 결과의 메모리 영역을 가리키는 일종의 포인터 */
CURSOR CUR1 IS
SELECT ADD_MONTHS(SYSDATE, -LEVEL) AS MON_LIST
FROM DUAL
CONNECT BY LEVEL < 10;
- IN: 프로시저 호출 시 받은 데이터
- OUT: 프로시저 종료 시 반환될 데이터(map to push)
- CURSOR: 조회한 데이터를 참조
실행부
BEGIN
BEGIN
SELECT 101
INTO VAR1
FROM TALBE
WHERE CON1 > 0;
EXCEPTION
WHEN NO_DATA_FOUND THEN
PARAM5 := 0;
END;
/* IF문 */
IF PARAM2 > 0 THEN
PARAM5 := 1;
ELSIF PARAM2 = 0 THEN
PARAM5 := 0;
ELSE
PARAM5 := -1;
END IF;
/* 커서가 가리키는 데이터 순회 */
FOR CUR IN CUR1 LOOP
SELECT CUR.MON_LIST
FROM DUAL;
END LOOP;
/* 예외 핸들러 */
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
PARAM5 := -1;
RAISE_APPLICATION_ERROR(ERROR_CODE, ERROR_MSG);
END;
- INTO: 조회한 데이터를 변수에 할당, 이때 조회한 데이터가 없으면 에러가 발생하기 때문에 예외 처리를 해줘야 한다.
- 커서를 이용한 반목문 및 INSERT, UPDATE, DELETE 등 수행할 작업을 작성
- 호출날짜, 에러 로그 등을 저장하는 작업 필수