PL/토토 결과 함수 내 또는 PL/토토 결과 함수에서 호출된 토토 결과 코드는 잘못된 작업을 실행하거나 토토 결과을 사용하여 오류를 생성함으로써 오류를 일으킬 수 있습니다.오류명령 또는 PL/토토 결과'selog명령. 이러한 오류는 Tcl을 사용하여 Tcl 내에서 포착될 수 있습니다.잡기명령. 오류가 포착되지 않았지만 PL/Tcl 함수 실행의 최상위 수준으로 전파되도록 허용된 경우 함수 호출 쿼리에서 SQL 오류로 보고됩니다.
반대로, PL/Tcl 내에서 발생하는 SQL 오류spi_exec, spi_prepare그리고spi_execp명령은 Tcl 오류로 보고되므로 Tcl에서 잡을 수 있습니다.잡기명령. (각 PL/Tcl 명령은 하위 트랜잭션에서 SQL 작업을 실행하며 오류 발생 시 롤백되므로 부분적으로 완료된 작업은 자동으로 정리됩니다.) 다시 말하지만, 오류가 포착되지 않고 최상위 수준으로 전파되면 SQL 오류로 돌아갑니다.
Tcl은 다음을 제공합니다오류 코드Tcl 프로그램이 해석하기 쉬운 형식으로 오류에 대한 추가 정보를 나타낼 수 있는 변수입니다. 내용은 Tcl 목록 형식이며 첫 번째 단어는 오류를 보고하는 하위 시스템 또는 라이브러리를 식별합니다. 그 이후의 내용은 개별 하위 시스템이나 라이브러리에 맡겨집니다. PL/Tcl 명령으로 보고된 데이터베이스 오류의 경우 첫 번째 단어는포스트그레스, 두 번째 단어는 PostgreSQL 버전 번호이고 추가 단어는 오류에 대한 자세한 정보를 제공하는 필드 이름/값 쌍입니다. 필드SQLSTATE, 조건및메시지항상 제공됩니다(처음 두 개는 다음과 같이 오류 코드와 조건 이름을 나타냅니다.PostgreSQL : 문서 : 16 : 부록 A. PostgreSQL 스포츠 토토 사이트 코드). 존재할 수 있는 필드는 다음과 같습니다.세부정보, 힌트, 컨텍스트, 스키마, 테이블, 열, 데이터 유형, 제약, 성명, cursor_position, 파일 이름, lineno및기능 이름.
PL/토토 결과로 작업하는 편리한 방법오류 코드정보는 필드 이름이 배열 첨자가 되도록 배열에 로드하는 것입니다. 이를 수행하기 위한 코드는 다음과 같습니다.
if [catch spi_exec $sql_command ]
if [linindex $::errorCode 0] == "POSTGRES"
배열 세트 errorArray $::errorCode
if $errorArray(조건) == "정의되지 않은_테이블"
# 누락된 테이블 처리
그렇지 않으면
# 다른 유형의 SQL 오류를 처리합니다.
(이중 콜론은 명시적으로 다음을 지정합니다.오류코드전역 변수입니다.)
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.