차례:
비디오: 오라클 DB SQL 강좌 | 테이블 참조, Foreign Key, 참조 무결성 제약조건, SQLP, SQLD, 데이터베이스 실습 강의 2024
모든 SQL 문의 실행 후에 프로그램을 SQLSTATE로 볼 수 있습니다. 다음에 할 수있는 것에는 여러 가지 가능성이 있습니다. 당신이 얻는 지식으로 무엇을합니까?
-
클래스 코드가 00 인 경우 아무 것도하지 않으려 고합니다. 원래 계획대로 진행되도록 진행합니다.
-
01 또는 02 의 클래스 코드를 발견하면 특별한 조치를 취하는 것이 좋습니다. "경고"또는 "발견되지 않음"표시를 예상 한 경우 실행을 진행할 수 있습니다. 이러한 클래스 코드 중 하나를 예상하지 못한 경우 예상치 못한 예외를 처리하도록 설계된 프로 시저로 실행 분기를 가지기를 원할 것입니다. 그러나 예상치 못한 경고 또는 발견되지 않은 결과는 처리 할 수 없습니다.
-
다른 클래스 코드를받는다면 잘못된 것입니다. 예외 처리 절차로 이동해야합니다. 분기 할 프로시 듀어는 세 개의 서브 클래스. 자의 내용과 SQLSTATE의 두 클래스. 자의 내용에 따라 다 (니다. 서로 다른 예외가 여러 개있을 수있는 경우 서로 다른 예외가 종종 다른 응답을 요구하기 때문에 각각에 대해 예외 처리 절차가 있어야합니다.
일부 오류를 수정하거나 대안을 찾을 수 있습니다. 다른 오류는 치명적일 수 있습니다. 누구도 죽지는 않겠지 만 결국 응용 프로그램을 종료해야 할 수도 있습니다.
핸들러 선언
복합 명령문 내에 조건 핸들러 를 넣을 수 있습니다. 조건 핸들러를 작성하려면 먼저 처리 할 조건을 선언해야합니다. 선언 된 조건은 일종의 예외 일 수도 있고, 사실 일 수 있습니다. 가능한 조건은 다음과 같습니다.
00, 01 또는 02 이외의 SQLSTATE 클래스
이 예제는 현실적이지 않습니다. 일반적으로 조건이 발생할 수있는 SQL 문과 조건이 발생하면 호출되는 핸들러는 BEGIN … END 구조로 묶여 있기 때문입니다.
핸들러 액션과 핸들러 효과
핸들러를 호출하는 조건이 발생하면 핸들러에 의해 지정된 액션이 실행됩니다. 이 조치는 복합 명령문이 될 수있는 SQL 문입니다. 처리기 동작이 성공적으로 완료되면 처리기 효과가 실행됩니다.다음은 가능한 세 가지 핸들러 효과 목록입니다.
CONTINUE: 핸들러가 호출 된 명령문 바로 다음부터 실행을 계속합니다.
-
EXIT: 핸들러를 포함하는 복합 명령문 다음에 실행을 계속하십시오.
UNDO: 복합 명령문에서 이전 명령문의 작업을 실행 취소 한 후 핸들러를 포함하는 명령문 다음에 실행을 계속하십시오. -
핸들러가 핸들러를 호출 한 모든 문제점을 정정 할 수 있으면 CONTINUE 효과가 적절할 수 있습니다. 핸들러가. 제점을 수정하지 않았지만 복합 명령문에 대한 변경 사항을 실행 취소 할 필요가 없으면 EXIT 효과가 적절할 수 있습니다. 복합 명령문이 실행되기 전의 상태로 데이터베이스를 리턴하려면 UNDO 효과가 적절합니다.
-
다음 예제를 고려하십시오.
BEGIN ATOMIC DECLARE constraint_violation CONDITION FOR SQLSTATE VALUE '23000'; constraint_violation에 대한 핸들러를 해제하도록 선언 RESIGNAL; REPLACE INTO students (StudentID, Fname, Lname) VALUES (: sid,: sfname,: slname); REPLACE INTO 명단 (ClassID, Class, StudentID) VALUES (: cid,: cname,: sid); 종료;
INSERT 문 중 하나에서 제약 조건 위반이 발생하면 (예: 테이블에 이미 기본 키가 중복 된 레코드를 추가하려는 경우) SQLSTATE는 값 '23000'을 가정하므로 constraint_violation 조건을 진정한 가치.
이 조치는 핸들러가 INSERT 명령으로 테이블에 작성된 변경 사항을 실행 취소하게합니다. RESIGNAL 문은 제어를 현재 실행중인 프로 시저를 호출 한 프로 시저로 다시 이전합니다.
두 INSERT 문이 모두 성공적으로 실행되면 END 키워드 다음에 오는 문으로 실행이 계속됩니다.
ATOMIC 키워드는 핸들러의 효과가 UNDO 일 때마다 필수적입니다. 효과가 계속되거나 종료되는 핸들러의 경우는 그렇지 않습니다.