투케이2K

91. (Oracle/오라클) 프로시저 (Procedure) - 두 정수값을 입력 받아 최대값 반환 실시 본문

OracleDB

91. (Oracle/오라클) 프로시저 (Procedure) - 두 정수값을 입력 받아 최대값 반환 실시

투케이2K 2021. 1. 28. 14:30

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

[ 개발 환경 설정 ]

개발 툴 : Toad

개발 언어 : Oracle

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

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

[소스 코드]

 

/* **************** [프로시져 생성 시작 부분] ***************** */
CREATE OR REPLACE PROCEDURE TEST_MAX_DATA (
                                            I_ONE      IN VARCHAR,
                                            I_TWO      IN VARCHAR,                                               
                                            O_MSG      OUT VARCHAR,
                                            O_CURSOR   OUT SYS_REFCURSOR
                                            )
                                              
                                             
/***************************************************************
설명 - 두 정수 데이터 중 더 큰수 MAX 값 반환 실시
---------------------------------------------------------------
생성 - edit 창에서 F9를 눌러서 쿼리 실행 시 자동 생성된다
---------------------------------------------------------------
IN - I_ONE - 인풋으로 들어온 첫번째 정수값
     I_TWO - 인풋으로 들어온 두번째 정수값
---------------------------------------------------------------
OUT - O_MSG - 반환 결과 메시지
      O_CURSOR - 반환 커서 데이터 (테이블)
---------------------------------------------------------------
프로시져 호출 - EXEC TEST_MAX_DATA('10', '20', :AA, :BB);
---------------------------------------------------------------
프로시져 결과 - Y : SUCCESS
              N : EXCEPTION
---------------------------------------------------------------              
프로시져 삭제 - DROP PROCEDURE TEST_MAX_DATA;              
****************************************************************/


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


/* **************** [전역변수 생성] ***************** */
M_ONE VARCHAR2 (100); --인풋으로 들어온 데이터를 담을 변수
M_TWO VARCHAR2 (100); --인풋으로 들어온 데이터를 담을 변수

M_MAX_DATA  VARCHAR2 (100); --큰 정수값을 담기 위한 변수
  
M_STEP  VARCHAR2(100); --어느 부분에서 에러가 발생한지 확인하기 위한 변수
/* ******************************************************** */


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

   /* ======== [변수값 대입 실시] ======== */
   M_ONE := I_ONE;
   M_TWO := I_TWO; 
   
   /* ========= [문법 작성 실시] ========= */
   M_STEP := '1';
   IF I_ONE >= I_TWO
      THEN M_MAX_DATA := I_ONE;
   ELSE 
      M_MAX_DATA := I_TWO;
   END IF;

   /* ========= [커서 생성 실시] ========= */
   M_STEP := '2';
   OPEN O_CURSOR FOR     
     SELECT M_MAX_DATA AS 최대값
         FROM DUAL;
                             
   /* ==== [정상 완료 시 메시지 값 삽입] ==== */
   O_MSG := 'Y : SUCCESS';
       

/* ======== [예외 발생 메시지 리턴] ======== */
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_STEP := '|| M_STEP ||']';
         --O_MSG := 'N : ' || TO_CHAR (SQLCODE) || ' : ' || SQLERRM;
         OPEN O_CURSOR FOR SELECT '' AS "DATA_TABLE" FROM DUAL;
      END;
      
/* **************** [프로시져 종료 완료 부분] ***************** */
END TEST_MAX_DATA;
/
/* ******************************************************* */

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

[결과 출력]

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

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

[요약 설명]

설명 - 두 정수 데이터 중 더 큰수 MAX 값 반환 실시

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

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

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

IN - I_ONE - 인풋으로 들어온 첫번째 정수값

I_TWO - 인풋으로 들어온 두번째 정수값

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

OUT - O_MSG - 반환 결과 메시지

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

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

프로시져 호출 - EXEC TEST_MAX_DATA('10', '20', :AA, :BB);

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

프로시져 결과 - Y : SUCCESS

N : EXCEPTION

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

프로시져 삭제 - DROP PROCEDURE TEST_MAX_DATA;

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

반응형
Comments