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

33.8. 오류 처리

이 섹션에서는 탁월한 조건을 처리 할 수있는 방법에 대해 설명합니다 임베디드 스포츠 토토 사이트 프로그램의 경고. 두 가지 비 xclisubor가 있습니다 이것을위한 시설.

  • 콜백은 경고 및 오류를 처리하도록 구성 할 수 있습니다 사용 조건언제든지명령.

  • 오류 또는 경고에 대한 자세한 정보를 얻을 수 있습니다. 에서스포츠 토토 사이트CA가변.

33.8.1. 콜백 설정

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

exec 스포츠 토토 사이트 언제라도조건 action;

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

스포츠 토토 사이트error

지정된 조치는 오류가 발생할 때마다 호출됩니다. 스포츠 토토 사이트 문의 실행.

스포츠 토토 사이트warning

지정된 조치는 경고가 발생할 때마다 호출됩니다. 스포츠 토토 사이트 문의 실행.

찾기

지정된 조치는 스포츠 토토 사이트 문이있을 때마다 호출됩니다 0 행을 검색하거나 영향을 미칩니다. (이 조건은 오류가 아닙니다. 하지만 특별히 처리하는 데 관심이있을 수 있습니다.)

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

계속

이것은 효과적으로 조건이 무시되었음을 의미합니다. 이것은 기본값.

goto레이블
이동레이블

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

스포츠 토토 사이트print

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

정지

Call출구 (1)프로그램.

브레이크

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

이름(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;

33.8.2. 스포츠 토토 사이트CA

보다 강력한 오류 처리, 내장 된 스포츠 토토 사이트 인터페이스 이름으로 글로벌 변수를 제공스포츠 토토 사이트CA(스포츠 토토 사이트 통신 영역) 다음 구조 :

구조

    char 스포츠 토토 사이트caid [8];
    긴 스포츠 토토 사이트abc;
    긴 스포츠 토토 사이트code;
    구조

        int 스포츠 토토 사이트errml;
        char 스포츠 토토 사이트errmc [스포츠 토토 사이트errmc_len];
     스포츠 토토 사이트errm;
    char 스포츠 토토 사이트errp [8];
    긴 스포츠 토토 사이트errd [6];
    char 스포츠 토토 사이트warn [8];
    char 스포츠 토토 사이트state [5];
 스포츠 토토 사이트ca;

(멀티 스레드 프로그램에서는 모든 스레드가 자동으로 가져옵니다 자신의 사본스포츠 토토 사이트CA. 이것은 비슷하게 작동합니다 표준 C 글로벌 변수의 처리errno.)

스포츠 토토 사이트CA경고와 오류를 모두 다룹니다. 실행 중에 여러 경고 나 오류가 발생하는 경우 진술,스포츠 토토 사이트CA만 포함합니다 마지막 정보에 대한 정보.

마지막에서 오류가 발생하지 않은 경우스포츠 토토 사이트Statement,스포츠 토토 사이트ca.스포츠 토토 사이트code는 0이고스포츠 토토 사이트ca.스포츠 토토 사이트state"00000". 경고 또는 오류가 발생하면스포츠 토토 사이트ca.스포츠 토토 사이트code부정적이고스포츠 토토 사이트ca.스포츠 토토 사이트state"00000". 긍정적스포츠 토토 사이트ca.스포츠 토토 사이트code그러한 무해한 조건을 나타냅니다 마지막 쿼리가 0 행을 반환했습니다.스포츠 토토 사이트code스포츠 토토 사이트state두 가지 다른 오류 코드 체계; 세부 사항은 아래에 나타납니다.

마지막 스포츠 토토 사이트 문이 성공하면스포츠 토토 사이트CA.스포츠 토토 사이트ERRD [1]처리 된 OID를 포함합니다 적용 가능한 경우 행,스포츠 토토 사이트CA.스포츠 토토 사이트ERRD [2]적용 가능한 경우 처리 된 행 또는 반품 행의 수를 포함합니다. 명령.

오류 또는 경고의 경우스포츠 토토 사이트CA.스포츠 토토 사이트ERRM.스포츠 토토 사이트ERRMC그 문자열이 포함됩니다 오류를 설명합니다. 필드스포츠 토토 사이트ca.스포츠 토토 사이트errm.스포츠 토토 사이트errml의 길이를 포함합니다 저장된 오류 메시지스포츠 토토 사이트CA.스포츠 토토 사이트ERRM.스포츠 토토 사이트ERRMC(의 결과strlen (), c 프로그램 제작자). 일부 메시지는 너무 길어서 고정 크기스포츠 토토 사이트ERRMC배열; 그들은 될 것입니다 잘린.

경고의 경우스포츠 토토 사이트CA.스포츠 토토 사이트WARN [2]로 설정되었습니다W. (다른 모든 경우에는 그렇습니다 와 다른 것으로 설정W.) if스포츠 토토 사이트ca.스포츠 토토 사이트warn [1]로 설정되었습니다W, 값이 저장되었을 때 값이 잘 렸습니다. 호스트 변수.스포츠 토토 사이트ca.스포츠 토토 사이트warn [0]가 설정되었습니다 에게W다른 요소 중 하나가 설정된 경우 경고를 표시하려면

필드스포츠 토토 사이트CAID, 스포츠 토토 사이트CABC, 스포츠 토토 사이트ERRP, 그리고 나머지 요소스포츠 토토 사이트errdand스포츠 토토 사이트warn현재 번호가 포함되어 있습니다 유용한 정보.

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

다음은의 사용을 결합한 예입니다.언제든지and스포츠 토토 사이트CA, 의 내용 인쇄스포츠 토토 사이트CA오류가 발생합니다. 이것은 디버깅 또는 프로토 타이핑에 유용 할 것입니다 응용 프로그램, 더 설치하기 전에"사용자 친화적"오류 핸들러.

스포츠 토토 사이트error call print_sqlca ()를 호출 할 때마다 EXEC 스포츠 토토 사이트;

무효의
print_sqlca ()

    fprintf (stderr, "==== 스포츠 토토 사이트CA ==== \ n");
    fprintf (stderr, "스포츠 토토 사이트code : %ld \ n", 스포츠 토토 사이트ca.스포츠 토토 사이트code);
    fprintf (stderr, "sqlerrm.sqlerrml : %d \ n", 스포츠 토토 사이트ca.스포츠 토토 사이트errm.스포츠 토토 사이트errml);
    fprintf (stderr, "sqlerrm.sqlerrmc : %s \ n", sqlca.sqlerrm.sqlerrmc);
    fprintf (stderr, "스포츠 토토 사이트errd : %ld %ld %ld %ld %ld %ld \ n", sqlca.스포츠 토토 사이트errd [0], sqlca.스포츠 토토 사이트errd [1], sqlca.스포츠 토토 사이트errd [2],
                                                          sqlca.스포츠 토토 사이트errd [3], sqlca.스포츠 토토 사이트errd [4], sqlca.스포츠 토토 사이트errd [5]);
    fprintf (stderr, "스포츠 토토 사이트warn : %d %d %d %d %d %d %d %d %d \ n", 스포츠 토토 사이트ca.스포츠 토토 사이트warn [0], 스포츠 토토 사이트ca.스포츠 토토 사이트warn [1], sqlca.스포츠 토토 사이트warn [2],
                                                          sqlca.스포츠 토토 사이트warn [3], sqlca.스포츠 토토 사이트warn [4], sqlca.스포츠 토토 사이트warn [5],
                                                          sqlca.스포츠 토토 사이트warn [6], sqlca.스포츠 토토 사이트warn [7];
    fprintf (stderr, "스포츠 토토 사이트state : %5s \ n", 스포츠 토토 사이트ca.스포츠 토토 사이트state);
    fprintf (stderr, "================ \ n");

결과는 다음과 같이 보일 수 있습니다 (여기서는 오류가 발생합니다. 틀린 테이블 이름) :

==== 스포츠 토토 사이트CA ====
스포츠 토토 사이트code : -400
sqlerrm.sqlerrml : 49
스포츠 토토 사이트ERRM.스포츠 토토 사이트ERRMC : 관계 "PG_DATABASEP"관계는 38 행에 존재하지 않습니다
스포츠 토토 사이트ERRD : 0 0 0 0 0
스포츠 토토 사이트WARN : 0 0 0 0 0 0 0
스포츠 토토 사이트STATE : 42P01
===============

33.8.3. 스포츠 토토 사이트statevs.스포츠 토토 사이트code

필드스포츠 토토 사이트ca.스포츠 토토 사이트stateand스포츠 토토 사이트ca.스포츠 토토 사이트code는 두 가지 다른 체계입니다 오류 코드를 제공합니다. 둘 다 스포츠 토토 사이트 표준에서 파생되었으며 하지만스포츠 토토 사이트code표준의 스포츠 토토 사이트-92 판은 나중에 삭제되었습니다. 에디션. 따라서 새로운 응용 프로그램이 강력히 권장됩니다 사용스포츠 토토 사이트state.

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

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

이들은 할당되었습니다스포츠 토토 사이트code값 :

0 (ecpg_no_error)

오류가 없습니다. (스포츠 토토 사이트STATE 00000)

100 (ecpg_not_found)

이것은 마지막 명령을 나타내는 무해한 조건입니다. 검색 또는 가공 된 0 행, 또는 귀하가 끝날 때 커서. (스포츠 토토 사이트STATE 02000)

루프에서 커서를 처리 할 때이 코드를 사용할 수 있습니다. 다음과 같이 루프를 중단시기를 감지하는 방법 :

while (1)

    Exec 스포츠 토토 사이트 Fetch ...;
    if (스포츠 토토 사이트ca.스포츠 토토 사이트code == ecpg_not_found)
        부서지다;

그러나찾을 수 없을 때마다 휴식을 취하십시오내부적으로 효과적으로 수행하므로 일반적으로 이점이 없습니다. 이것을 명시 적으로 기록 할 때.

-12 (ecpg_out_of_memory)

가상 메모리가 소진되었음을 나타냅니다. 숫자 값은로 정의됩니다.-enomem. (스포츠 토토 사이트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및 데이터베이스의 Datum은 다른 유형이며 값을 포함합니다. 그것은로 해석 될 수 없습니다.int. 그만큼 도서관 용도strtol ()이것 변환. (스포츠 토토 사이트STATE 42804)

-205 (ecpg_uint_format)

호스트 변수는 유형입니다부호없는 int그리고 데이터베이스의 데이텀은 다른 유형이며 로 해석 할 수없는 값서명되지 않은 int. 라이브러리 사용strtoul ()이 변환의 경우. (스포츠 토토 사이트STATE 42804)

-206 (ecpg_float_format)

호스트 변수는 유형입니다float및 데이터베이스의 Datum은 다른 유형이며 A로 해석 될 수 없습니다.float. 도서관 사용strtod ()이 변환의 경우. (스포츠 토토 사이트STATE 42804)

-207 (ecpg_numeric_format)

호스트 변수는 유형입니다숫자및 데이터베이스의 데이텀은 다른 유형이며 값을 포함합니다. 그것은 a로 해석 될 수 없습니다.숫자값. (스포츠 토토 사이트STATE 42804)

-208 (ecpg_interval_format)

호스트 변수는 유형입니다간격및 데이터베이스의 데이텀은 다른 유형이며 값을 포함합니다. 그것은로 해석 될 수 없습니다.간격값. (스포츠 토토 사이트STATE 42804)

-209 (ecpg_date_format)

호스트 변수는 유형입니다날짜및 데이터베이스의 Datum은 다른 유형이며 A로 해석 될 수 없습니다.날짜값. (스포츠 토토 사이트STATE 42804)

-210 (ecpg_timestamp_format)

호스트 변수는 유형입니다타임 스탬프및 데이터베이스의 데이텀은 다른 유형이며 값을 포함합니다. 그것은 a로 해석 될 수 없습니다.타임 스탬프값. (스포츠 토토 사이트STATE 42804)

-211 (ecpg_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)

-239 (ecpg_informix_duplice_key)

중복 키 오류, 고유 한 제약 조건 위반 (Informix 호환성 모드). (스포츠 토토 사이트STATE 23505)

-240 (ecpg_unknown_descriptor)

지정된 설명자를 찾을 수 없었습니다. 당신은 진술입니다 사용하려는 것은 준비되지 않았습니다. (스포츠 토토 사이트STATE 33000)

-241 (ecpg_invalid_descriptor_index)

지정된 서술자 인덱스는 범위를 벗어났습니다. (스포츠 토토 사이트state 07009)

-242 (ecpg_unknown_descriptor_item)

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

-243 (ecpg_var_not_numeric)

동적 진술을 실행하는 동안 데이터베이스 숫자 값을 반환했으며 호스트 변수는 숫자가 아닙니다. (스포츠 토토 사이트STATE 07006)

-244 (ecpg_var_not_char)

동적 진술을 실행하는 동안 데이터베이스 비수체 값을 반환하고 호스트 변수는 숫자였습니다. (스포츠 토토 사이트STATE 07006)

-284 (ecpg_informix_subselect_not_one)

하위 쿼리의 결과는 단일 행이 아닙니다 (Informix 호환성 모드). (스포츠 토토 사이트STATE 21000)

-400 (ECPG_PG스포츠 토토 사이트)

일부 오류로 인한Postgre스포츠 토토 사이트서버. 메시지에는 포함됩니다 의 오류 메시지Postgre스포츠 토토 사이트Server.

-401 (ECPG_TRANS)

thePostgre스포츠 토토 사이트서버 신호 거래를 시작, 커밋 또는 롤백 할 수 없습니다. (스포츠 토토 사이트STATE 08007)

-402 (ecpg_connect)

데이터베이스에 대한 연결 시도는 성공하지 못했습니다. (스포츠 토토 사이트STATE 08001)

-403 (ecpg_duplice_key)

중복 키 오류, 고유 한 제약 조건 위반. (스포츠 토토 사이트state 23505)

-404 (ecpg_subselect_not_one)

하위 쿼리의 결과는 단일 행이 아닙니다. (스포츠 토토 사이트state 21000)

-602 (ecpg_warning_unknown_portal)

잘못된 커서 이름이 지정되었습니다. (스포츠 토토 사이트STATE 34000)

-603 (ecpg_warning_in_transaction)

거래가 진행 중입니다. (스포츠 토토 사이트STATE 25001)

-604 (ecpg_warning_no_transaction)

활성 (진행중인) 트랜잭션이 없습니다. (스포츠 토토 사이트state 25p01)

-605 (ecpg_warning_portal_exists)

기존 커서 이름이 지정되었습니다. (스포츠 토토 사이트STATE 42P03)