43.8. PL/토토 캔에서의 오류 처리

pl/토토 캔 함수에서 또는 호출 된 토토 캔 코드는 유효하지 않은 작업을 실행하거나 토토 캔을 사용하여 오류를 생성하여 오류를 일으킬 수 있습니다.오류명령 또는 pl/토토 캔 'selog명령. Such errors can be caught within 토토 캔 using the 토토 캔캐치명령. 오류가 잡히지 않았지만 PL/TCL 기능의 최상위 수준으로 전파 할 수있는 경우 기능의 호출 쿼리에서 SQL 오류로보고됩니다..

반대로 PL/TCL 내에서 발생하는 SQL 오류SPI_EXEC, SPI_PREPARESPI_EXECPcommands are reported as 토토 캔 errors, so they are catchable by 토토 캔's캐치명령. (이러한 PL/TCL 명령 각각은 하위 트랜잭션에서 SQL 작업을 실행하여 오류로 롤백되어 부분적으로 완성 된 작업이 자동으로 정리됩니다.) 오류가 잡히지 않고 최상위 레벨로 전파되면 SQL 오류로 돌아갑니다..

토토 캔 제공ErrorCodeTCL 프로그램이 쉽게 해석하기 쉬운 양식의 오류에 대한 추가 정보를 나타낼 수있는 변수. 내용은 TCL 목록 형식이며 첫 번째 단어는 오류를보고하는 서브 시스템 또는 라이브러리를 식별합니다. 그 외에도 내용은 개별 서브 시스템 또는 라이브러리에 맡겨집니다. PL/TCL 명령에 의해보고 된 데이터베이스 오류의 경우 첫 번째 단어는입니다.Postgres, 두 번째 단어는 PostgreSQL 버전 번호이며 추가 단어는 오류에 대한 자세한 정보를 제공하는 필드 이름/값 쌍입니다. 전지sqlstate, 조건메시지항상 제공됩니다 (첫 번째 두 개는에 표시된대로 오류 코드 및 조건 이름을 나타냅니다.PostgreSQL : 문서 : 13 : 부록 A. PostgreSQL 스포츠 토토 베트맨 코드). 존재할 수있는 필드는 다음과 같습니다.세부 사항, 힌트, 컨텍스트, 스키마, 테이블, , DataType, 제약 조건, 진술, cursor_position, filename, LinenofuncName.

PL/토토 캔과 함께 일하는 편리한 방법ErrorCode정보는 필드 이름이 배열 첨자가되도록 배열에로드하는 것입니다. 그렇게하는 코드는

if [catch spi_exec $ sql_command] 
    if [lindex $ :: ErrorCode 0] == "postgres" 
        배열 세트 ERRERARRAY $ :: ERRORCODE
        if $ errorArray (조건) == "undefined_table" 
            # 누락 된 테이블을 처리하십시오
         또 다른 
            # 다른 유형의 SQL 오류를 처리하십시오

(이중 콜론은 명시 적으로 명시합니다ErrorCode글로벌 변수입니다.)

정정 제출

문서에 올바른 것이 없으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면