투케이2K
91. (Oracle/오라클) 프로시저 (Procedure) - 두 정수값을 입력 받아 최대값 반환 실시 본문
/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : 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;
/* =========================== */
'OracleDB' 카테고리의 다른 글
93. (Oracle/오라클) 함수 (Function) - 이름, 나이를 입력받아서 json 형태로 데이터 포맷 후 반환 실시 (0) | 2021.01.29 |
---|---|
92. (Oracle/오라클) sum over partition by 사용해서 그룹별 누적 합계 및 총 합계 구하기 실시 (0) | 2021.01.28 |
90. (Oracle/오라클) concat 사용해서 문자열 결합 실시 (0) | 2021.01.27 |
89. (Oracle/오라클) to_char() FM 형식 사용해서 숫자값 콤마표시, 빈자리 0값 채우기 실시 (0) | 2021.01.27 |
88. (Oracle/오라클) LISTAGG 사용해 출력되는 컬럼 데이터를 가로(행)으로 합쳐서 출력 실시 (0) | 2021.01.27 |