이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

사용 방법ecpg

이 섹션에서는 다음을 사용하는 방법을 설명합니다.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에는 다음을 설명하는 문자열이 포함됩니다. 오류. 문자열은 소스 파일의 줄 번호로 끝납니다.

발생할 수 있는 롤 토토 목록:

-12, %d줄에 메모리가 부족합니다.

일반적으로 발생하지 않습니다. 이는 귀하의 가상 메모리가 부족합니다.

-200, %d행에서 지원되지 않는 유형 %s.

일반적으로 발생하지 않습니다. 이는 다음과 같은 징후입니다. 전처리기가 라이브러리가 생성하지 않은 것을 생성했습니다. 대해 알고 있습니다. 아마도 호환되지 않는 버전을 실행 중일 수 있습니다. 전처리기와 라이브러리.

-201, 인수 라인 %d이(가) 너무 많습니다.

이것은 의미합니다포스트그레일치하는 변수보다 더 많은 인수를 반환했습니다. 아마도 당신은 호스트 변수 몇 가지를 잊어버렸을 것입니다.INTO :var1,:var2-목록.

-202, 인수 줄 %d이(가) 너무 적습니다.

이것은 다음을 의미합니다.포스트그레스호스트 변수보다 적은 수의 인수를 반환했습니다. 아마도 에 호스트 변수가 너무 많을 수 있습니다.INTO :var1,:var2-목록.

-203, 일치하는 라인 %d이(가) 너무 많습니다.

이는 쿼리가 여러 줄을 반환했지만 지정된 변수는 배열이 아닙니다.선택당신이 만든 것은 아마도 고유하지 않았을 것입니다.

-204, 형식이 잘못된 int 유형: %s 라인 %d.

이것은 호스트 변수가 다음과 같다는 것을 의미합니다.int유형 및 필드포스트그레데이터베이스가 다른 유형이고 로 해석될 수 없는 값이 포함되어 있습니다.int. 도서관은스트톨이 변환을 위해.

-205, 형식이 올바르지 않은 부호 없는 유형: %s 라인 %d.

이것은 호스트 변수가 다음과 같다는 것을 의미합니다.부호 없는 정수유형 및 필드포스트그레스데이터베이스는 다음과 같습니다. 다른 유형이며 다음과 같이 해석될 수 없는 값을 포함하고 있습니다. an부호 없는 정수. 도서관은strtoul이 변환을 위해.

-206, 형식이 잘못된 부동 소수점 유형: %s 라인 %d.

이것은 호스트 변수가 다음과 같다는 것을 의미합니다.플로트유형 및 필드포스트그레데이터베이스가 다른 유형이고 로 해석될 수 없는 값이 포함되어 있습니다.플로트. 도서관은스트르토드이 변환을 위해.

-207, %s를 %d행에서 bool로 변환할 수 없습니다.

이것은 호스트 변수가 다음과 같다는 것을 의미합니다.부울유형 및 필드포스트그레스데이터베이스가 't'도 아니고 't'도 아닙니다. 'f'.

-208, 빈 쿼리 줄 %d.

포스트그레스반환됨 PGRES_EMPTY_QUERY, 아마도 쿼리가 실제로 비어있습니다.

-220, %d행에 %s 연결이 없습니다.

프로그램이 연결되지 않은 연결에 액세스하려고 시도합니다. 존재합니다.

-221, %d번 라인에 연결되지 않았습니다.

프로그램은 존재하는 연결에 접근하려고 시도하지만 열려 있지 않습니다.

-230, %d행의 명령문 이름 %s이(가) 잘못되었습니다.

당신이 사용하려는 명령문은 유효하지 않습니다. 준비했습니다.

-400, Postgres 롤 토토: %s 라인 %d.

일부포스트그레스롤 토토. 는 메시지에는의 롤 토토 메시지가 포함되어 있습니다.포스트그레스백엔드.

-401, 트랜잭션 처리 라인 %d에 롤 토토가 있습니다.

포스트그레우리에게 신호를 보냈습니다 트랜잭션을 시작, 커밋 또는 롤백할 수 없습니다.

-402, 연결: %s 데이터베이스를 열 수 없습니다.

데이터베이스 연결이 작동하지 않았습니다.

100, %d행 데이터를 찾을 수 없습니다.

이것은 당신이 무엇인지 알려주는 "정상적인" 롤 토토입니다. 쿼리를 찾을 수 없거나 커서를 통과했습니다.