이 섹션에서는 다음을 사용하는 방법을 설명합니다.ecpg도구.
전처리기가 호출됩니다.ecpg. 설치 후에는 다음 위치에 있습니다.포스트그레 빈/디렉토리.
그ecpg라이브러리가 호출되었습니다.libecpg.a또는libecpg.so. 또한 라이브러리는libpq와의 통신을 위한 라이브러리포스트그레서버이므로 당신은 귀하의 프로그램을 다음과 연결하려면-lecpg -lpq.
라이브러리에는 "숨겨진" 몇 가지 메소드가 있지만 그럴 수 있습니다. 언젠가는 매우 유용할 것입니다.
ECPG디버그(int켜짐, 파일 *스트림)다음의 경우 디버그 로깅을 켭니다. 0이 아닌 첫 번째 인수로 호출됩니다. 디버그 로깅이 완료되었습니다. 에스트림. 대부분SQL문은 인수를 기록하고 결과.
가장 중요한 것 (ECPGdo) 거의 모든 사람에게 호출됩니다.SQL문은 확장된 문자열, 즉 다음 문자열을 모두 기록합니다. 삽입된 모든 입력 변수 및의 결과포스트그레서버. 이것은 롤 토토를 검색할 때 매우 유용합니다.SQL문장.
ECPG상태()이 메소드는 다음을 반환합니다. 데이터베이스에 연결되어 있으면 TRUE이고 그렇지 않으면 FALSE입니다.
다음에서 오류를 감지할 수 있도록포스트그레스서버에는 다음과 같은 줄을 포함합니다
exec sql include sqlca;파일의 포함 섹션에 있습니다. 이는 다음을 정의합니다. 구조체 및 이름이 있는 변수sqlca다음과 같습니다:
구조체 sqlca 숯 sqlcaid[8]; 긴 sqlabc; 긴 SQL코드; 구조체 int sqlerrml; 숯 sqlerrmc[70]; sqlerrm; 숯 sqlerrp[8]; 긴 sqlerrd[6]; /* 0: 비어 있음 */ /* 1: 해당되는 경우 처리된 튜플의 OID */ /* 2: INSERT, UPDATE에서 처리된 행 수 */ /* 또는 DELETE 문 */ /* 3: 비어 있음 */ /* 4: 비어 있음 */ /* 5: 비어 있음 */ 숯 sqlwarn[8]; /* 0: 하나라도 'W'이면 'W'로 설정 */ /* 1: 'W'가 하나 이상의 문자열인 경우 */ /* 값이 잘렸을 때 */ /* 호스트 변수에 저장됩니다. */ /* 2: 비어 있음 */ /* 3: 비어 있음 */ /* 4: 비어 있음 */ /* 5: 비어 있음 */ /* 6: 비어 있음 */ /* 7: 비어 있음 */ char sqlext[8]; sqlca;
마지막에 롤 토토가 발생한 경우SQL그럼 진술sqlca.sqlcode될 것이다 0이 아닙니다. 만일sqlca.sqlcode적다 0이면 이것은 데이터베이스와 같은 일종의 심각한 롤 토토입니다. 정의가 제공된 쿼리와 일치하지 않습니다. 0보다 큰 경우 그렇다면 이것은 테이블에 요청된 행입니다.
sqlca.sqlerrm.sqlerrmc에는 다음을 설명하는 문자열이 포함됩니다. 오류. 문자열은 소스 파일의 줄 번호로 끝납니다.
발생할 수 있는 롤 토토 목록:
일반적으로 발생하지 않습니다. 이는 귀하의 가상 메모리가 부족합니다.
일반적으로 발생하지 않습니다. 이는 다음과 같은 징후입니다. 전처리기가 라이브러리가 생성하지 않은 것을 생성했습니다. 대해 알고 있습니다. 아마도 호환되지 않는 버전을 실행 중일 수 있습니다. 전처리기와 라이브러리.
이것은 의미합니다포스트그레일치하는 변수보다 더 많은 인수를 반환했습니다. 아마도 당신은 호스트 변수 몇 가지를 잊어버렸을 것입니다.INTO :var1,:var2-목록.
이것은 다음을 의미합니다.포스트그레스호스트 변수보다 적은 수의 인수를 반환했습니다. 아마도 에 호스트 변수가 너무 많을 수 있습니다.INTO :var1,:var2-목록.
이는 쿼리가 여러 줄을 반환했지만 지정된 변수는 배열이 아닙니다.선택당신이 만든 것은 아마도 고유하지 않았을 것입니다.
이것은 호스트 변수가 다음과 같다는 것을 의미합니다.int유형 및 필드포스트그레데이터베이스가 다른 유형이고 로 해석될 수 없는 값이 포함되어 있습니다.int. 도서관은스트톨이 변환을 위해.
이것은 호스트 변수가 다음과 같다는 것을 의미합니다.부호 없는 정수유형 및 필드포스트그레스데이터베이스는 다음과 같습니다. 다른 유형이며 다음과 같이 해석될 수 없는 값을 포함하고 있습니다. an부호 없는 정수. 도서관은strtoul이 변환을 위해.
이것은 호스트 변수가 다음과 같다는 것을 의미합니다.플로트유형 및 필드포스트그레데이터베이스가 다른 유형이고 로 해석될 수 없는 값이 포함되어 있습니다.플로트. 도서관은스트르토드이 변환을 위해.
이것은 호스트 변수가 다음과 같다는 것을 의미합니다.부울유형 및 필드포스트그레스데이터베이스가 't'도 아니고 't'도 아닙니다. 'f'.
포스트그레스반환됨 PGRES_EMPTY_QUERY, 아마도 쿼리가 실제로 비어있습니다.
프로그램이 연결되지 않은 연결에 액세스하려고 시도합니다. 존재합니다.
프로그램은 존재하는 연결에 접근하려고 시도하지만 열려 있지 않습니다.
당신이 사용하려는 명령문은 유효하지 않습니다. 준비했습니다.
일부포스트그레스롤 토토. 는 메시지에는의 롤 토토 메시지가 포함되어 있습니다.포스트그레스백엔드.
포스트그레우리에게 신호를 보냈습니다 트랜잭션을 시작, 커밋 또는 롤백할 수 없습니다.
데이터베이스 연결이 작동하지 않았습니다.
이것은 당신이 무엇인지 알려주는 "정상적인" 롤 토토입니다. 쿼리를 찾을 수 없거나 커서를 통과했습니다.