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

35.8. 스포츠 토토 처리

이 섹션에서는 임베디드 SQL 프로그램에서 탁월한 조건과 경고를 처리하는 방법에 대해 설명합니다. 이를위한 두 개의 비 독점 시설이 있습니다.

  • 콜백은를 사용하여 경고 및 스포츠 토토 조건을 처리하도록 구성 할 수 있습니다.언제든지명령.
  • 스포츠 토토 또는 경고에 대한 자세한 정보는에서 얻을 수 있습니다.SQLCA가변.

35.8.1. 콜백 설정

스포츠 토토와 경고를 포착하는 간단한 방법 중 하나는 특정 조건이 발생할 때마다 특정 조치를 실행하도록 설정하는 것입니다. 일반적으로 :

exec sql 언제라도조건 Action;

조건다음 중 하나 일 수 있습니다.

sqlerror

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

sqlwarning

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

찾기

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

Action다음 중 하나 일 수 있습니다.

계속

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

goto레이블
이동레이블

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

sqlprint

표준 스포츠 토토로 메시지를 인쇄합니다. 이것은 간단한 프로그램이나 프로토 타이핑 중에 유용합니다.

정지

출구 (1), 프로그램이 끝날 것입니다.

브레이크

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

계속

c 문장 실행계속. 이것은 루프 문에만 사용해야합니다.

Call이름 (args)
do이름 (args)

지정된 인수와 함께 지정된 C 함수를 호출하십시오. (이 용도는의 의미와 다릅니다.Callanddo일반 Postgresql 문법에서.)

SQL 표준은 동작 만 제공합니다계속andgoto(및이동).

간단한 프로그램에서 사용하려는 예가 있습니다. 경고가 발생하면 간단한 메시지를 인쇄하고 스포츠 토토가 발생하면 프로그램을 중단합니다.

SQLWARNING SQLPRINT가있을 때마다 EXEC SQL;

진술exec sql 언제라도는 C 문이 아닌 SQL 사전 처리기의 지침입니다. 설정 한 오류 또는 경고 조치는 첫 번째 사이에 동일한 조건에 대해 다른 조치가 설정되지 않는 한 핸들러가 설정된 지점 아래에 나타나는 모든 임베디드 SQL 문에 적용됩니다.exec sql 언제라도및 C 프로그램의 제어 흐름에 관계없이 조건을 유발하는 SQL 문. 따라서 다음 두 프로그램의 프로그램 중 어느 것도 원하는 효과가 없습니다.

/*
/*

35.8.2. SQLCA

보다 강력한 오류 처리를 위해 임베디드 SQL 인터페이스는 이름의 전역 변수를 제공합니다SQLCA(SQL Communication Area)는 다음 구조를 갖는다 :

struct

(멀티 스레드 프로그램에서 모든 스레드는 자동으로 자체 사본을 얻습니다SQLCA. 이것은 표준 C 글로벌 변수의 처리와 유사하게 작동합니다errno.)

SQLCA경고와 오류를 모두 다룹니다. 진술을 실행하는 동안 여러 경고 나 오류가 발생하면SQLCA마지막 정보 만 포함됩니다.

마지막에서 스포츠 토토가 발생하지 않은 경우SQLStatement,sqlca.sqlcode0이고sqlca.sqlstate"00000". 경고 또는 스포츠 토토가 발생하면sqlca.sqlcode부정적이고sqlca.sqlstate"00000". 긍정적sqlca.sqlcode마지막 쿼리가 0 행을 반환하는 것과 같은 무해한 조건을 나타냅니다.sqlcodeandsqlstate두 가지 다른 스포츠 토토 코드 체계입니다. 세부 사항은 아래에 나타납니다.

마지막 SQL 문이 성공하면SQLCA.SQLERRD [1]해당되는 경우 처리 된 행의 OID를 포함하고SQLCA.SQLERRD [2]명령에 적용 가능한 경우 처리 된 행 또는 반품 행의 수를 포함합니다.

스포츠 토토 또는 경고의 경우SQLCA.SQLERRM.SQLERRMC스포츠 토토를 설명하는 문자열이 포함됩니다. 필드sqlca.sqlerrm.sqlerrml저장된 스포츠 토토 메시지의 길이를 포함합니다SQLCA.SQLERRM.SQLERRMC(의 결과strlen (), C 프로그래머에게는 흥미롭지 않음). 일부 메시지는 너무 길어서 고정 크기에 맞지 않습니다SQLERRMC배열; 그들은 잘릴 것입니다.

경고의 경우sqlca.sqlwarn [2]로 설정되었습니다W. (다른 모든 경우에, 그것은와 다른 것으로 설정됩니다.W.) ifsqlca.sqlwarn [1]로 설정되었습니다Wsqlca.sqlwarn [0]로 설정되었습니다W다른 요소 중 하나가 경고를 표시하도록 설정된 경우

필드SQLCAID, SQLABC, SQLERRP및 나머지 요소sqlerrdandsqlwarn현재 유용한 정보가 포함되어 있지 않습니다.

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

다음은의 사용을 결합한 예입니다.언제든지andSQLCA, 내용을 인쇄SQLCA스포츠 토토가 발생한 경우. 이것은 더 설치하기 전에 디버깅 또는 프로토 타이핑 애플리케이션에 유용 할 것입니다사용자 친화적스포츠 토토 핸들러.

SQLERROR를 호출 할 때마다 EXEC SQL PRINT_SQLCA ();

결과는 다음과 같이 보일 수 있습니다 (여기서는 틀린 테이블 이름으로 인한 오류) :

==== SQLCA ====

35.8.3. sqlstatevs.sqlcode

필드sqlca.sqlstateandsqlca.sqlcode는 오류 코드를 제공하는 두 가지 다른 체계입니다. 둘 다 SQL 표준에서 파생되었지만sqlcode는 표준의 SQL-92 에디션에서 더 이상 사용되지 않았으며 이후 버전에서 삭제되었습니다. 따라서 새로운 응용 프로그램은 강력히 사용하도록 권장됩니다sqlstate.

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

sqlcode인 감가 상승 스포츠 토토 코드 체계는 간단한 정수입니다. 0의 값은 성공을 나타내고, 양수 값은 추가 정보가있는 성공을 나타내고, 음수 값은 스포츠 토토를 나타냅니다.PostgreSQL일부 특정 할당sqlcode그 사용을위한 값은 숫자 값과 상징적 이름으로 아래에 나열되어 있습니다. 이들은 다른 SQL 구현에 휴대 할 수 없음을 기억하십시오.sqlstateScheme, 해당sqlstate도 나열됩니다. 그러나 두 체계 사이에 일대일 또는 일대일 매핑이 없으므로 (실제로는 다수입니다) 글로벌 상담해야합니다.sqlstate목록에서PostgreSQL : 문서 : 12 : 부록 A. PostgreSQL 토토 커뮤니티 코드각각의 경우.

이들은 할당되었습니다sqlcode값 :

0 (ecpg_no_error)

오류가 없습니다. (SQLSTATE 00000)

100 (ecpg_not_found)

이것은 마지막 명령이 0 행을 검색하거나 처리했거나 커서의 끝에 있음을 나타내는 무해한 조건입니다. (SQLSTATE 02000)

루프에서 커서를 처리 할 때이 코드를 사용하여 루프를 중단 할 때를 감지하는 방법 으로이 코드를 사용할 수 있습니다.

while (1)

하지만찾을 수 없을 때마다 휴식을 취하십시오내부적으로 효과적으로이를 수행하므로 일반적으로 이것을 명시 적으로 기록하는 데 이점이 없습니다.

-12 (ecpg_out_of_memory)

가상 메모리가 소진되었음을 나타냅니다. 숫자 값은로 정의됩니다.-enomem. (SQLSTATE YE001)

-200 (ecpg_unsupported)

사전 처리기가 도서관이 모르는 것을 생성했음을 나타냅니다. 아마도 당신은 호환되지 않는 버전의 사전 처리기와 라이브러리를 실행하고있을 것입니다.

-201 (ecpg_too_many_arguments)

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

-202 (ecpg_too_few_arguments)

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

-203 (ecpg_too_many_matches)

이것은 쿼리가 여러 행을 반환했지만 명령문은 하나의 결과 행을 저장할 준비가되었음을 의미합니다 (예 : 지정된 변수가 배열이 아니기 때문에). (SQLSTATE 21000)

-204 (ecpg_int_format)

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

-205 (ecpg_uint_format)

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

-206 (ecpg_float_format)

호스트 변수는 유형입니다float및 데이터베이스의 데이텀은 다른 유형이며 A로 해석 할 수없는 값을 포함합니다float. 라이브러리 사용strtod ()이 변환의 경우. (SQLSTATE 42804)

-207 (ecpg_numeric_format)

호스트 변수는 유형입니다숫자및 데이터베이스의 데이텀은 다른 유형이며 A로 해석 할 수없는 값을 포함합니다숫자값. (SQLSTATE 42804)

-208 (ecpg_interval_format)

호스트 변수는 유형입니다간격및 데이터베이스의 데이텀은 다른 유형이며로 해석 할 수없는 값을 포함합니다간격값. (SQLSTATE 42804)

-209 (ecpg_date_format)

호스트 변수는 유형입니다날짜및 데이터베이스의 데이텀은 다른 유형이며 A로 해석 할 수없는 값을 포함합니다날짜값. (SQLSTATE 42804)

-210 (ecpg_timestamp_format)

호스트 변수는 유형입니다타임 스탬프및 데이터베이스의 데이텀은 다른 유형이며 A로 해석 할 수없는 값을 포함합니다타임 스탬프값. (SQLSTATE 42804)

-211 (ecpg_convert_bool)

이것은 호스트 변수가 유형이라는 것을 의미합니다bool그리고 데이터베이스의 데이텀은 아니에요't'NOR'f'. (SQLSTATE 42804)

-212 (ecpg_empty)

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

-213 (ecpg_missing_indicator)

널 값이 반환되었고 널 표시기 변수가 공급되지 않았습니다. (SQLSTATE 22002)

-214 (ecpg_no_array)

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

-215 (ecpg_data_not_array)

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

-216 (ecpg_array_insert)

값을 배열에 삽입 할 수 없습니다. (SQLSTATE 42804)

-220 (ecpg_no_conn)

프로그램은 존재하지 않는 연결에 액세스하려고 시도했습니다. (SQLSTATE 08003)

-221 (ecpg_not_conn)

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

-230 (ecpg_invalid_stmt)

사용하려는 진술은 준비되지 않았습니다. (SQLSTATE 26000)

-239 (ecpg_informix_duplication_key)

중복 키 오류, 고유 한 제약 조건 위반 (Informix 호환성 모드). (SQLSTATE 23505)

-240 (ecpg_unknown_descriptor)

지정된 설명자를 찾을 수 없었습니다. 사용하려는 진술은 준비되지 않았습니다.

-241 (ecpg_invalid_descriptor_index)

지정된 서술자 인덱스는 범위를 벗어났습니다. (SQLSTATE 07009)

-242 (ecpg_unknown_descriptor_item)

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

-243 (ecpg_var_not_numeric)

동적 문을 실행하는 동안 데이터베이스는 숫자 값을 반환했으며 호스트 변수는 숫자가 아닙니다. (SQLSTATE 07006)

-244 (ecpg_var_not_char)

동적 명령문 실행 중에 데이터베이스는 비수체 값을 반환했으며 호스트 변수는 숫자였습니다. (SQLSTATE 07006)

-284 (ecpg_informix_subselect_not_one)

하위 쿼리의 결과는 단일 행이 아닙니다 (Informix 호환성 모드). (SQLSTATE 21000)

-400 (ECPG_PGSQL)

일부 스포츠 토토로 인한PostgreSQL서버. 메시지에는의 스포츠 토토 메시지가 포함됩니다.PostgreSQLServer.

-401 (ecpg_trans)

thePostgreSQLServer는 트랜잭션을 시작, 커밋 또는 롤백 할 수 없다는 신호를 보냈습니다. (SQLSTATE 08007)

-402 (ecpg_connect)

데이터베이스에 대한 연결 시도는 성공하지 못했습니다. (SQLSTATE 08001)

-403 (ecpg_duplice_key)

중복 키 오류, 고유 한 제약 조건 위반. (SQLSTATE 23505)

-404 (ecpg_subselect_not_one)

하위 쿼리의 결과는 단일 행이 아닙니다. (SQLSTATE 21000)

-602 (ecpg_warning_unknown_portal)

잘못된 커서 이름이 지정되었습니다. (SQLSTATE 34000)

-603 (ecpg_warning_in_transaction)

거래가 진행 중입니다. (SQLSTATE 25001)

-604 (ecpg_warning_no_transaction)

활성 (진행중인) 트랜잭션이 없습니다. (sqlstate 25p01)

-605 (ecpg_warning_portal_exists)

기존 커서 이름이 지정되었습니다. (SQLSTATE 42P03)