이 섹션은 다음을 개발하려는 사람들을 위한 것입니다.ecpg인터페이스. 사물이 어떻게 되는지 설명합니다. 일. 야망은 이 섹션에 다음에 대한 내용을 포함시키는 것입니다. 내부를 살펴보고 방법에 대한 섹션을 원하는 사람들 모든 일반적인 질문에 충분해야 합니다. 그러니 이것을 읽어보세요 내부를 살펴보기 전에ecpg. 그것이 어떻게 이루어지는지 관심이 없다면 정말 효과가 있습니다. 이 섹션을 건너뛰세요.
이 버전의 전처리기에는 몇 가지 결함이 있습니다.
to_date 외. 존재하지 않습니다. 그런데 그때포스트그레스전환이 잘 되었습니다 루틴 그 자체. 그러니 아마 이걸 놓치지 않을 거예요.
구조체와 공용체는 다음에서 정의되어야 합니다. 섹션을 선언합니다.
다음 명령문은 따라서 구현되지 않습니다. 멀리:
Exec 토토 캔 삽입 시 "데이터 없음"에 대한 오류 메시지 select from 문은 100이어야 합니다.
토토 캔warn[6]은 PRECISION 또는 SCALE인 경우 'W'여야 합니다. SET DESCRIPTOR 문에 지정된 값은 다음과 같습니다. 무시됩니다.
출력에 기록된 처음 네 줄은 일정합니다. Ecpg에 의한 추가. 이것은 두 개의 주석과 두 개의 포함 줄입니다. 라이브러리 인터페이스에 필요합니다.
그런 다음 전처리기는 한 번만 작동하여 다음을 읽습니다. 입력 파일을 작성하고 진행되는 동안 출력에 기록합니다. 일반적으로 그것은 그것을 보지 않고 출력에 모든 것을 반영합니다. 더 나아가.
에 관해서는EXEC 토토 캔개입하고 무엇에 따라 변경한다고 진술합니다. 이다.EXEC 토토 캔문은 다음 중 하나일 수 있습니다. 이것들:
다음으로 시작하는 섹션 선언
exec 토토 캔 선언 섹션 시작;다음으로 끝남
exec 토토 캔 end 선언 섹션;섹션에서는 변수 선언만 허용됩니다. 매 이 섹션 내의 변수 선언은 목록에도 입력됩니다. 해당 변수와 함께 이름에 색인이 붙은 변수 유형.
특히 구조 또는 공용체의 정의 또한 선언 섹션 안에 나열되어야 합니다. 그렇지 않으면ecpg이것을 처리할 수 없습니다 단순히 정의를 모르기 때문입니다.
선언은 파일에 반영되어 변수는 일반 C-변수도 마찬가지입니다.
특수 유형 VARCHAR 및 VARCHAR2가 변환됩니다. 모든 변수에 대해 명명된 구조체로 변환됩니다. 선언 좋아요:
VARCHAR 변수[180];로 변환됨
struct varchar_var int len; 문자 arr[180]; 변수;
include 문은 다음과 같습니다:
exec 토토 캔 include 파일 이름;이것은 다음과 같지 않습니다.
#include <파일 이름.h
대신 지정된 파일은 다음에 의해 구문 분석됩니다.ecpg그 자체. 그래서 그 내용은 지정된 파일이 결과 C 코드에 포함됩니다. 이 EXEC 토토 캔 명령을 지정할 수 있는 방법 파일을 포함합니다.
연결 문은 다음과 같습니다:
exec 토토 캔 연결 대상연결 대상;지정된 데이터베이스에 대한 연결을 생성합니다.
그연결 대상다음 방법으로 지정할 수 있습니다:
사용자를 지정하는 방법도 다양합니다 이름:
마지막으로 사용자 ID와 비밀번호입니다. 각각은 상수 텍스트, 문자 변수 또는 문자 문자열.
연결 해제 명령문은 다음과 같습니다:
exec 토토 캔 연결 끊기 [연결 대상];지정된 데이터베이스에 대한 연결을 닫습니다.
그연결 대상다음 방법으로 지정할 수 있습니다:
열린 커서 문은 다음과 같습니다:
exec 토토 캔 열기커서;무시되며 출력에서 복사되지 않습니다.
커밋 문은 다음과 같습니다.
exec 토토 캔 커밋;그리고 출력에서 다음으로 번역됩니다.
ECPG커밋(__LINE__);
롤백 문은 다음과 같습니다.
exec 토토 캔 롤백;그리고 출력에서 다음으로 번역됩니다.
ECPGrollback(__LINE__);
기타토토 캔문장은 다음과 같습니다 로 시작하는 다른 명령문exec 토토 캔다음으로 끝남;. 그 사이의 모든 것은토토 캔문 및 변수에 대해 구문 분석됨 대체.
기호가 다음으로 시작하면 변수 대체가 발생합니다. 콜론(:). 그런 다음 변수 그 이름은 다음과 같은 변수 중에서 검색됩니다. 선언 섹션 내에서 이전에 선언되었으며 입력 또는 출력을 위한 변수에 따라 변수에 대한 포인터는 출력에 기록됩니다. 기능에 의한 접근을 허용합니다.
다음의 일부인 모든 변수에 대해토토 캔함수를 요청하면 다른 함수를 얻습니다 10개의 인수:
| 특수 기호로서의 유형. |
| 값에 대한 포인터 또는 포인터. |
| 문자인 경우 변수의 크기 또는 varchar. |
| 배열의 요소 수(배열의 경우) 가져오기). |
| 배열의 다음 요소에 대한 오프셋 (배열 가져오기용) |
| 특수 변수로서의 표시 변수 유형 기호. |
| 표시기 값에 대한 포인터 변수 또는 포인터에 대한 포인터 표시 변수. |
| 0. |
| 표시 배열의 요소 수( 배열 가져오기). |
| 표시기의 다음 요소에 대한 오프셋 array(배열 가져오기용) |
다음은 출력을 설명하는 완전한 예입니다. 파일 foo.pgc의 전처리기:
exec 토토 캔 선언 섹션 시작; 정수 인덱스; 정수 결과; exec 토토 캔 end 선언 섹션; ... exec sql select res into :result from mytable where index = :index;다음으로 번역됩니다:
/* ecpg(2.6.0)에 의해 처리됨 */
/* 이 두 개의 포함 파일은 전처리기에 의해 추가됩니다 */
#include <ecpgtype.h;
#include <ecpglib.h;
/* exec sql 선언 섹션 시작 */
#라인 1 "foo.pgc"
정수 인덱스;
정수 결과;
/* exec sql 선언 섹션 끝 */
...
ECPGdo(__LINE__, NULL, "인덱스 = ?인 mytable에서 res를 선택하세요. ",
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개의 인수를 갖습니다. 이들 변수 함수로 채워집니다.
더 이상 변수가 없음을 알려주는 열거형입니다.
모두토토 캔문장은 다음과 같습니다 커밋을 실행하지 않는 한 하나의 트랜잭션으로 수행됩니다. 거래. 이 자동 거래를 먼저 진행하려면 명령문 또는 커밋 후 첫 번째 after 명령문 또는 롤백은 항상 트랜잭션을 시작합니다. 이 기능을 비활성화하려면 기본적으로는을 사용합니다.-t옵션 명령줄.
완료 예정: 다른 항목을 설명하는 항목.