PL/SQL에서의 오류 처리에 대해 알고 싶습니다. 누구든지이 주제에 대한 간단한 설명을 찾도록 도와 줄 수 있습니까?pl/sql에서 오류 처리
답변
모든 블록에는 예외 처리기가있을 수 있습니다. 예 :이 링크는 더 말할 것
DECLARE
/* declare your variables */
BEGIN
/*Here is your code */
EXCEPTION
WHEN NO_DATA_FOUND THEN
/* HAndle an error that gets raised when a query returns nothing */
WHEN TOO_MANY_ROWS THEN
/* HAndle the situation when too much data is returned such as with a select-into */
WHEN OTHERS THEN
/* Handle everything else*/
END;
: http://download.oracle.com/docs/cd/B13789_01/appdev.101/b10807/07_errs.htm
링크는 당신에게 당신의 자신의 예외 이름을 만드는 방법에 대한 자세한 나보다 상세뿐만 아니라 예를 보여줍니다.
당신이 함수를 가지고 있고 예외 처리기에서 값을 반환하지 못하면 호출 함수에서 예외가 throw됩니다. 큰 문제는 아니지만 항상 잊어 버린 것 같습니다.
다른 답변에서 언급 된 Oracle 기사는 읽을 가치가 있습니다.
PL/SQL 예외를 포착하는 몇 가지 추가 사항은 오류 스택을 잃습니다. 즉, 정확히 어떤 행에서 예외가 발생했는지에 대한 정보가 손실됩니다.
동일한 예외 (예 : NO_DATA_FOUND를 반환 할 수있는 둘 이상의 SQL 문이있는 경우)가 발생할 수있는 여러 위치가 포함 된 코드 블록을 디버깅하기가 어려울 수 있습니다. 한 가지 옵션은 예외 처리기의 일부로 전체 오류 스택을 기록하는 것입니다.
EXCEPTION
WHEN TOO_MANY_ROWS THEN
myLogger('Some useful information',DBMS_UTILITY.FORMAT_ERROR_STACK);
END;
당신이 예외를 포착하면 잡을하려는 지점에 가능한 한 현지로 예외 처리를 유지하고 만 사용해야하는 경우 언제 마지막으로 리조트에서 기타.
또한 가장 유용한 기능 중
EXCEPTION
WHEN TOO_MANY_ROWS THEN
closeSmtpConnection;
RAISE;
END;
한 '무언가와 같은 예외를 재 - 제기 할'수는 이름있는 기능입니다 및 Oracle SQL 내부 예외를 잡을 수있어.
DECLARE
recompile_failed EXCEPTION;
PRAGMA EXCEPTION_INIT (recompile_failed,-24344);
BEGIN
. . . . . .
EXCEPTION
WHEN recompile_failed THEN
emailErrors(pObjectType,pObjectName);
END;
이에 대한 역설적으로 사용자 정의 PL /로 'SQL'예외
RAISE_APPLICATION_ERROR(-20001,'my text')
이것은 호출하는 응용 프로그램에 대한 사용자 정의 텍스트를 전파 할 수있는 유일한 방법입니다 정의 된 사용자를 제기 할 수있는 기능입니다 SQL 예외는 '범위'경계를 넘지 않습니다.
유감스럽게도 사용자 정의 예외에 대해 -20000에서 -20999 범위를 사용할 수 있음에도 불구하고 일부 Oracle 확장 패키지는 이러한 일련 번호를 사용하므로 일련 번호만으로는 호출 오류를 식별 할 수 없습니다 언어.
는
한 트릭 내가 유용한 발견했습니다는 '상태와 패키지를 만드는 것입니다 (대부분의 사람들은 또한 오류를 기록하고, 종종 테이블에서 오류 텍스트를 유도하기 위해 다른 코드에 RAISE_APPLICATION_ERROR를 포장하는 경향이있다) '변수, 단순한 setter 및 getter 함수 등이 있습니다. 데이터베이스 업데이트와 달리 패키지의 정보는 오류시 롤백되지 않습니다.
오류가 발생하면 패키지에 정보를 설정 한 다음 호출 언어로 getters를 사용하여 검색하여 '기본'예외를 생성하십시오.
사용자 정의 pl/sql 예외는 로컬 코드에서 유용 할 수 있지만 대부분의 경우 다른 제어 구조를 사용하여 피할 수 있습니다 (즉, 대체 GOTO로 사용하지 마십시오).
패키지 헤더에 전역 예외를 만들면 패키지가 반환 할 수있는 예외를 지정하는 것이 좋은 방법 인 것처럼 보이지만 결국 호출 코드는 모든 예외를 처리해야하는 결과를 낳습니다. 기본 패키지의
과거에이 경로를 직접 사용하지 않았으므로 패키지를 자체 포함시키고 RAISE_APPLICATION_ERROR를 사용하거나 텍스트로 오류를 전달하십시오.
- 1. 커서를 PLSQL에서 TSQL로 변환
- 2. 처리 오류
- 3. plsql에서 커서에 날짜 값을 전달하려면 어떻게합니까?
- 4. PLSQL에서 UPDATE 및 WITH를 사용하는 방법
- 5. AJAX div의 오류 처리
- 6. Access에서 출력 오류 처리
- 7. Qt/C++ 오류 처리
- 8. S4 클래스로 오류 처리
- 9. popen에 대한 오류 처리
- 10. ASHX 코드의 오류 처리
- 11. CodeIgniter에서 쿼리 오류 처리
- 12. MVC 영역 오류 처리
- 13. WCF 오류 처리
- 14. TidHTTP 오류 처리
- 15. Python + Pylons의 오류 처리
- 16. 복사 중 오류 처리
- 17. CDI - 처리 오류
- 18. jQuery AJAX 오류 처리
- 19. VBScript - 오류 처리 사용
- 20. curl_multi_exec로 인한 오류 처리
- 21. 복잡한 오류 처리
- 22. 처리 할 새 오류
- 23. CORBA를 사용하여 오류 처리
- 24. 플라스크 오류 처리
- 25. 오류 처리. 프로그램은 어떻게해야합니까?
- 26. 오류 처리 웹 서비스
- 27. 선택적 오류 처리
- 28. matlab 이미지 처리 오류
- 29. ASP.NET 오류 처리 질문
- 30. PHP에서 오류 처리
예외가 하위 블록에서 발견되지 않으면 상위 블록 (결국 클라이언트)으로 전파됩니다. 이전 규칙 적용 - 처리 방법을 모르는 오류 조건을 확인하지 마십시오. 그냥 흘러 나오게하십시오. 상위 레벨 블록이이를 catch하거나 호출이 실패하고 클라이언트 응용 프로그램 (또는 사용자)이이를 처리합니다. –