[DB. PL / SQL] 프로그램 프로 세 스 제어 - 이상 처리
이상 분류:
이상 이름 정의
문법 은 다음 과 같다.
exception_name EXCEPTION; 두 가지 인용 방식 이 있 습 니 다.
RAISE exception_name; WHEN exception_name THEN 이상 이름과 오류 코드 연결
Oracle 은 일부 이상 한 부분 에 만 이름 을 정의 합 니 다.데이터베이스 에 또 다른 오류 가 있 습 니 다. 잘못된 숫자 와 메시지 만 정의 합 니 다.
EXCEPTION 사용 가능INIT 컴 파일 명령 은 내부 오류 코드 와 이상 한 이름 을 연결 합 니 다.
예 를 들 면:
PROCEDURE my_procedure
IS
invalid_month EXCEPTION;
PRAGMA EXCEPTION_INIT(invalid_month, -1843);
BEGIN
...
EXCEPTION
WHEN invalid_month THEN
오류 숫자 는 다음 제약 에 부합 되 는 임의의 정 수 를 사용 할 수 있 습 니 다.
이름 시스템 이상
가장 중요 한 것 도 가장 많이 사용 되 는 이름 이상 은 PL / SQL 의 STANDARD 패키지 에서 찾 을 수 있 습 니 다.
예 를 들 어 코드 에서 NO 처리DATA_FOUND 이상:
WHEN NO_DATA_FOUND THEN
WHEN STANDARD.NO_DATA_FOUND THEN STANDARD 패키지 에서 미리 정 의 된 이상
이상 한 작용 범위
이상 을 던 지 는 세 가지 방법 이 있다.
문법 은 다음 과 같다.
RAISE exception_name;
RAISE package_name.exception_name;
RAISE;
세 번 째 형식 은 이상 처리 장치 의 WHEN 구문 에 만 사용 할 수 있 으 며, 이상 처리 장치 에서 같은 이상 을 다시 던 지 는 데 사 용 됩 니 다.
예 를 들 면:
EXCEPTION
WHEN NO DATA fOUND
THEN
...
-- NO_DATA_fOUND
RAISE; RAISE 사용APPLICATION_ERROR 프로 세 스
이 과정 을 사용 하 는 것 은 이상 에 오류 메 시 지 를 추가 할 수 있다 는 점 이다.
이 과정 이 실행 되면 현재 PL / SQL 블록의 실행 이 즉시 종 료 됩 니 다. OUT 와 IN OUT 매개 변수 에 대한 수정 은 취소 되 고 전역 데이터 구조 에 대한 수정 은 패키지 변수 와 같이 데이터베이스 대상 이 스크롤 백 되 지 않 습 니 다.사용 자 는 DML 작업 으로 인 한 수정 을 취소 하기 위해 ROLLBACK 을 명확 하 게 호출 해 야 합 니 다.
문법 은 다음 과 같다.
PROCEDURE RAISE_APPLICATION_ERROR(
num binary_integer,
msg varchar2,
keeperorstack boolean default FALSE
); 이상 하 게 던 지면 현재 PL / SQL 블록 은 정상 적 인 실행 을 중지 하고 이상 처리 장치 에 제 어 를 전달 합 니 다.이 이상 은 현재 PL / SQL 블록 에서 처리 되 거나 외부 블록 에 던 져 집 니 다.
어떤 이상 을 포착 하거나 처리 하려 면 이 이상 을 위해 이상 한 핸들 을 써 야 합 니 다.이상 처리 코드 는 프로그램의 모든 실행 가능 한 문장 뒤에 블록의 END 문장 앞 에 있 습 니 다.
EXCEPTION 키 워드 는 이상 처리 장치 의 시작 과 모든 독립 된 이상 핸들 을 표시 합 니 다.
DECLARE
...declarations...
BEGIN
...executable statements...
[ EXCEPTION
...exception handles... ]
END; 이상 구문 (exception handles) 의 문법:
WHEN exception_name [ OR exception_name ... ]
THEN
executable statements
WHEN OTHERS
THEN
executable statements 내 장 된 오류 함수
이상 처리 후 후속 코드 를 계속 실행 하 는 방법
PL / SQL 블록 에 이상 이 발생 하면 정상 실행 장치 가 종료 되 고 이상 처리 장치 로 전 달 됩 니 다.블록 에 이상 이 있 으 면 다 시 는 이 블록의 실행 단원 으로 돌아 갈 수 없습니다.
그러나 때때로 우 리 는 이상 한 후에 도 계속 실행 할 수 있 는 능력 을 원한 다.
다음 과 같은 방법 을 사용 하면 이상 한 문 구 를 던 지지 않 고 실행 할 수 있 습 니 다.
예 를 들 면:
PROCEDURE change_date IS
BEGIN
BEGIN
DELETE FROM employees WHERE...;
EXCEPTION
WHEN OTHERS THEN log_error;
END;
BEGIN
UPDATE company SET...;
EXCEPTION
WHEN OTHERS THEN log_error;
END;
BEGIN
INSERT INTO company_history SELECT • FROM company WHERE...;
EXCEPTION
WHEN OTHERS THEN log_error;
END;
END; 실행 장치 에서 던 진 이상 은 항상 현재 블록 에서 처 리 됩 니 다. 일치 하 는 핸들 이 존재 한다 면.모든 구문 에 BEGIN 을 추가 한 다음 에 EXCEPTION 유닛 과 END 문 구 를 추가 하여 '가상 블록' 을 구축 하면 코드 에서 이상 한 실패 범 위 를 제어 할 수 있 습 니 다.
WHEN OTHERS 의 처리
WHEN OTHERS 문 구 는 모든 다른 처리 되 지 않 은 이상 을 포착 할 수 있 습 니 다.
내 장 된 이상 함 수 를 이용 할 수 있 습 니 다. 예 를 들 어 SQLCODE 와 DBMSUTILITY.FORMAT_ERROR_STACK 에서 오류 가 발생 했 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Confluence에서 PlantUML을 사용하여 ER 다이어그램을 텍스트 기반으로 작성외래 키 제약이 완벽하게 작성된 환경이라면, 리버스 엔지니어링으로 자동으로 ER 다이어그램을 작성해 주는 툴은 상당히 있을까 생각합니다. 그러나 외래 키 제약 조건이 유지되지 않는 환경에서는 수동으로 관계를 결정해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.