이 섹션은 사용 방법을 설명합니다ECPG.
사전 처리기가라고합니다.ECPG. 설치 후에 있습니다.PostgreSQL bin/디렉토리.
ECPG라이브러리는입니다.libecpg.a또는libecpg.so. 또한 라이브러리는를 사용합니다.libpq커뮤니케이션을위한 라이브러리
그만큼PostgreSQL서버. 너
사용을 사용하여 프로그램을 연결해야합니다-LECPG -LPQ
.
라이브러리에는 몇 가지 방법이 있습니다"숨겨진"그러나 유용 할 수 있습니다.
ecpgdebug (inton, 파일 *스트림)
디버그 로깅을 켭니다
첫 번째 인수가 0이 아닌 것으로 호출 된 경우. 디버그 로깅
에서 수행됩니다스트림. 최대SQL명세서 로그
논쟁과 결과.
가장 중요한 기능,ecpgdo
, 로그 allSQL확장 된 진술
문자열, 즉 모든 입력 변수가있는 문자열
삽입 및 결과는PostgreSQL서버. 이것은 매우 할 수 있습니다
당신의 오류를 검색 할 때 유용합니다SQL진술.
ecpgstatus ()
이 방법
데이터베이스에 연결된 경우 true를 반환하고 If가 거짓으로 반환합니다.
아니다.
에서 오류를 감지하려면PostgreSQL서버, 라인 포함 좋다:
Exec SQL 포함 SQLCA;
파일의 포함 섹션에서. 이것은 a를 정의합니다
구조 및 이름이있는 변수SQLCA
다음과 같이 :
struct sqlca char sqlcaid [8]; 긴 sqlabc; 긴 sqlcode; 구조 int sqlerrml; char sqlerrmc [70]; sqlerrm; char sqlerrp [8]; 긴 sqlerrd [6]; / * 0 : 빈 */ / * 1 : 해당되는 경우 가공 된 튜플의 OID */ / * 2 : 인서트에서 처리 된 행 수, 업데이트 */ / * 또는 명령문 삭제 */ / * 3 : 빈 */ / * 4 : 빈 */ / * 5 : 빈 */ char sqlwarn [8]; / * 0 : 'W' */인 경우 'w'로 설정 / * 1 : 'w'가 적어도 하나의 문자 문자열 */ / * 값은 */일 때 잘 렸습니다. /* 호스트 변수에 저장되었습니다. */ / * 2 : 빈 */ / * 3 : 빈 */ / * 4 : 빈 */ / * 5 : 빈 */ / * 6 : 빈 */ / * 7 : 빈 */ char sqlext [8]; sqlca;
마지막에서 오류가 발생하지 않은 경우SQL진술.sqlca.sqlcode
0 (ecpg_no_error)이됩니다. 만약에sqlca.sqlcode
0보다 작습니다.
데이터베이스 정의가 그렇지 않은 것처럼 이것은 심각한 오류입니다.
쿼리와 일치합니다. 0보다 크면 정상입니다.
테이블과 같은 오류가 요청 된 행을 포함하지 않았습니다.
SQLCA.SQLERRM.SQLERRMC
의지
오류를 설명하는 문자열이 포함되어 있습니다. 문자열은 다음과 같습니다
소스 파일의 줄 번호.
이것은 발생할 수있는 오류입니다 :
일반적으로 발생해서는 안됩니다. 이것은 당신의 가상을 나타냅니다 메모리가 소진되었습니다.
일반적으로 발생해서는 안됩니다. 이것은 사전 처리기는 라이브러리의 무언가를 생성했습니다 알지 못합니다. 아마도 당신은 양립 할 수없는 실행 중입니다 사전 처리기 및 도서관의 버전.
이것은를 의미합니다.무지개 토토더 많이 반환했습니다 우리가 일치하는 변수를 가지고있는 것보다 인수. 아마도 당신 의 호스트 변수 몇 개를 잊어 버렸습니다.in : var1, : var2-list.
이것은를 의미합니다.PostgreSQL더 적은 수익을 올렸습니다 호스트 변수가있는 것보다 인수. 아마도 당신은 가지고 있습니다 너무 많은 호스트 변수: var1, : var2-list.
이것은 쿼리가 여러 행을 반환했지만 지정된 변수는 배열이 아닙니다. 그만큼select명령은 독특하지 않았습니다.
이것은 호스트 변수가 유형이라는 것을 의미합니다int의 필드PostgreSQL데이터베이스는 다른 것입니다
다음으로 해석 할 수없는 값을 유형하고 포함합니다.int. 라이브러리 사용strtol ()
이것
변환.
이것은 호스트 변수가 유형임을 의미합니다부호없는 int의 필드PostgreSQL데이터베이스는입니다
다른 유형의
로 해석부호없는 int. 그만큼
도서관 용도strtoul ()
이 전환.
이것은 호스트 변수가 유형임을 의미합니다float그리고의 필드PostgreSQL데이터베이스는 다른 것입니다
a로 해석 할 수없는 값을 입력하고 포함합니다.float. 라이브러리 사용strtod ()
이것
변환.
이것은 호스트 변수가 유형임을 의미합니다bool의 필드무지개 토토데이터베이스도't'NOR'f'.
PostgreSQL반환pgres_empty_query쿼리가 실제로 비어 있었기 때문에.
PostgreSQL반환ecpg_missing_indicatora NULL이 반환되었고 NULL 표시기 변수가 없습니다 제공.
PostgreSQL반환ecpg_no_array평범하기 때문에 변수는 배열이 필요한 장소에서 사용되었습니다.
PostgreSQL반환ecpg_data_not_array데이터베이스는 그 장소에서 일반 변수를 반환했습니다 배열 값이 필요합니다.
프로그램은 그렇지 않은 연결에 액세스하려고했습니다. 존재하다.
프로그램은 연결에 액세스하려고 시도했습니다 존재하지만 열려 있지 않습니다.
사용하려는 진술은 준비.
지정된 설명자를 찾을 수 없었습니다. 진술 당신은 사용하려고 노력하고 있습니다.
지정된 서술자 지수는 범위를 벗어났습니다.
지정된 설명자를 찾을 수 없었습니다. 진술 당신은 사용하려고 노력하고 있습니다.
데이터베이스는 숫자 값과 변수를 반환했습니다 숫자가 아니 었습니다.
데이터베이스는 숫자가 아닌 값을 반환했습니다 변수는 숫자였습니다.
일부PostgreSQL오류. 메시지에는의 오류 메시지가 포함됩니다.PostgreSQL백엔드.
PostgreSQL신호 우리가 시작, 커밋 또는 롤백 할 수 없다는 것 거래.
데이터베이스에 대한 연결이 작동하지 않았습니다.
이것은 A"정상"오류 그것은 당신이 쿼리하는 것을 찾을 수 없다는 것을 알려줍니다. 또는 당신은 커서의 끝에 있습니다.