이 문서는 지원되지 않는 버전의 Postgre롤 토토을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다Postgre롤 토토 : 문서 : 17 : 34.8. 토토 핫 처리버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

32.11. 오류 처리

이 섹션에서는 예외적 인 방법을 설명합니다 임베디드 롤 토토 프로그램의 조건 및 경고. 거기 있습니다 이를위한 몇 가지 비 독점 시설.

32.11.1. 콜백 설정

오류와 경고를 포착하는 간단한 방법 중 하나는 특정 조건이있을 때마다 실행될 특정 조치 발생합니다. 일반적으로 :

exec 롤 토토 언제라도조건 Action;

조건중 하나 일 수 있습니다 수행원:

롤 토토error

지정된 조치는 오류가있을 때마다 호출됩니다 롤 토토 문을 실행하는 동안 발생합니다.

롤 토토WARNING

지정된 조치는 경고 할 때마다 호출됩니다 롤 토토 문을 실행하는 동안 발생합니다.

찾기

지정된 조치는 롤 토토이있을 때마다 호출됩니다 명령문은 0 행을 검색하거나 영향을 미칩니다. (이 조건 오류는 아니지만 취급에 관심이있을 수 있습니다. 특별히.)

Action중 하나 일 수 있습니다 수행원:

계속

이것은 효과적으로 조건이 무시된다는 것을 의미합니다. 이것은 기본입니다.

GOTO레이블
이동레이블

지정된 레이블로 점프 (C 사용gotoStatement).

롤 토토print

표준 오류로 메시지를 인쇄합니다. 이것은 유용합니다 간단한 프로그램 또는 프로토 타이핑 중. 세부 사항 메시지를 구성 할 수 없습니다.

정지

Call출구 (1)프로그램을 종료하십시오.

브레이크

C 문을 실행break. 이것은 루프에서만 사용해야합니다 또는스위치진술.

call이름(args)
do이름(args)

지정된 C 함수를 지정된 상태로 호출하십시오 논쟁.

롤 토토 표준은 동작 만 제공합니다계속andGoto(및이동).

여기에 간단하게 사용하고 싶은 예가 있습니다. 프로그램. 경고가 발생할 때 간단한 메시지를 인쇄하고 오류가 발생하면 프로그램을 중단합니다.

롤 토토warning 롤 토토print가있을 때마다 EXEC 롤 토토;
롤 토토error 중지 될 때마다 EXEC 롤 토토;

진술exec 롤 토토 언제라도IS C 문자가 아닌 롤 토토 사전 처리기의 지침. 그만큼 설정하는 오류 또는 경고 조치는 모든 임베디드 롤 토토에 적용됩니다. 핸들러가있는 지점 아래에 나타나는 진술 동일한 조건에 대해 다른 조치가 설정되지 않는 한 설정 첫 번째exec 롤 토토 언제라도및 롤 토토 문은 조건을 유발합니다. C 프로그램의 제어 흐름. 그래서 둘 중 어느 것도 다음 C 프로그램 발췌문은 원하는 효과가 있습니다 :

/*
 * 잘못된
 */
int main (int argc, char *argv [])

    ...
    if (verbose) 
        롤 토토WARNING 롤 토토PRINT가있을 때마다 EXEC 롤 토토;

    ...
    Exec 롤 토토 Select ...;
    ...
/*
 * 잘못된
 */
int main (int argc, char *argv [])

    ...
    set_error_handler ();
    ...
    Exec 롤 토토 Select ...;
    ...

정적 void set_error_handler (void)

    롤 토토ERROR가 중지 될 때마다 롤 토토 EXEC;

32.11.2. 롤 토토CA

보다 강력한 오류 처리, 내장 된 롤 토토 인터페이스 이름으로 글로벌 변수를 제공롤 토토CA다음 구조가 있습니다.

struct

    char 롤 토토caid [8];
    긴 롤 토토abc;
    긴 롤 토토code;
    구조

        int 롤 토토errml;
        char 롤 토토errmc [70];
     롤 토토errm;
    char 롤 토토errp [8];
    긴 롤 토토errd [6];
    char 롤 토토warn [8];
    char 롤 토토state [5];
 롤 토토ca;

(멀티 스레드 프로그램에서는 모든 스레드가 자동으로 가져옵니다 자체 사본롤 토토CA. 이것은 작동합니다 표준 C 글로벌 변수의 처리와 마찬가지로errno.)

롤 토토CA두 경고와 오류. 여러 경고 나 오류가 발생하는 경우 진술 실행,롤 토토CA마지막 정보 만 포함됩니다.

마지막에서 오류가 발생하지 않은 경우롤 토토Statement,롤 토토ca.롤 토토code0 및롤 토토ca.롤 토토state"00000". 경고 또는 오류가 발생하면롤 토토ca.롤 토토code부정적이고롤 토토ca.롤 토토state"00000". 긍정적롤 토토ca.롤 토토code무해한 상태를 나타냅니다. 마지막 쿼리가 0 행을 반환했습니다.롤 토토codeand롤 토토state두 가지 다른 오류 코드 체계입니다. 세부 사항은 아래에 나타납니다.

마지막 롤 토토 문이 성공하면롤 토토CA.롤 토토ERRD [1]해당되는 경우 처리 된 행 및롤 토토CA.롤 토토ERRD [2]수를 포함합니다 명령에 적용 가능한 경우 처리 또는 반환 된 행.

오류 또는 경고의 경우롤 토토CA.롤 토토ERRM.롤 토토ERRMC문자열이 포함됩니다 오류를 설명합니다. 필드롤 토토ca.롤 토토errm.롤 토토errml길이를 포함합니다 저장된 오류 메시지롤 토토CA.롤 토토ERRM.롤 토토ERRMC(의 결과strlen (), 정말 흥미롭지 않습니다 C 프로그래머의 경우). 일부 메시지는 너무 길다 고정 크기에 적합롤 토토ERRMC배열; 그들은 잘릴 것입니다.

경고의 경우롤 토토ca.롤 토토warn [2]로 설정되었습니다W. (다른 모든 경우에는 무언가로 설정됩니다 와 다릅니다17799_17802.) if롤 토토ca.롤 토토warn [1]로 설정되었습니다W, 저장되었을 때 값이 잘 렸습니다. 호스트 변수에서.롤 토토ca.롤 토토warn [0]로 설정되었습니다w다른 사람이라면 요소는 경고를 표시하도록 설정되어 있습니다.

필드롤 토토CAID, 롤 토토CABC, 롤 토토ERRP및 나머지 요소롤 토토errdand롤 토토warn현재 유용한 것은 없습니다 정보.

구조롤 토토CA정의되지 않았습니다 롤 토토 표준에서는 다른 여러 롤 토토에서 구현됩니다. 데이터베이스 시스템. 정의는 핵심에서 비슷하지만 휴대용 응용 프로그램을 작성하려면 다른 구현을주의 깊게 조사하십시오.

32.11.3. 롤 토토statevs롤 토토code

필드롤 토토ca.롤 토토stateand롤 토토ca.롤 토토code두 가지가 다릅니다 오류 코드를 제공하는 체계. 둘 다 롤 토토에서 파생됩니다 표준이지만롤 토토code표시되었습니다 표준의 롤 토토-92 판에서 더 이상 사용되지 않았으며 나중에 판에 떨어졌습니다. 따라서 새로운 응용 프로그램이 있습니다 강력하게 사용하도록 장려롤 토토state.

롤 토토state는 5 자 배열입니다. 다섯 문자에는 숫자 또는 상위 문자가 포함되어 있습니다 다양한 오류 및 경고 조건의 코드를 나타냅니다.롤 토토state계층 적 체계가 있습니다. 처음 두 문자는 일반 클래스의 조건, 마지막 세 문자는 일반적인 상태. 성공적인 상태는 코드로 표시됩니다00000. 그만큼롤 토토state코드는 대부분 정의되어 있습니다 롤 토토 표준. 그만큼Postgre롤 토토서버가 기본적으로 지원롤 토토state오류 코드; 따라서 높음 이 오류 코드를 사용하여 일관성을 달성 할 수 있습니다. 모든 응용 프로그램 전체에서 체계. 자세한 내용은 참조Postgre젠 토토 : 문서 : 8.3 : Postgre젠 토토 오류 코드.

롤 토토code, 더 이상 사용되지 않은 오류 코드 체계는 간단한 정수입니다. 0의 값은 성공을 나타냅니다 긍정적 값은 추가 정보로 성공을 나타냅니다 음수 값은 오류를 나타냅니다. 롤 토토 표준 만 긍정적 값 +100을 정의하며, 이는 마지막으로 명령은 0 행을 반환하거나 영향을 미쳤으며 구체적이지 않습니다 음수 값. 따라서이 계획은 가난한 사람들 만 달성 할 수 있습니다 이식성 및 계층 적 코드 할당이 없습니다. 역사적으로, 내장 된 롤 토토 프로세서 용Postgre롤 토토일부 특정 할당롤 토토code사용을위한 값 숫자 값과 상징적 이름으로 아래에 나열되어 있습니다. 이것들은 다른 롤 토토에 휴대 할 수 없음을 기억하십시오 구현. 응용 프로그램의 포팅을 단순화하려면롤 토토stateScheme, 해당롤 토토state도 나열됩니다. , 그러나 둘 사이에 일대일 또는 일대일 매핑은 없습니다 체계 (실제로는 다수)이므로 상담해야합니다. 글로벌롤 토토state목록에서부록 A각각의 경우.

이들은 할당되었습니다롤 토토code값 :

-12 (ecpg_out_of_memory)

가상 메모리가 소진되었음을 나타냅니다. (롤 토토STATE YE001)

-200 (ecpg_unsupported)

사전 처리기가 무언가를 생성했음을 나타냅니다 도서관이 알지 못합니다. 아마도 당신은 전처리업자의 양립 할 수없는 버전을 실행합니다 도서관. (롤 토토STATE YE002)

-201 (ecpg_too_many_arguments)

이것은 명령에 더 많은 호스트를 지정했음을 의미합니다 명령이 예상했던 것보다 변수. (롤 토토STATE 07001 또는 07002)

-202 (ecpg_too_few_arguments)

이것은 명령에 더 적은 호스트를 지정했음을 의미합니다 명령이 예상했던 것보다 변수. (롤 토토STATE 07001 또는 07002)

-203 (ecpg_too_many_matches)

이것은 쿼리가 여러 행을 반환했지만 진술은 하나의 결과 행을 저장할 준비가되었습니다 ( 예를 들어 지정된 변수는 배열이 아니기 때문에). (롤 토토STATE 21000)

-204 (ecpg_int_format)

호스트 변수는 유형입니다int그리고 데이터베이스의 데이텀은 다른 유형이며 로 해석 할 수없는 값을 포함합니다int. 라이브러리 사용strtol ()이 변환의 경우. (롤 토토state 42804)

-205 (ecpg_uint_format)

호스트 변수는 유형입니다서명되지 않은 int그리고 데이터베이스의 데이텀은 다릅니다. 다음으로 해석 할 수없는 값을 유형하고 포함합니다.서명되지 않은 int. 라이브러리 사용strtoul ()이것 변환. (롤 토토STATE 42804)

-206 (ecpg_float_format)

호스트 변수는 유형입니다float그리고 데이터베이스의 데이텀은 다른 유형은 할 수없는 값을 포함합니다 A로 해석float. 도서관 사용strtod ()이것 변환. (롤 토토STATE 42804)

24494_24502ECPG_CONVERT_BOOL)

이것은 호스트 변수가 유형임을 의미합니다bool그리고 데이터베이스의 데이텀은 아니야't'NOR'F'. (롤 토토STATE 42804)

-212 (ecpg_empty)

진술은Postgre롤 토토서버가 비어있었습니다. (이것 임베디드 롤 토토 프로그램에서 일반적으로 발생할 수 없으므로 내부 오류를 가리킬 수 있습니다.) (롤 토토STATE YE002)

-213 (ecpg_missing_indicator)

널 값이 반환되었고 널 표시기가 없습니다 변수가 제공되었습니다. (롤 토토STATE 22002)

-214 (ecpg_no_array)

일반 변수가 필요한 장소에서 사용되었습니다. 배열. (롤 토토STATE 42804)

-215 (ecpg_data_not_array)

데이터베이스는 장소에서 일반 변수를 반환했습니다 배열 값이 필요합니다. (롤 토토STATE 42804)

-220 (ecpg_no_conn)

프로그램은 그렇지 않은 연결에 액세스하려고했습니다. 존재하다. (롤 토토STATE 08003)

-221 (ecpg_not_conn)

이 프로그램은 연결에 액세스하려고 시도했습니다 존재하지만 열려 있지 않습니다. (이것은 내부 오류입니다.) (롤 토토STATE YE002)

-230 (ecpg_invalid_stmt)

당신이 사용하려는 진술은 준비. (롤 토토STATE 26000)

-240 (ecpg_unknown_descriptor)

지정된 설명자를 찾을 수 없었습니다. 진술 당신은 준비를 시도하지 않았습니다. (롤 토토state 33000)

-241 (ecpg_invalid_descriptor_index)

지정된 서술자 지수는 범위를 벗어났습니다. (롤 토토STATE 07009)

-242 (ecpg_unknown_descriptor_item)

잘못된 디스크립터 항목이 요청되었습니다. (이것은 an입니다 내부 오류.) (롤 토토STATE YE002)

-243 (ecpg_var_not_numeric)

동적 진술을 실행하는 동안 데이터베이스는 숫자 값과 호스트 변수를 반환했습니다 숫자가 아니 었습니다. (롤 토토STATE 07006)

-244 (ecpg_var_not_char)

동적 진술을 실행하는 동안 데이터베이스는 숫자가 아닌 값과 호스트를 반환했습니다 변수는 숫자였습니다. (롤 토토STATE 07006)

-400 (ECPG_PG롤 토토)

Postgre롤 토토서버. 메시지 의 오류 메시지가 포함되어 있습니다.Postgre롤 토토Server.

-401 (ecpg_trans)

thePostgre롤 토토서버 우리가 시작, 커밋 또는 롤백을 할 수 없다는 신호를 보냈습니다 거래. (롤 토토STATE 08007)

-402 (ecpg_connect)

데이터베이스에 대한 연결 시도는 그렇지 않았습니다 성공하십시오. (롤 토토STATE 08001)

100 (ecpg_not_found)

이것은 마지막을 나타내는 무해한 조건입니다 명령 검색 또는 처리 된 제로 행 또는 귀하가 커서의 끝에. (롤 토토STATE 02000)