oracle 저장 프로세스 이상 처리 및 시간 스탬프 변수 형식


다음은 간단한 저장 프로세스 코드 세그먼트를 통해 문제를 설명합니다.
CREATE OR REPLACE PROCEDURE load_error IS

  V_td1         test1.td1%TYPE;
  v_td1xh       test1.td1xh%TYPE;
  v_gxsj         timestamp ; --  
  v_zhxgsj       timestamp ;
  V_COUNT NUMBER ; -- , 2 , 
  V_STR VARCHAR(100) ; -- 
  v_errorCode load_ajxx_error.errorcode%TYPE ;
  v_errorText load_ajxx_error.errortext%TYPE ;
  v_errorline load_ajxx_error.errorline%TYPE ;

  --  ( )
  TYPE CURSOR_TYPE IS REF CURSOR;   
    CURSOR_DYNAMIC CURSOR_TYPE; 

  CURSOR test2_CURSOR IS
    SELECT td2xh,td21,td22,td23,td24 FROM test2 ;

BEGIN
  --  
  FOR test2_RECORD IN test2_CURSOR LOOP 
    BEGIN 
      v_td1xh := test2_RECORD.td2xh ;
      V_td1 := test2_RECORD.td21 ;   --  
      --dbms_output.put_line(v_zhxgsj || ',' || v_gxsj) ;
    --  
    EXCEPTION 
      WHEN OTHERS THEN
        v_errorcode := SQLCODE ; --  
        v_errorText := Sqlerrm ; --  
        v_errorline := dbms_utility.format_error_backtrace() ;  --  ( oracle 10g )
        INSERT INTO load_ajxx_error(xh,errorline, errorcode, errortext, tbsj) VALUES(v_td1xh,v_errorline,v_errorcode,v_errorText,SYSDATE) ;
    END ;
    COMMIT;
  END LOOP ;
END load_error;

 
1. 타임 스탬프 변경 설명:
저장 프로세스로 데이터를 유도할 때, 일반적으로 시간 필드 (시간 스탬프) 로 업데이트가 필요한지 판단해야 한다.그러나oracle에서 저장 프로세스의 변수를DATE로 정의하면oracle은 자동으로 데이터 테이블의 시간 필드를 날짜형으로 변환하여 시간 정보를 캡처합니다.그러나 우리가 가져올 데이터는 하루에 여러 번 업데이트될 수 있고 실시간 요구가 높기 때문에 초까지 정확해야 한다.이때oracle의timestamp 변수를 사용했는데 이 변수가 발생하는 값은 15-3월-1412.31.59.000000 오전입니다. 이 날짜는 우리가 사용하기에 충분합니다.
 
2. oarcle 예외 처리 설명:
저장 프로세스를 사용하여 데이터를 유도할 때 이상 처리는 반드시 없어서는 안 된다. 왜냐하면 우리는 어떤 조작에서 오류가 발생하여 데이터가 정확하게 삽입되지 않았는지 알아야 하기 때문이다.만약에 어떤 데이터에 문제가 생겼을 뿐이라면 우리는 문제가 없는 다른 데이터를 계속 처리해야 한다. 모든 데이터가 처리된 후에 우리는 로그표에 가서 도대체 어떤 데이터에 문제가 생겼는지, 어떤 문제가 생겼는지, 그리고 문제를 해결한 데이터를 분석해야 한다.
구체적으로 다음과 같습니다.
일반적으로 우리는 커서로 한 조의 데이터를 처리해야 하기 때문에 우리는 커서의 순환체에 코드 블록을 추가하여 전체 커서 주기에 발생할 수 있는 문제를 처리해야 한다.
BEGIN
  --  
  FOR test2_RECORD IN test2_CURSOR LOOP 
    BEGIN 
      v_td1xh := test2_RECORD.td2xh ;
      V_td1 := test2_RECORD.td21 ;   --  
      --dbms_output.put_line(v_zhxgsj || ',' || v_gxsj) ;
    --  
    EXCEPTION 
      WHEN OTHERS THEN
        v_errorcode := SQLCODE ; --  
        v_errorText := Sqlerrm ; --  
        v_errorline := dbms_utility.format_error_backtrace() ;  --  ( oracle 10g )
        INSERT INTO load_ajxx_error(xh,errorline, errorcode, errortext, tbsj) VALUES(v_td1xh,v_errorline,v_errorcode,v_errorText,SYSDATE) ;
    END ;
    COMMIT;
  END LOOP ;
END ;

FOR 순환 중인 begin...exception ... end ;반드시 없어서는 안 될 것이다.
 
SQLCODE:oracle의 키워드는 오류 코드입니다.
SQLERRM:oracle의 키워드는 잘못된 설명을 의미합니다.때로는 길어질 수도 있으니substr로 캡처해 보세요.보통 200위 안에 들면 돼요. 간단한 정보만 알면 돼요.
dbms_utility.format_error_backtrace (): 오류가 발생한 줄을 찾기 위해oracle 10g에 도입된 함수입니다.
 
 
 

좋은 웹페이지 즐겨찾기