'PL/SQL EXCEPTION'에 해당되는 글 2건

  1. 2009.09.21 PL/SQL EXCEPTION 종류
  2. 2009.09.21 PK중복으로 Exception처리
Oracle2009. 9. 21. 12:00
PL/SQL EXCEPTION 종류 sql

2009/08/13 14:57

복사 http://blog.naver.com/soo02da/150067422573

PL/SQL EXCEPTION 종류

예외 내용

예외 번호

SQLCODE

발생시점

ACCESS_INTO_NULL

ORA-06530

-6530

초기화 되지 않은 오브젝트에 값을 할당하려고 할 경우

CASE_NOT_FOUND

ORA-06592

-6592

CASE 문장에서 ELSE 구문도 없고 WHEN 절에 명시된 조건을 만족하는 것이 하나도 없을 경우

COLLECTION_IS_NULL

ORA-06531

-6531

초기화 되지 않은 중첩 테이블이나 VARRAY같은 콜렉션을 EXISTS 외의 다른 메소드를 접근을 시도할 경우

CURSOR_ALREADY_OPEN

ORA-06511

-6511

이미 오픈된 커서를 다시 오픈하려고 시도하는 경우

DUP_VAL_ON_INDEX

ORA-00001

-1

유일 인덱스가 걸린 칼럼에 중복 데이터를 입력할 경우

INVALID_CURSOR

ORA-01001

-1001

허용되지 않은 커서에 접근할 경우(오픈되지 않은 커서를 닫으려고 시도하는 경우)

INVALID_NUMBER

ORA-01722

-1722

SQL 문장에서 문자형 데이터를 숫자형으로 변환할 때 제대로 된 숫자로 변환이 되지 않을 경우

LOGIN_DENIED

ORA-01017

-1017

잘못된 사용자나 비밀번호로 로그인을 시도할 때

NO_DATA_FOUND

ORA-01403

+100

SELECT INTO 문장의 결과로 선택된 로우가 하나도 없을 경우

NOT_LOGGED_ON

ORA-01012

-1012

오라클에 연결되지 않았을 경우

PROGRAM_ERROR

ORA-06501

-6501

PL/SQL 내부에 문제가 발생했을 경우

SELF_IS_NULL

ORA-30625

-30625

OBJECT 타입이 초기화 되지 않은 상태에서 MEMBER메소드를 사용할 경우

STORAGE_ERROR

ORA-06500

-6500

메모리가 부족한 경우

SUBSCRIPT_BEYOND_COUNT

ORA-06533

-6533

중첩 테이블이나 VARRAY의 요소값에 접근할 때, 명시한 인덱스 번호가 콜렉션 전체 크기를 넘어설 경우

SUBSCRIPT_OUTSIDE_LIMIT

ORA-06532

-6532

중첩 테이블이나 VARRAY의 요소값에 접근할 때, 잘못된 인덱스 번호를 사용할 경우(, 인덱스 번호로 -1 사용시)

SYS_INVALID_ROWID

ORA-01410

-1410

오라클 리소스를 기다리는 동안 타임아웃이 발생했을 때

TIMEOUT_ON_RESOURCE

ORA-00051

-51

오라클이 리소를 기다리는 동안 타임아웃이 발생했을 때

TOO_MANY_ROWS

ORA-01422

-1422

SELECT INTO 문장에서 하나 이상의 로우가 반환될 때

VALUE_ERROR

ORA-06502

-6502

문자형 데이터를 숫자형으로 변환하는데 타당한 수사가 아니거나 값을 할당 시 값의 크기가 선언된 변수의 크기를 넘어서는 경우와 같이 값을 변환하거나 할당할 때 오류가 발생할 경우

ZERO_DIVIDE

ORA-01476

-1476

제수가 0일 때

 

[출처] PL/SQL EXCEPTION 종류|작성자 셩이

Posted by Julyus
Oracle2009. 9. 21. 11:42
PROCEDURE Sample oracle 

2009/09/02 00:04

복사http://blog.naver.com/delcom/80087374247

DROP   PROCEDURE Proc_master;
CREATE PROCEDURE Proc_master
  (sSIPNUM in  varchar2)
IS
begin
    begin
      insert into imms.mc_comsip_m
        (SIPNUM) values (sSIPNUM);
    exception
       when DUP_VAL_ON_INDEX then -- key 중복 error 일 경우 update 수행
            rollback; 
            raise_application_error(-20502, 'insert other error...DUP');
       when OTHERS then
            rollback;
            raise_application_error(-20502, 'insert other error...');         
    end;  
--    begin
    
--    end; 
        
END Proc_master;

 

==========================================================================================

DROP   PROCEDURE Proc_test;
CREATE PROCEDURE Proc_test
  (sPJTCOD     in  varchar2,
   sSTART_YM   in  varchar2,
   sPRLCOA     in  varchar2,
   sPRICOD     in  varchar2,
   sP_EMPNO    in  varchar2,
   sMsg       out varchar2)
IS
  sOPTTYP varchar2(10);


CURSOR  M1 IS
  select OPTTYP from imms.MC_POSUM_D
   where PJTCOD   = sPJTCOD  
     and START_YM = sSTART_YM
     and PRLOCA   = sPRLCOA  
     and PRICOD   = sPRICOD  
     and P_EMPNO  = sP_EMPNO;
begin    

  begin
    Insert into imms.MC_POSUM
      (select * from imms.MC_POSUM
        where PJTCOD   = sPJTCOD  
          and START_YM = sSTART_YM
          and PRLOCA   = sPRLCOA  
          and PRICOD   = sPRICOD  
          and P_EMPNO  = sP_EMPNO);
          
  end;


  open M1;
  Loop
    FETCH M1
      into sOPTTYP;

      begin    
        Insert into imms.MC_POSUM_D
          (select * from imms.MC_POSUM_D     
            where PJTCOD   = sPJTCOD       
              and START_YM = sSTART_YM     
              and PRLOCA   = sPRLCOA       
              and PRICOD   = sPRICOD       
              and P_EMPNO  = sP_EMPNO
              and OPTTYP   = sOPTTYP);    
     exception
       when DUP_VAL_ON_INDEX then -- key 중복 error 일 경우 update 수행
            rollback; 
            raise_application_error(-20502, 'insert other error...DUP');
            sMsg := '-20502, insert other error...';
       when OTHERS then
            rollback;
            raise_application_error(-20502, 'insert other error...');         
            sMsg := '-20502, insert other error...';
     end;
      
  End Loop;      
  Commit;
  
close M1;

        
END Proc_test;

==========================================================================================

      

PROCEDURE SAMPLE_TEST IS
  aa varchar2(10) := 'test';
  bb varchar2(10) := 'test1';
  cc varchar2(10) := 'test2';
BEGIN
  begin
     insert into test_tab(a, b, c)
     values (aa, bb, cc);
  exception
       when DUP_VAL_ON_INDEX then -- key 중복 error 일 경우 update 수행
            begin
               update test_tab
                  set b = bb,
                      c = cc
                where a = aa;
            exception
                 when OTHERS then -- 기타 error 일 경우
                      raise_application_error(-20501, 'update error...');         
            end;
       when OTHERS then
            rollback;
            raise_application_error(-20502, 'insert other error...');         
  end;
END;

Posted by Julyus