투케이2K

154. (Oracle/오라클) 프로시저 (procedure) - 다중 OUT MSG 아웃 메시지 반환 및 커서 테이블 반환 실시 본문

OracleDB

154. (Oracle/오라클) 프로시저 (procedure) - 다중 OUT MSG 아웃 메시지 반환 및 커서 테이블 반환 실시

투케이2K 2021. 9. 8. 12:44

[개발 환경 설정]

개발 툴 : Toad

개발 언어 : Oracle


[소스 코드]

CREATE OR REPLACE PROCEDURE PRO_TEST_DATE 
(   
    I_NO      IN  VARCHAR,   -- 인풋 : [1] 일반 형식 / [2] 24 시간 형식

    O_MSG     OUT VARCHAR, -- 아웃풋 : 메시지 정보 (Y : SUCCESS / N:EXCEPTION)
    O_DATE    OUT VARCHAR, -- 아웃풋 : 날짜 정보 (2021-09-08 13:05:15)
                                                                                              
    O_CURSOR  OUT SYS_REFCURSOR  -- 아웃풋 : 커서 결과 테이블
)
 
/*******************************************************************************

[프로시져 호출]

EXEC PRO_TEST_DATE('1', :AA, :BB, :CC);
EXEC PRO_TEST_DATE('2', :AA, :BB, :CC);
              
---------------------------------------------------------------
              
[프로시져 삭제]

DROP PROCEDURE PRO_TEST_DATE;            
    
*******************************************************************************/

IS
--AS  


    -- ============= [전역 변수 선언 실시] =============
    M_DEBUG INTEGER; -- 디버깅 변수 
    
    M_DATE  VARCHAR(100); -- 현재 날짜 담기 위한 변수


BEGIN
    

    -- ============= [DEBUG STEP : [1]] =============
    M_DEBUG := 1;
        
    IF I_NO = '1' THEN -- [일반 시간 형태]
        M_DATE := TO_CHAR (SYSDATE, 'YYYY-MM-DD HH:MI:SS');
        
    
    ELSIF I_NO = '2' THEN -- [24시간 형태]
        M_DATE := TO_CHAR (SYSDATE, 'YYYY-MM-DD HH24:MI:SS');
        
    
    ELSE -- [알수 없는 값이나 NULL 값일 경우]

        -- 아웃 메시지 삽입 실시
        O_MSG := 'N : ' || 'I_NO ELSE';
        O_DATE := '';
        
        -- 커서 반환
        OPEN O_CURSOR FOR SELECT '' AS "DATA_TABLE" FROM DUAL;
        
        -- 프로시저 종료
        RETURN;  
    END IF;
    
    
    
    
     
    -- ============= [DEBUG STEP : [2]] =============
    M_DEBUG := 2;          
    
    -- 커서 활성 실시 및 데이터 테이블 반환
    OPEN O_CURSOR FOR
         SELECT M_DATE
            FROM DUAL;
            
            
     -- 아웃 메시지 삽입 실시
    O_MSG := 'Y : ' || 'SUCCESS';
    O_DATE := M_DATE;


           
    
-- ============= [예외 상황 오류 발생 처리 구문] =============  
EXCEPTION
WHEN NO_DATA_FOUND THEN
     BEGIN               
          O_MSG := 'N : ' || 'EXCEPTION' || ' [NO_DATA_FOUND]';
          O_DATE := '';
          OPEN O_CURSOR FOR SELECT '' AS "DATA_TABLE" FROM DUAL;
     END;
     
WHEN OTHERS THEN
     BEGIN
          O_MSG := 'N : ' || 'EXCEPTION' || ' [M_DEBUG := '|| M_DEBUG ||']';
          O_DATE := '';
          OPEN O_CURSOR FOR SELECT '' AS "DATA_TABLE" FROM DUAL;
END;
-- ================== [프로시저 종료 부분] ==================             
END PRO_TEST_DATE;
/

[결과 출력]


 

반응형
Comments