이 섹션에서는 예외 처리 방법을 설명합니다. Embedded 토토 꽁 머니 프로그램의 조건 및 경고. 있다 이를 위한 몇 가지 비독점적 시설.
오류와 경고를 포착하는 간단한 방법 중 하나는 특정 조건이 발생할 때마다 실행되는 특정 작업 발생합니다. 일반적으로:
언제든지 토토 꽁 머니을 실행조건 액션;
조건다음 중 하나일 수 있습니다. 다음:
오류가 발생할 때마다 지정된 작업이 호출됩니다. 토토 꽁 머니 문을 실행하는 동안 발생합니다.
경고가 발생할 때마다 지정된 작업이 호출됩니다. 토토 꽁 머니 문을 실행하는 동안 발생합니다.
지정된 작업은 토토 꽁 머니이 실행될 때마다 호출됩니다. 문은 0개의 행을 검색하거나 영향을 줍니다. (이 조건은 오류는 아니지만 처리에 관심이 있을 수 있습니다. 특별히요.)
액션다음 중 하나일 수 있습니다. 다음:
이는 사실상 조건이 무시된다는 의미입니다. 이것이 기본값입니다.
지정된 라벨로 점프(C 사용고토성명).
표준 오류에 메시지를 인쇄합니다. 이는 다음과 같은 경우에 유용합니다. 간단한 프로그램이나 프로토타입 제작 중. 세부 사항은 메시지를 구성할 수 없습니다.
전화출구(1), 이는 프로그램을 종료합니다.
C 문 실행휴식. 이는 루프에서만 사용해야 합니다. 또는스위치문장.
지정된 C 함수를 지정된 값으로 호출합니다. 인수.
토토 꽁 머니 표준은 작업만을 제공합니다.계속그리고이동(그리고다음으로 이동).
다음은 간단한 작업에 사용할 수 있는 예입니다. 프로그램. 경고가 발생하면 간단한 메시지를 인쇄하고 오류가 발생하면 프로그램을 중단합니다.
토토 꽁 머니WARNING 토토 꽁 머니PRINT 시 토토 꽁 머니 실행; 토토 꽁 머니ERROR가 중지될 때마다 토토 꽁 머니을 실행합니다.
성명문언제든지 토토 꽁 머니을 실행이다 C 문이 아닌 토토 꽁 머니 전처리기의 지시문입니다. 는 설정된 오류 또는 경고 조치는 모든 Embedded 토토 꽁 머니에 적용됩니다. 핸들러가 있는 지점 아래에 나타나는 명령문 설정(동일한 조건에 대해 다른 작업이 설정되지 않은 경우) 첫 번째 사이언제든지 토토 꽁 머니을 실행및 조건에 관계없이 조건을 유발하는 토토 꽁 머니 문 C 프로그램의 제어 흐름 그럼 둘 중 하나도 아니고 다음 C 프로그램 발췌문을 사용하면 원하는 효과를 얻을 수 있습니다.
/*
* 틀렸어
*/
int main(int argc, char *argv[])
...
if (상세)
토토 꽁 머니WARNING 토토 꽁 머니PRINT가 발생할 때마다 토토 꽁 머니을 실행합니다.
...
EXEC 토토 꽁 머니 선택 ...;
...
/*
* 틀렸어
*/
int main(int argc, char *argv[])
...
set_error_handler();
...
EXEC 토토 꽁 머니 선택 ...;
...
정적 무효 set_error_handler(void)
토토 꽁 머니ERROR가 중지될 때마다 EXEC 토토 꽁 머니;
보다 강력한 오류 처리를 위해 내장 토토 꽁 머니 인터페이스 이름이 포함된 전역 변수를 제공합니다.토토 꽁 머니ca다음과 같은 구조를 가지고 있습니다:
구조체
숯 토토 꽁 머니caid[8];
긴 sqlabc;
긴 토토 꽁 머니코드;
구조체
int sqlerrml;
숯 토토 꽁 머니errmc[70];
sqlerrm;
숯 토토 꽁 머니errp[8];
긴 토토 꽁 머니errd[6];
숯 토토 꽁 머니warn[8];
char 토토 꽁 머니state[5];
토토 꽁 머니ca;
(다중 스레드 프로그램에서 모든 스레드는 자동으로 자체 사본토토 꽁 머니ca. 이것은 작동합니다 표준 C 전역 변수 처리와 유사errno.)
토토 꽁 머니ca경고와 경고를 모두 다룹니다. 오류. 도중에 경고나 오류가 여러 번 발생한 경우 명령문을 실행한 다음토토 꽁 머니ca마지막 항목에 대한 정보만 포함됩니다.
마지막에 오류가 발생하지 않은 경우토토 꽁 머니성명,토토 꽁 머니ca.토토 꽁 머니code0이 되며토토 꽁 머니ca.토토 꽁 머니state될 것이다"00000". 경고 또는 오류가 발생한 경우토토 꽁 머니ca.토토 꽁 머니code음수가 되며토토 꽁 머니ca.토토 꽁 머니state다음과 다를 것입니다"00000". 긍정적인토토 꽁 머니ca.토토 꽁 머니code해롭지 않은 상태를 나타냅니다. 예를 들어 마지막 쿼리는 0개의 행을 반환했습니다.토토 꽁 머니code그리고토토 꽁 머니state두 가지 다른 오류 코드 구성표가 있습니다. 자세한 내용은 아래에 표시됩니다.
마지막 토토 꽁 머니 문이 성공했다면, 그러면토토 꽁 머니ca.토토 꽁 머니errd[1]다음의 OID를 포함합니다. 처리된 행(해당하는 경우) 및토토 꽁 머니ca.토토 꽁 머니errd[2]개 수를 포함합니다. 명령에 적용 가능한 경우 행을 처리하거나 반환했습니다.
오류 또는 경고가 발생한 경우토토 꽁 머니ca.sqlerrm.토토 꽁 머니errmc문자열을 포함합니다
오류를 설명하는 것입니다. 필드토토 꽁 머니ca.sqlerrm.sqlerrml다음의 길이를 포함합니다.
에 저장된 오류 메시지토토 꽁 머니ca.sqlerrm.토토 꽁 머니errmc(결과strlen()별로 흥미롭지 않아요
C 프로그래머의 경우). 일부 메시지는 너무 길어서 처리할 수 없습니다.
고정된 크기에 맞음토토 꽁 머니errmc배열;
잘립니다.
경고가 발생할 경우,토토 꽁 머니ca.토토 꽁 머니warn[2]다음으로 설정됨W. (다른 모든 경우에는 다음과 같이 설정됩니다. 와는 다르다W.) 만약토토 꽁 머니ca.토토 꽁 머니warn[1]다음으로 설정됨W, 값이 저장될 때 잘렸습니다. 호스트 변수에서.토토 꽁 머니ca.토토 꽁 머니warn[0]다음으로 설정됨W다른 것 중 하나라도 있다면 요소는 경고를 나타내도록 설정되었습니다.
필드토토 꽁 머니caid, 토토 꽁 머니cabc, 토토 꽁 머니errp및 나머지 요소토토 꽁 머니errd그리고토토 꽁 머니warn현재 유용한 내용이 없습니다. 정보.
구조토토 꽁 머니ca정의되지 않았습니다. 토토 꽁 머니 표준에 있지만 다른 여러 토토 꽁 머니에서도 구현됩니다. 데이터베이스 시스템. 정의는 핵심적으로 비슷하지만 이식 가능한 애플리케이션을 작성하려면 다음을 수행해야 합니다. 다양한 구현을 주의 깊게 조사하세요.
필드토토 꽁 머니ca.토토 꽁 머니state및토토 꽁 머니ca.토토 꽁 머니code둘은 서로 다릅니다 오류 코드를 제공하는 구성표. 둘 다 토토 꽁 머니에서 파생됩니다. 표준이지만토토 꽁 머니CODE표시됨 표준의 토토 꽁 머니-92 버전에서는 더 이상 사용되지 않으며 이후 버전에서는 삭제되었습니다. 따라서 새로운 애플리케이션은 사용을 적극 권장합니다.토토 꽁 머니STATE.
토토 꽁 머니STATE는 5자리 배열입니다. 5개의 문자에는 다음과 같은 숫자나 대문자가 포함됩니다. 다양한 오류 및 경고 조건의 코드를 나타냅니다.토토 꽁 머니STATE계층 구조가 있습니다: 처음 두 문자는 해당 항목의 일반 클래스를 나타냅니다. 조건에서 마지막 세 문자는 하위 클래스를 나타냅니다. 일반적인 상태. 성공적인 상태는 코드로 표시됩니다.00000.토토 꽁 머니STATE코드는 대부분 다음에 정의되어 있습니다. 토토 꽁 머니 표준.포스트그레토토 꽁 머니서버가 기본적으로 지원함토토 꽁 머니STATE오류 코드; 그러므로 높은 이 오류 코드를 사용하면 일관성 수준을 얻을 수 있습니다. 모든 응용 프로그램 전반에 걸쳐 계획을 세우십시오. 자세한 내용은 참조Postgre메이저 토토 사이트 : 문서 : 8.1 : Postgre메이저 토토 사이트 오류 코드.
토토 꽁 머니CODE, 더 이상 사용되지 않는 오류 코드 구성표는 단순한 정수입니다. 값 0은 성공을 나타내고, 양수 값은 추가 정보가 성공했음을 나타냅니다. 음수 값은 오류를 나타냅니다. 토토 꽁 머니 표준만 마지막 값을 나타내는 양수 값 +100을 정의합니다. 명령이 0개의 행을 반환하거나 영향을 미쳤으며 구체적인 내용은 없습니다. 음수 값. 따라서 이 계획은 나쁜 결과만 얻을 수 있습니다. 이식성이 있으며 계층적 코드 할당이 없습니다. 역사적으로 Embedded 토토 꽁 머니 프로세서는Postgre토토 꽁 머니특정한 것을 할당했습니다토토 꽁 머니CODE사용에 대한 값은 다음과 같습니다. 숫자 값과 기호 이름과 함께 아래에 나열되어 있습니다. 다른 토토 꽁 머니로 이식할 수 없다는 점을 기억하세요. 구현. 애플리케이션을 다음으로 쉽게 포팅하기 위해토토 꽁 머니STATE구성표, 해당토토 꽁 머니STATE또한 나열됩니다. 있다, 그러나 둘 사이에는 일대일 또는 일대다 매핑이 없습니다. 계획(실제로 다대다 방식)이므로 글로벌토토 꽁 머니STATE목록부록 A각각의 경우에.
이들은 할당된 것입니다토토 꽁 머니CODE값:
가상 메모리가 소진되었음을 나타냅니다. (토토 꽁 머니STATE YE001)
전처리기가 무언가를 생성했음을 나타냅니다. 도서관에서는 모르는 일이다. 아마도 당신은 호환되지 않는 버전의 전처리기와 도서관. (토토 꽁 머니STATE YE002)
이것은 명령이 더 많은 호스트를 지정했음을 의미합니다 예상한 명령보다 변수가 많습니다. (토토 꽁 머니STATE 07001 또는 07002)
이것은 명령이 더 적은 수의 호스트를 지정했음을 의미합니다 예상한 명령보다 변수가 많습니다. (토토 꽁 머니STATE 07001 또는 07002)
이는 쿼리가 여러 행을 반환했지만 명령문은 하나의 결과 행만 저장하도록 준비되었습니다( 예를 들어, 지정된 변수가 배열이 아니기 때문입니다). (토토 꽁 머니STATE 21000)
호스트 변수 유형은 다음과 같습니다.int데이터베이스의 데이터 유형이 다르며
로 해석될 수 없는 값이 포함되어 있습니다.int. 도서관은strtol()이 변환을 위해. (토토 꽁 머니STATE
42804)
호스트 변수 유형은 다음과 같습니다.서명되지 않음
정수데이터베이스의 데이터가 다릅니다
유형이며 다음과 같이 해석될 수 없는 값을 포함합니다.
an부호 없는 정수. 도서관은strtoul()이것을 위해
전환. (토토 꽁 머니STATE 42804)
호스트 변수 유형은 다음과 같습니다.플로트데이터베이스의 데이터는 다음과 같습니다.
다른 유형이며 변경할 수 없는 값을 포함하고 있습니다.
로 해석됨플로트. 도서관
용도스트르토드()이것을 위해
전환. (토토 꽁 머니STATE 42804)
이것은 호스트 변수가 유형임을 의미합니다.부울그리고 데이터베이스의 데이터는 둘 다 아닙니다''아니요'f'. (토토 꽁 머니STATE 42804)
다음으로 보낸 성명서Postgre토토 꽁 머니서버가 비어 있었습니다. (이 일반적으로 Embedded 토토 꽁 머니 프로그램에서는 발생할 수 없습니다. 내부 오류를 가리킬 수 있습니다.) (토토 꽁 머니STATE YE002)
Null 값이 반환되었으며 Null 표시기가 없습니다. 변수가 제공되었습니다. (토토 꽁 머니STATE 22002)
일반 변수가 필요한 곳에 사용되었습니다. 배열. (토토 꽁 머니STATE 42804)
데이터베이스가 장소에 일반 변수를 반환했습니다. 배열 값이 필요합니다. (토토 꽁 머니STATE 42804)
프로그램이 연결되지 않은 연결에 접근을 시도했습니다. 존재합니다. (토토 꽁 머니STATE 08003)
프로그램이 다음 연결에 접근을 시도했습니다. 존재하지만 열려 있지 않습니다. (내부 오류입니다.) (토토 꽁 머니STATE YE002)
당신이 사용하려는 명령문은 유효하지 않습니다. 준비. (토토 꽁 머니STATE 26000)
지정된 설명자를 찾을 수 없습니다. 성명서 사용하려는 제품이 준비되지 않았습니다. (토토 꽁 머니STATE 33000)
지정된 설명자 인덱스가 범위를 벗어났습니다. (토토 꽁 머니STATE 07009)
잘못된 설명 항목이 요청되었습니다. (이것은 내부 오류입니다.) (토토 꽁 머니STATE YE002)
동적 명령문을 실행하는 동안, 데이터베이스가 숫자 값과 호스트 변수를 반환했습니다. 숫자가 아니었습니다. (토토 꽁 머니STATE 07006)
동적 명령문을 실행하는 동안 데이터베이스가 숫자가 아닌 값을 반환했으며 호스트가 변수는 숫자였습니다. (토토 꽁 머니STATE 07006)
다음으로 인해 발생한 일부 오류Postgre토토 꽁 머니서버. 메시지 의 오류 메시지가 포함되어 있습니다.Postgre토토 꽁 머니서버.
그Postgre토토 꽁 머니서버 시작, 커밋 또는 롤백할 수 없다는 신호를 받았습니다. 거래. (토토 꽁 머니STATE 08007)
데이터베이스에 대한 연결 시도가 실패했습니다. 성공하다. (토토 꽁 머니STATE 08001)
이것은 마지막 명령이 0개의 행을 검색하거나 처리했거나 커서 끝에서. (토토 꽁 머니STATE 02000)