투케이2K

133. (Oracle/오라클) 프로시저 (procedure) 특정 부서 인원 출력 - input, output, cursor 본문

OracleDB

133. (Oracle/오라클) 프로시저 (procedure) 특정 부서 인원 출력 - input, output, cursor

투케이2K 2021. 7. 7. 12:42

/* =========================== */

[ 개발 환경 설정 ]

개발 툴 : Toad

개발 언어 : Oracle

/* =========================== */

/* =========================== */

[소스 코드]

 

CREATE OR REPLACE PROCEDURE TEST_USER_PROCEDURE (
                                                I_DEPT     IN VARCHAR,                                                                                               
                                                O_MSG      OUT VARCHAR,
                                                O_CURSOR   OUT SYS_REFCURSOR
                                               )
                                               
/***************************************************************
설명 - 특정 부서 목록
---------------------------------------------------------------
생성 - edit 창에서 F9를 눌러서 쿼리 실행 시 자동 생성된다
---------------------------------------------------------------
IN - I_DEPT - 부서
     
---------------------------------------------------------------
OUT - O_MSG - 반환 결과 메시지
      O_CURSOR - 반환 커서 데이터 (테이블)
---------------------------------------------------------------
프로시져 호출 - EXEC TEST_USER_PROCEDURE('백제', :AA,:BB);
---------------------------------------------------------------
프로시져 결과 - Y : MESSAGE              
              N : MESSAGE
---------------------------------------------------------------              
프로시져 삭제 - DROP PROCEDURE TEST_USER_PROCEDURE;              
****************************************************************/

--AS --선택
IS --선택

/* **************** [전역변수 생성 및 초기화] ***************** */

M_DEPT       VARCHAR2 (50);   
M_DEBUG       INTEGER;

/* *************** [메인부분 시작 및 커서생성] **************** */
BEGIN


   /* =========== [변수값 대입 실시] =========== */   
   M_DEPT := I_DEPT;
   
   
   
   /* ========= [M_DEPT 널 검증 실시] ========= */
   M_DEBUG := 1; -- 디버깅 단계 지정
   IF M_DEPT IS NULL OR M_DEPT = '' 
   THEN 
    BEGIN        
        O_MSG := 'N : ' || 'M_DEPT IS NULL' || ' [M_DEBUG := '|| M_DEBUG ||']';
        OPEN O_CURSOR FOR SELECT '' AS "DATA_TABLE" FROM DUAL;
    END;
    RETURN; -- 프로시져 종료
   END IF;
   
   
   
   /* == [커서 생성 및 커서로 반환할 쿼리 실행] == */
   M_DEBUG := 2; -- 디버깅 단계 지정
   OPEN O_CURSOR FOR
    SELECT *                   
         FROM TEST_USER
    WHERE   TRIM(T_DEPT) = TRIM(M_DEPT);
            
            
            
   /* =========== [프로시저 종료] ============ */
   M_DEBUG := 3; -- 디버깅 단계 지정
   O_MSG := 'Y : SUCCESS';
   -- RETURN;  



/* ======== [예외 발생 메시지 리턴] ======== */
EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      BEGIN
         O_MSG := 'N : ' || 'EXCEPTION' || ' [NO_DATA_FOUND]';
         OPEN O_CURSOR FOR SELECT '' AS "DATA_TABLE" FROM DUAL;
      END;

   WHEN OTHERS
   THEN
      BEGIN
         O_MSG := 'N : ' || 'EXCEPTION' || ' [M_DEBUG := '|| M_DEBUG ||']';
         OPEN O_CURSOR FOR SELECT '' AS "DATA_TABLE" FROM DUAL;
      END;
      
/* **************** [프로시저 종료 완료 부분] ***************** */
END TEST_USER_PROCEDURE;
/

/* =========================== */

[결과 출력]

/* =========================== */

/* =========================== */

[요약 설명]

설명 - 특정 부서 목록

--------------------------------------------

생성 - edit 창에서 F9를 눌러서 쿼리 실행 시 자동 생성된다

--------------------------------------------

IN - I_DEPT - 부서

--------------------------------------------

OUT - O_MSG - 반환 결과 메시지

O_CURSOR - 반환 커서 데이터 (테이블)

--------------------------------------------

프로시져 호출 - EXEC TEST_USER_PROCEDURE('백제', :AA,:BB);

--------------------------------------------

프로시져 결과 - Y : MESSAGE

N : MESSAGE

--------------------------------------------

프로시져 삭제 - DROP PROCEDURE TEST_USER_PROCEDURE;

/* =========================== */

반응형
Comments