이 섹션에서는 방법을 설명합니다.ECPG내부적으로 작동합니다. 이 정보는 때때로 사용자가 사용 방법을 이해하는 데 도움이 됩니다.ECPG.
처음 네 줄은 다음에 의해 작성되었습니다.ecpg출력에는 고정된 라인이 있습니다. 2개는 댓글이고 2개는 댓글입니다. 라이브러리에 인터페이스하는 데 필요한 라인을 포함합니다. 그런 다음 전처리기는 파일을 읽고 출력을 씁니다. 일반적으로 단지 모든 것을 출력에 반영합니다.
다음을 볼 때EXEC 배트맨 토토성명, 그것은 개입하고 그것을 변화시킵니다. 명령은로 시작합니다.EXEC 배트맨 토토다음으로 끝남;. 그 사이의 모든 것은배트맨 토토문 및 변수에 대해 구문 분석됨 대체.
기호가 콜론으로 시작하면 변수 대체가 발생합니다. (:). 해당 이름을 가진 변수는 다음과 같습니다. 이전에 선언된 변수 중에서 조회했습니다. a 이내EXEC 배트맨 토토 선언섹션.
라이브러리에서 가장 중요한 기능은ECPGdo, 대부분의 실행을 담당합니다.
명령. 다양한 수의 인수가 필요합니다. 이것은 할 수 있다
최대 50개 정도의 인수를 쉽게 추가할 수 있으며 이것이 발생하지 않기를 바랍니다.
모든 플랫폼에서 문제가 발생합니다.
인수는 다음과 같습니다:
이것은 원래 줄의 줄 번호입니다. 에 사용 오류 메시지만 해당됩니다.
이것은배트맨 토토발행될 명령입니다. 입력에 의해 수정됩니다. 변수, 즉 알려지지 않은 변수 컴파일 시간이 필요하지만 명령에 입력해야 합니다. 어디에 변수는 문자열에 포함되어야 합니다.?.
모든 입력 변수는 10개의 인수를 생성하게 합니다. (아래를 참조하세요.)
안열거형아무것도 없다고 말하면서 더 많은 입력 변수.
모든 출력 변수는 10개의 인수를 발생시킵니다. 생성되었습니다. (아래를 참조하세요.) 이 변수는 다음과 같이 채워집니다. 기능.
안열거형아무것도 없다고 말하면서 더 많은 변수.
다음의 일부인 모든 변수에 대해배트맨 토토명령, 함수는 10을 얻습니다 인수:
특수 기호로서의 유형.
값에 대한 포인터 또는 포인터에 대한 포인터.
변수의 크기문자또는varchar.
배열의 요소 수(배열의 경우) 가져오기).
배열의 다음 요소에 대한 오프셋(배열의 경우) 가져오기).
특수 변수로서의 표시 변수 유형 기호.
표시 변수에 대한 포인터입니다.
0
표시기 배열의 요소 수(배열의 경우) 가져오기).
표시 배열의 다음 요소에 대한 오프셋( 배열 가져오기).
모든 배트맨 토토 명령이 이런 방식으로 처리되는 것은 아닙니다. 에 대한 예를 들어 다음과 같은 열린 커서 문입니다.
EXEC 배트맨 토토 OPEN커서;
은 출력에 복사되지 않습니다. 대신 커서의선언명령은의 위치에서 사용됩니다.열기명령은 실제로 커서.
다음은 출력을 설명하는 완전한 예입니다. 파일 전처리기foo.pgc(세부사항 각 특정 버전에 따라 변경될 수 있습니다. 전처리기):
EXEC 배트맨 토토 시작 선언 섹션; 정수 인덱스; 정수 결과; EXEC 배트맨 토토 END 선언 섹션; ... EXEC 배트맨 토토 SELECT res INTO :result FROM mytable WHERE 인덱스 = :index;
다음으로 번역됩니다:
/* ecpg(2.6.0)에 의해 처리됨 */
/* 이 두 개의 포함 파일은 전처리기에 의해 추가됩니다 */
#include <ecpgtype.h;
#include <ecpglib.h;
/* exec sql 선언 섹션 시작 */
#라인 1 "foo.pgc"
정수 인덱스;
정수 결과;
/* exec sql 선언 섹션 끝 */
...
ECPGdo(__LINE__, NULL, "SELECT res FROM mytable WHERE 인덱스 = ? ",
ECPGt_int,&(색인),1L,1L,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT,
ECPGt_int,&(결과),1L,1L,sizeof(int),
ECPGt_NO_INDICATOR, NULL, 0L, 0L, 0L, ECPGt_EORT);
#line 147 "foo.pgc"
(여기의 들여쓰기는 가독성을 위해 추가된 것이며, 전처리기가 하는 일입니다.)