선언부
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 등 수행할 작업을 작성
  • 호출날짜, 에러 로그 등을 저장하는 작업 필수

'Database' 카테고리의 다른 글

MySQL:ALTER TALBE ADD COLUMN이 오래 걸리는 경우  (0) 2025.05.19
GROUP BY ROLLUP  (0) 2025.04.29
쿼리 숫자형 텍스트 정렬  (0) 2023.11.22
JDBC-8038:Expression is not in a GROUP BY clause.  (0) 2023.11.02
Tibero function  (0) 2023.07.03

+ Recent posts