이 섹션은 개발을 원하는 사람들을위한 것입니다ECPG인터페이스. 그것은 어떻게 사물을 설명합니다 일하다. 야심은이 섹션에 내부를보고 싶어하는 사람들과 방법에 대한 섹션 모든 정상적인 질문에 충분해야합니다. 그래서 이것을 읽으십시오 내부를보기 전에ECPG. 당신이 그것이 어떻게 관심이 없다면 정말 작동합니다.이 섹션을 건너 뛰십시오.
이 버전에 전처리 기에 약간의 결함이 있습니다.
To_date et al. 존재하지 않습니다. 하지만Postgres약간의 전환이 있습니다 일상적인 자체. 그래서 당신은 아마 이것을 놓치지 않을 것입니다.
구조와 노조를 정의해야합니다 섹션 선언.
다음 진술은 구현되지 않습니다 멀리:
EXEC 토토 캔 삽입에서 "데이터 없음"에 대한 오류 메시지 Select From From은 100이어야합니다.
토토 캔warn [6]은 정밀도 또는 스케일이라면 'w'여야합니다 세트 디스크립터 명령문에 지정된 값은 다음과 같습니다 무시.
출력에 쓰여진 처음 네 줄은 일정합니다. ECPG에 의한 추가. 이것들은 두 개의 의견이며 두 개의 주석이 포함됩니다 라이브러리 인터페이스에 필요합니다.
그런 다음 사전 처리기는 한 번의 패스로만 작동하여 입력 파일을 입력하고 출력이 진행될 때 쓰기. 보통 그것은 단지 그것을 보지 않고 출력에 모든 것을 반향합니다. 더 나아가.
그것이에 관해서는Exec 토토 캔진술은 그것이 무엇에 따라 개입하고 변경합니다. 이다. 그만큼Exec 토토 캔진술은 하나 일 수 있습니다 이것들:
섹션을 시작합니다
Exec 토토 캔 시작 선언 섹션;
exec 토토 캔 종료 선언 섹션;섹션에서는 변수 선언 만 허용됩니다. 모든 이 섹션 내에서 변수 선언은 또한 목록에 입력됩니다. 변수는 해당 이름과 함께 이름으로 색인되었습니다 유형.
특히 구조 또는 연합의 정의 또한 선언 섹션 안에 나열되어야합니다. 그렇지 않으면ECPG이것을 처리 할 수 없습니다 단순히 정의를 모르기 때문에 유형.
선언은 파일에 반향을 일으켜 변수 정상적인 c- 변수.
특수 유형 Varchar 및 Varchar2가 변환됩니다 모든 변수에 대한 명명 된 구조로. 선언 좋다:
Varchar var [180];
Struct varchar_var int len; char arr [180]; var;
include 진술은 다음과 같습니다.
exec 토토 캔 포함 파일 이름;이것은와 같지 않습니다.
#include <filename.h
대신 지정된 파일은에 의해 구문 분석됩니다.ECPG자체. 그래서 내용 지정된 파일은 결과 C 코드에 포함되어 있습니다. 이것 exec 토토 캔 명령을 파일 포함.
연결 문은 다음과 같습니다.
Exec 토토 캔 Connect연결 대상;지정된 데이터베이스에 연결됩니다.
the연결 대상다음 방법으로 지정할 수 있습니다.
사용자를 지정하는 방법에는 여러 가지가 있습니다 이름:
마지막으로 userID와 암호. 각각은 A 일 수 있습니다 상수 텍스트, 문자 변수 또는 chararcter 끈.
연결 해제 진술은 loke :
Exec 토토 캔 분리 [연결 대상];지정된 데이터베이스에 대한 연결을 닫습니다.
the연결 대상다음 방법으로 지정할 수 있습니다.
열린 커서 문은 다음과 같습니다.
Exec 토토 캔 Open커서;무시하고 출력에서 복사하지 않습니다.
커밋 진술은
Exec 토토 캔 Commit;그리고 출력에서로 번역됩니다.
ecpgcommit (__ line__);
롤백 문장은
Exec 토토 캔 롤백;및 출력에서 번역
ecpgrollback (__ line__);
기타토토 캔진술은입니다 시작하는 다른 진술exec 토토 캔;. 사이의 모든 것은로 취급됩니다.토토 캔진술 및 변수에 대한 구문 분석 치환.
기호가 시작될 때 가변 대체가 발생합니다 결장 (:). 그런 다음 변수 그 이름은 이전에 선언 섹션 내에서 선언했습니다 입력 또는 출력에 대한 변수에 따라 변수에 대한 포인터는 출력에 기록됩니다. 함수에 의한 액세스 허용.
의 일부인 모든 변수에 대해토토 캔함수가 다른 기능을 요청합니다 10 개의 인수 :
특수 기호로 유형. |
값 또는 포인터에 대한 포인터 바늘. |
변수가 문자 인 경우 변수의 크기 varchar. |
배열의 요소 수 (배열의 경우 가져 오기). |
배열의 다음 요소로의 오프셋 (배열 가져 오기) |
특별한 지표 변수의 유형 상징. |
지표 값에 대한 포인터 변수 또는 포인터에 대한 포인터 표시기 변수. |
0. |
표시기 배열의 요소 수 (for 배열 가져 오기). |
표시기의 다음 요소로의 오프셋 배열 (배열 페치 용) |
다음은 다음의 출력을 설명하는 완전한 예입니다. 파일 foo.pgc :의 전처리 자
Exec 토토 캔 시작 선언 섹션; int index; int 결과; Exec 토토 캔 END DELLARE SECTION; ... exec sql res를 선택하십시오 : mytable에서 결과적으로 index = : index;:로 번역됩니다.
/ * ECPG에 의해 처리 됨 (2.6.0) */ / *이 두 포함 파일은 사전 처리기에 의해 추가됩니다 */ #include <ecpgtype.h; #include <ecpglib.h; / * EXEC 토토 캔 시작 선언 섹션 */ #line 1 "foo.pgc" int index; int 결과; / * EXEC 토토 캔 종료 선언 섹션 */ ... ecpgdo (__ line__, null, "mytable에서 reS를 선택하여 index =?", 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"(이 매뉴얼의 들여 쓰기는 가독성과 전처리자가 할 수있는 일이 아닙니다.)
라이브러리에서 가장 중요한 기능은입니다.ecpgdo함수. 가변 금액이 필요합니다 논쟁. 바라건대 우리는 한계가있는 기계에 들어 가지 않기를 바랍니다 vararg에 의해 받아 들일 수있는 변수의 양에 기능. 이것은 최대 50 정도의 논쟁을 쉽게 추가 할 수 있습니다.
인수는 다음과 같습니다.
이것은 사용 된 원래 줄의 줄 번호입니다. 오류 메시지 만.
이것은입니다.토토 캔요청 그것은 발행 될 것입니다. 이 요청은 다음으로 수정됩니다 입력 변수, 즉 알지 못하는 변수 컴파일 시간에는 요청에 입력해야합니다. 변수가 가야하는 곳에 문자열에는 포함됩니다 ";".
사전 처리기 섹션에 설명 된대로 모든 입력 변수는 10 개의 인수를 얻습니다.
더 이상 입력이 없다고 말하는 열거 변수.
사전 처리기 섹션에 설명 된대로 모든 입력 변수는 10 개의 인수를 얻습니다. 이 변수 함수에 의해 채워집니다.
더 이상 변수가 없다고 말하는 열거.
모든토토 캔진술은입니다 커밋을 발행하지 않는 한 한 번의 거래에서 수행됩니다 거래. 이 자동 변환이 첫 번째로 진행되도록합니다 성명서 또는 커밋 후 첫 번째 성명서 또는 롤백은 항상 거래를 시작합니다. 이 기능을 비활성화합니다 기본적으로 사용-t옵션에서 CommandLine.
완료 될 : 다른 항목을 설명하는 항목.