본문 바로가기

Study/Oracle

Oracle : 프로시저(Procedure) 선언및 실행부 문법정리

create or replace PROCEDURE 프로시저명

(

   v_kind IN STRING,

   v_val  IN INTEGER,

   v_th   IN NUMBER,

   v_msg  OUT NOCOPY STRING, -- 메세지

   -- 파라미터: 변수와 똑같이 일시적으로 값 저장. 

   -- 실행환경과 프로그램 사이에서 값을 주고 받는 역할  

 

IS -- PL/SQL 의 블록을 시작함.

* 로컬(지역) 변수는 IS ~ BEGIN 사이에 선언lo_msg_code NUMBER(1) := 0;

lo_nowTime  DATE := SYSDATE;

lo_th_code  NUMBER(9,3) := to_number(v_th); -- IN 파라미터 인자값으로 로컬변수 초기화

-- 레코드 테이블 선언

TYPE TABLE_REC IS RECORD

(

   VA_CCP_MIN  테이블명.VA_CCP_MIN%TYPE

  ,VA_CCP_MAX  테이블명.VA_CCP_MAX%TYPE

);

 VA100 TABLE_REC; -- 레코드테이블 참조변수 VA100선언(나중에 VA100으로 참조)

ERR_HANDLER EXCEPTION; -- Exception핸들러 ERR_HANDLER 선언

BEGIN -- PL/SQL 실행문 시작SELECT VA_CCP_MIN, VA_CCP_MAX

  INTO VA100 -- 위에서 선언한 레코드 테이블 참조변수

  FROM 테이블명

 WHERE VA_KIND = v_kind; -- 인자로 들어온 v_kind가 테이블값과 일치하면

 

if(v_val = 444444 and substr(v_kind, 4, 1) = 0) then

  v_msg := 'success';

  else

  v_msg := 'fail';

end if;if v_th <> null then -- 인자로 들어온 v_th가 null이 아닐경우

   v_msg := 'TH';

   if((VA100.V_CCP_MAX <= v_th) or

      (VA100.V_CCP_MIN >= v_th)) then

      v_ccp_yn := 'Y';

   end if;

end if;

-- 레코드값에 저장되있는 허용한계치 MAX값보다 파라미터로 넘어온

-- 값이 높거나 허용한계치 MIN값보다 작을경우 v_ccp_yn := 'Y'; 로 변경한다.  


EXCEPTION -- 오라클내부에 미리 포함되있는 Exception이나 프로시저에서 정의한 Exception사용 

     WHEN ERR_HANDLER THEN

          SP_ERR_LOG_TEMP(파라미터 변수들); -- 프로시저 호출  

     WHEN NO_DATA_FOUND THEN

          --psr_return_cd := 1200;

          --psr_msg       := '데이터 없음.';

          SP_ERR_LOG_TEMP(파라미터 변수들); -- 프로시저 호출 

END; -- 프로시저 종료