이 섹션에서는 사용 방법을 설명합니다.ecpg.
전처리기가 호출됩니다.ecpg. 설치 후에는 다음 위치에 있습니다.포스트그레SQL 빈/디렉토리.
그ecpg라이브러리가 호출되었습니다.libecpg.a또는libecpg.so. 또한 라이브러리는libpq다음과 통신하기 위한 라이브러리포스트그레SQL서버. 당신
다음을 사용하여 프로그램을 연결해야 합니다.-lecpg -lpq.
라이브러리에는 다음과 같은 몇 가지 메소드가 있습니다."숨겨진"그러나 유용할 수도 있습니다.
ECPG디버그(int켜짐, 파일 *스트림)디버그 로깅을 켭니다.
0이 아닌 첫 번째 인수로 호출되는 경우. 디버그 로깅
에 완료되었습니다.스트림. 대부분SQL문은 그들의 기록을 기록합니다
주장과 결과.
가장 중요한 기능 ,ECPGdo, 모두 기록SQL확장된 문
문자열, 즉 모든 입력 변수가 포함된 문자열
삽입되었으며 결과는포스트그레SQL서버. 이것은 매우
오류를 검색할 때 유용합니다.SQL문장.
ECPG상태()이 방법은
데이터베이스에 연결되어 있으면 TRUE를 반환하고, 연결되어 있으면 FALSE를 반환합니다.
아닙니다.
다음에서 오류를 감지하려면포스트그레SQL서버, 한 줄 포함 좋아요:
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.sqlcode0이 됩니다(ECPG_NO_ERROR). 만일sqlca.sqlcode0보다 작습니다.
이는 데이터베이스 정의가 그렇지 않은 것처럼 심각한 오류입니다.
쿼리를 일치시킵니다. 0보다 크면 정상이다.
테이블에 요청한 행이 포함되어 있지 않은 것과 같은 오류가 발생했습니다.
sqlca.sqlerrm.sqlerrmc할 것이다
오류를 설명하는 문자열을 포함합니다. 문자열은 다음으로 끝납니다.
소스 파일의 줄 번호입니다.
발생할 수 있는 오류는 다음과 같습니다.
일반적으로 발생해서는 안 됩니다. 이는 귀하의 가상을 나타냅니다. 메모리가 부족합니다.
일반적으로 발생해서는 안 됩니다. 이는 다음을 나타냅니다. 전처리기가 라이브러리에서 뭔가를 생성했습니다. 에 대해 모른다. 아마도 당신은 호환되지 않는 실행 중입니다 전처리기 및 라이브러리의 버전입니다.
이것은 다음을 의미합니다.PostgreSQL더 많은 것을 반환했습니다 일치하는 변수가 있는 것보다 인수가 더 많습니다. 아마도 당신은 에서 몇 가지 호스트 변수를 잊어버렸습니다.INTO :var1,:var2-목록.
이것은 다음을 의미합니다포스트그레SQL더 적은 수를 반환했습니다. 호스트 변수보다 인수가 더 많습니다. 아마도 당신은 에 호스트 변수가 너무 많습니다.INTO :var1,:var2-목록.
이는 쿼리가 여러 행을 반환했지만 지정된 변수는 배열이 아닙니다.선택명령이 고유하지 않았습니다.
이것은 호스트 변수가 유형임을 의미합니다.int및 다음 필드PostgreSQL데이터베이스가 다른 데이터베이스입니다
유형이며 다음과 같이 해석될 수 없는 값을 포함합니다.
anint. 도서관은strtol()이것을 위해
전환.
이것은 호스트 변수가 유형임을 의미합니다.부호 없는 정수및의 필드PostgreSQL데이터베이스는
다른 유형이고 변경할 수 없는 값을 포함하고 있습니다.
로 해석됨부호 없는 정수. 는
도서관 용도strtoul()용
이 전환.
이것은 호스트 변수가 유형임을 의미합니다.플로트및의 필드포스트그레SQL데이터베이스가 다른 데이터베이스입니다.
유형이며 다음과 같이 해석될 수 없는 값을 포함합니다.플로트. 도서관은스트르토드()이것을 위해
전환.
이것은 호스트 변수가 유형임을 의미합니다.부울및 다음 필드PostgreSQL데이터베이스는 둘 다 아님''아니요'f'.
포스트그레SQL반환PGRES_EMPTY_QUERY아마도 쿼리가 실제로 비어 있었기 때문입니다.
PostgreSQL반환ECPG_MISSING_INDICATOR왜냐하면 NULL이 반환되었으며 NULL 표시 변수가 없습니다. 제공됩니다.
PostgreSQL반환ECPG_NO_ARRAY보통이기 때문에 배열이 필요한 곳에 변수가 사용되었습니다.
PostgreSQL반환ECPG_DATA_NOT_ARRAY왜냐하면 데이터베이스가 다음 위치에 일반 변수를 반환했습니다. 배열 값이 필요합니다.
프로그램이 연결되지 않은 연결에 접근하려고 했습니다. 존재합니다.
프로그램이 다음 연결에 액세스하려고 시도했습니다. 존재하지만 열려 있지 않습니다.
당신이 사용하려는 명령문은 유효하지 않습니다. 준비했습니다.
지정된 설명자를 찾을 수 없습니다. 성명서 사용하려는 제품이 준비되지 않았습니다.
지정된 설명자 인덱스가 범위를 벗어났습니다.
지정된 설명자를 찾을 수 없습니다. 성명서 사용하려는 제품이 준비되지 않았습니다.
데이터베이스가 숫자 값과 변수를 반환했습니다. 숫자가 아니었습니다.
데이터베이스가 숫자가 아닌 값을 반환했으며 변수가 숫자였습니다.
일부PostgreSQL오류. 메시지에는 다음의 오류 메시지가 포함되어 있습니다.PostgreSQL백엔드.
포스트그레SQL신호를 받았습니다 시작, 커밋 또는 롤백할 수 없습니다. 거래.
데이터베이스 연결이 작동하지 않았습니다.
이것은"정상"오류 쿼리하는 내용을 찾을 수 없음을 알려줍니다. 아니면 커서 끝에 있습니다.