이 문서는 지원되지 않는 버전의 Postgre토토 결과 용입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다503 젠 토토 페치 실패버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.
Postgre토토 결과
이전 43 장. ECPG - C에 포함 된 토토 결과 다음

개발자

이 섹션은 ECPG를 개발하려는 사람들을위한 것입니다. 인터페이스. 그것은 일이 어떻게 작동하는지 설명합니다. 야망은 이 섹션으로보고 싶어하는 사람들을위한 것들이 포함되어 있습니다. 내부와 사용 방법에 대한 섹션은 모두에게 충분해야합니다. 정상적인 질문. 따라서 내부를보기 전에 이것을 읽으십시오 ECPG. 실제로 작동하는 방식에 관심이 없다면 건너 뛰십시오. 이 섹션.

TODO 목록

이 버전에 전처리 기에 약간의 결함이 있습니다.

사전 처리기 출력

변수는 정적이어야합니다.

사전 처리기 토토 결과에서 구문 확인을 수행 할 수 없습니다 진술

당신이 쓰는 것은 무엇이든지 정확하게 복사됩니다. Postgres와 당신은까지 오류를 찾을 수 없습니다. 실행 시간.

문자열에 대한 제한 없음

PQ 인터페이스 및 대부분의 PQEXEC 함수의 경우 ECPG는 요청이 끈. 데이터에 null이 포함 된 경우와 같이 어떤 경우에는 캐릭터, 이것은 심각한 문제가 될 것입니다.

오류 코드

다른 오류 번호가 다른 오류 번호가 있어야합니다 그들 모두에게 -1 대신 오류.

라이브러리 기능

to_date et al.

레코드

선언에서 기록이나 구조를 정의 할 가능성 한 줄에서 레코드를 채울 수있는 방식으로 섹션 데이터베이스.

이것은 한 번에 전체 행을 처리하는 간단한 방법입니다.

배열 작업

Oracle에는 속도를 향상시키는 배열 작업이 있습니다. 언제 ECPG에서 구현하는 것은 호환성 이유로 수행됩니다. 오직. 그들이 속도를 향상시키기 위해서는 훨씬 더 필요할 것입니다 Postgres 내부 메커니즘에 대한 통찰력.

표시기 변수

Oracle에는 값이 NULL인지 알려주는 표시기 변수가 있습니다. 또는 비어있는 경우. 이것은 배열 작업을 크게 단순화합니다 일부 디자인 결함을 해킹하는 방법을 제공합니다. varchar2 처리 (빈 문자열은 그렇지 않습니다 널 값과 구별 할 수 있습니다). 이것이 확실하지 않습니다 Oracle Extension 또는 ANSI 표준의 일부.

typedefs

뿐만 아니라 레코드 및 어레이와 같은 복잡한 유형, typedefs 돌보는 것이 좋을 것입니다.

스크립트 변환

데이터베이스를 설정하려면 테이블이있는 스크립트가 필요합니다. 정의 및 기타 구성 매개 변수. 당신이 있다면 적용하고 싶은 이전 데이터베이스에 대한 이러한 스크립트 같은 방식으로 작동하는 Postgres 데이터베이스를 얻으려면

데이터베이스를 설정하려면 테이블이있는 스크립트가 필요합니다. 정의와 기능은 달성 될 수 있습니다 일부 변환 스크립트. 속도는 결코 달성되지 않습니다 이런 식으로. 이를 위해서는 데이터베이스에 더 큰 통찰력이 필요합니다. 실현 될 수있는 것보다 구조 및 데이터베이스 사용 대본에서.

전처리

첫 4 줄은 출력에 기록됩니다. 두 개의 의견과 두 개 라이브러리 인터페이스에 필요한 줄 포함.

그런 다음 사전 처리기는 입력을 읽는 것만 한 패스로 작동합니다. 파일을 파일하고 출력이 진행될 때 쓰기. 일반적으로 그것은 단지입니다 더 보지 않고 모든 것을 출력에 반향합니다.

그것이에 관해서는Exec 토토 결과진술 그것은 IIT에 따라 개입하고 변경합니다. 그만큼Exec 토토 결과진술은 다음 중 하나 일 수 있습니다 :

섹션 선언

선언 섹션은로 시작합니다

Exec 토토 결과 시작 선언 섹션;
Exec 토토 결과 End Declare 섹션;
섹션에서는 변수 선언 만 허용됩니다. 모든 이 섹션 내에서 변수 선언은 또한 목록에 입력됩니다. 변수는 해당 이름과 함께 이름으로 색인되었습니다 유형.

선언은 변수를 만들기 위해 파일에 반영됩니다. 정상적인 c- 변수.

특수 유형 Varchar와 Varchar2는 모든 변수에 대한 구조물로 명명되었습니다. 다음과 같은 선언 :

Varchar var [180];
Struct varchar_var int len; char arr [180];  var;
진술 포함

include 진술은 다음과 같습니다.

exec 토토 결과 포함 파일 이름;
그것은로 변환되었습니다
#include <filename.h
Connect 문

연결 문은 다음과 같습니다.

Exec 토토 결과 Connect '데이터베이스';
그 진술은로 변환됩니다.
ecpgconnect ( "데이터베이스");
오픈 커서 문

열린 커서 문은 다음과 같습니다.

Exec 토토 결과 Open커서;
그리고 출력에서 무시하고 복사하지 않습니다.
커밋 진술

커밋 진술은

Exec 토토 결과 Commit;
출력에서 번역
ecpgcommit (__ line__);
롤백 문

롤백 문장은

Exec 토토 결과 롤백;
그리고 출력에서로 번역됩니다.
ecpgrollback (__ line__);
기타 진술

다른 토토 결과 문은 시작하는 다른 진술입니다Exec 토토 결과;. 사이의 모든 것은 토토 결과로 취급됩니다 가변 대체에 대한 진술 및 구문 분석.

기호가 a로 시작할 때 가변 대체가 발생합니다 결장 (:). 그런 다음 변수입니다 이름은 이전에 선언 된 변수 중에서 발견됩니다. 선언 섹션 내에서 SQL 문은 입력 또는 출력에 대한 변수라는 것을 알고 있습니다. 변수에 대한 포인터는 출력에 기록됩니다. 함수에 의한 액세스 허용.

토토 결과 요청의 일부인 모든 변수에 대해 기능은 또 다른 다섯 가지 인수를 얻습니다.

특수 기호로 유형
값에 대한 포인터
변수의 크기가 varchar
배열의 요소 수 (배열의 경우 가져 오기)
배열의 다음 요소로의 오프셋 (배열 용. 가져 오기)

배열 가져 오기는 아직 구현되지 않았으므로 마지막 두 가지가 있습니다. 논쟁은 실제로 중요하지 않습니다. 그들은 아마도 가질 수 있습니다 제외되었습니다.

완료 예

다음은 전처리 자 :

Exec 토토 결과 시작 선언 섹션;
int index;
int 결과;
Exec 토토 결과 END DELLARE SECTION;
...
    exec sql res를 선택하십시오 : mytable에서 결과적으로 index = : index;
:로 번역됩니다.
/ *이 두 포함 파일은 사전 처리기에 의해 추가됩니다 */
#include <ecpgtype.h
#include <ecpglib.h
/ * EXEC 토토 결과 시작 선언 섹션 */

 int index;
 int 결과;
/ * EXEC 토토 결과 종료 선언 섹션 */

...
    ecpgdo (__ line__, "index = ;;"에서 mytable에서 res를 선택하십시오. 
           ecpgt_int, & index, 0,0, sizeof (int), 
           ECPGT_EOIT, 
           ecpgt_int, & result, 0,0, sizeof (int), 
           ecpgt_eort);
(이 설명서의 들여 쓰기는 가독성과 전처리자가 할 수있는 일이 아닙니다.)

도서관

라이브러리에서 가장 중요한 기능은입니다.ecpgdo함수. 가변 금액이 필요합니다 논쟁. 바라건대 우리는 바르 르 차 함수로 받아 들일 수있는 변수의 양. 이것은 최대 50 정도의 논쟁을 쉽게 추가 할 수 있습니다.

인수는 다음과 같습니다.

줄 번호

이것은 오류에 사용 된 원래 줄의 줄 번호입니다. 메시지 만.

문자열

이것은 발행 될 SQL 요청입니다. 이 요청 입력 변수, 즉 변수에 의해 수정됩니다. 컴파일 시간에 알려지지 않았지만 요구. 변수가 가야하는 곳에 문자열에는 포함됩니다 “;”.

입력 변수

모든 사전 처리기에 대한 섹션에 설명 된대로 입력 변수는 5 개의 인수를 가져옵니다.

ecpgt_eoit

더 이상 입력 변수가 없다고 말하는 열거.

출력 변수

모든 사전 처리기에 대한 섹션에 설명 된대로 입력 변수는 5 개의 인수를 가져옵니다. 이 변수는 채워집니다 함수에 의해.

ecpgt_eort

더 이상 변수가 없다고 말하는 열거.

모든 토토 결과 문은 한 번의 트랜잭션에서 수행됩니다. 커밋 거래를 발행합니다. 이것은 첫 번째로 작동합니다 계약 또는 롤백이 항상 시작된 후 트랜잭션 또는 첫 번째 거래는 항상 시작됩니다. 거래.

완료 될 : 다른 항목을 설명하는 항목.


이전 다음
설치 up libpq