oracle 학습 노트 (16) PL / SQL 이상 과 goto 문장

PL / SQL 이상 과 goto 문장
이상 하 다
미리 정 의 된 이상
Oacle 에서 흔히 볼 수 있 는 미리 정 의 된 이상:
오류 번호
이상 오류 정보 이름
설명 하 다.
ORA-0001
DUP_VAL_ON_INDEX
유일한 제한 을 파괴 하려 고 시도 하 다.
ORA-0051
TIMEOUT_ON_RESOURCE (적 게 사용)
자원 대기 시간 초과
ORA-0061
TRANSACTION_BACKED_OUT (적 게 사용)
잠 금 이 발생 하여 업무 가 취소 되 었 다.
ORA-1001
INVALID_CURSOR
열 리 지 않 은 커서 를 사용 하려 고 합 니 다.
ORA-1012
NOT_LOGGED_ON (적 게 사용)
오 라 클 에 연결 되 지 않 았 습 니 다.
ORA-1017
LOGIN_DENIED (적 게 사용)
잘못된 사용자 이름 / 암호
ORA-1403
NO_DATA_FOUND
SELECT INTO 에서 데 이 터 를 찾 지 못 했 습 니 다.
ORA-1422
TOO_MANY_ROWS
SELECT INTO 여러 줄 로 돌아 가기
ORA-1476
ZERO_DIVIDE
제로 가 되 려 고 시도 하 다
ORA-1722
INVALID_NUMBER
숫자 변환 실패
OTHERS (항상 마지막 에 쓴다)
다른 이상 (항상 이상 처리 블록의 마지막 에 놓 기)
Oracle 에는 이상 과 관련 된 두 개의 함수 가 내장 되 어 있다.
  • SQLCODE Oracle 의 오류 코드 를 되 돌려 줍 니 다
  • SQLERRM Oracle 에 돌아 온 오류 메시지
  • --       
    declare
      v_empno employee.empno%type;
      rec_emp employee%rowtype;
    begin
      v_empno := &       ;
      select * into rec_emp from employee;-- where empno=v_empno;
      dbms_output.put_line('  :'||rec_emp.empno||',   :'||rec_emp.ename);
      
      --    
      exception
        when NO_DATA_FOUND then --     
            dbms_output.put_line('     ,  :'||SQLCODE||','||SQLERRM);
        when TOO_MANY_ROWS THEN
            dbms_output.put_line('    ,       ,  :'||SQLCODE||','||SQLERRM);
        when others then
          dbms_output.put_line('    ,  :'||SQLCODE||','||SQLERRM);
    end;
    /

    사용자 정의 이상
  • 이상 성명: 변수 명 exception;
  • 이상 던 지기: raise 변수 이름;
  • 처리 이상: exception
  • --  :            “     ”
    declare
      v_empno employee.empno%type := &     ;
      rec_emp employee%rowtype;
      ex_no_comm  exception; --       
    begin
      select * into rec_emp from employee where empno=v_empno;
      if (rec_emp.comm is null or rec_emp.comm=0) then
        raise ex_no_comm;--2.     
      end if;
      --3.     
      exception
        when ex_no_comm then
          dbms_output.put_line('     ');
    end;
    /

    이상 자바 처리 (이해)
    SQL 의 함수 RAISE_APPLICATION_ERROR(error_number, error_message) 를 사용 하면 이상 을 자바 처리 에 맡 길 수 있 습 니 다.자바 에 서 는 try 를 통 해 SQLException 을 캡 처 한 후 SQLException 의 getCode 와 getMessage 방법 을 통 해 얻 을 수 있 습 니 다.
    goto 구문
    -- XXX           3 ,          30%。
    declare
      v_empno employee.empno%type;
      v_sal employee.sal%type;
      v_comm employee.comm%type;
    begin
      v_empno := &       ;
      select sal,comm into v_sal,v_comm from employee where empno=v_empno;
      if v_sal>
         update employee set sal=sal+sal*0.3 where empno=v_empno;
         commit;
      <>
        null; --   ,     
    end;
    /

    좋은 웹페이지 즐겨찾기