이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 34.4. 호스트 사설 토토 사용버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

33.6. 호스트 무지개 토토 사용

inPostgre와이즈 토토 : 문서 : 9.0 : 와이즈 토토 와이즈 토토당신은 방법을 보았습니다 임베디드 SQL 프로그램에서 SQL 문을 실행할 수 있습니다. 일부 해당 진술 중 고정 값 만 사용했으며 사용자가 제공 한 값을 명령문에 삽입하거나 프로그램 프로세스 쿼리에 의해 리턴 된 값. 그런 종류 진술은 실제 응용 프로그램에서 실제로 유용하지 않습니다. 이것 섹션은 C 사이에 데이터를 전달할 수있는 방법에 대해 자세히 설명합니다. 간단한 메커니즘을 사용한 프로그램 및 임베디드 SQL 문 라고 불리는호스트 무지개 토토. 임베디드에서 SQL 프로그램 우리는 SQL 문을 고려합니다게스트C 프로그램 코드에서호스트 언어. 따라서 무지개 토토 C 프로그램 중호스트 무지개 토토.

33.6.1. 개요

C 프로그램과 SQL 문 사이의 데이터 전달은 다음과 같습니다. 임베디드 SQL에서 특히 간단합니다. 대신 프로그램을 수반하는 진술에 데이터를 붙여 넣습니다 가치를 올바르게 인용하는 것과 같은 다양한 합병증 단순히 C 변수의 이름을 SQL에 쓸 수 있습니다. 결장에 의해 접두사 인 진술. 예를 들어:

실행 가능한 값으로 삽입 (: v1, 'foo', : ​​v2);

이 문장은 이름라는 두 개의 c 무지개 토토를 나타냅니다.v1andv2당신이 한 종류의 데이터 또는 다른 데이터를 사용하도록 제한됩니다.

SQL 문에 C 변수를 삽입하는이 스타일 SQL에서 값 표현이 예상되는 곳 성명.

33.6.2. 섹션 선언

예를 들어 프로그램에서 데이터를 데이터베이스로 전달하려면 쿼리의 매개 변수로 또는 데이터베이스에서 데이터를 전달합니다. 프로그램으로 돌아가서 의도 된 C 변수 이 데이터를 포함하여 특별히 표시된 것으로 선언해야합니다. 섹션, 그래서 내장 된 SQL 사전 처리기는 그들을.

이 섹션은 다음과 같이 시작합니다.

Exec SQL 시작 선언 섹션;

:로 끝납니다.

exec SQL 종료 선언 섹션;

해당 라인 사이에 일반 C 변수가 있어야합니다 다음과 같은 선언

int x = 4;
Char Foo [16], Bar [16];

보시다시피, 초기 값을 선택적으로 할당 할 수 있습니다. 변수에. 변수의 범위는 프로그램 내에서 선언 섹션의 위치. 당신은 할 수 있습니다 또한 다음 구문으로 변수를 선언합니다 암시 적으로 선언 섹션을 생성합니다.

Exec SQL int i = 4;

당신은 프로그램에 많은 선언 섹션을 가질 수 있습니다. 좋다.

선언은 또한 출력 파일에 반영됩니다. 정상적인 C 변수이므로 다시 선언 할 필요가 없습니다. SQL 명령에 사용되지 않는 변수는 이 특별 섹션 밖에서 정상적으로 선언됩니다.

구조 또는 조합의 정의도 나열되어야합니다. 내부선언섹션. 그렇지 않으면 사전 처리기는 이러한 유형을 처리 할 수 ​​없습니다. 정의를 알고 있습니다.

33.6.3. 다른 유형의 호스트 무지개 토토

호스트 무지개 토토로서 배열, typedefs, 스트러크와 포인터. 또한 특수 유형의 호스트가 있습니다 ECPG에만 존재하는 변수

호스트 무지개 토토에 대한 몇 가지 예 :

배열

배열 선언의 가장 일반적인 사용 중 하나는 아마도 다음과 같이 숯 배열의 할당 일 것입니다.

Exec SQL 시작 선언 섹션;
    char str [50];
EXEC SQL 종료 선언 섹션;

길이를 관리해야합니다. 당신 자신. 이 호스트 무지개 토토를 대상으로 사용하는 경우 그 이상의 문자열을 반환하는 쿼리의 변수 49 자, 버퍼 오버플로가 발생합니다.

typedefs

사용typedef키워드로 새로운 유형을 이미 기존 유형에 매핑합니다.

Exec SQL 시작 선언 섹션;
    typedef char mychartype [40];
    typedef long serial_t;
EXEC SQL 종료 선언 섹션;

사용할 수 있습니다.

exec sql type serial_t는 길다;

이 선언은 선언의 일부일 필요는 없습니다. 부분.

포인터

가장 일반적인 유형으로 포인터를 선언 할 수 있습니다. 그러나 포인터를 대상으로 사용할 수는 없습니다 자동 배치가없는 쿼리 변수. 보다Postgre윈 토토 : 문서 : 9.0 : 설명자 영역 사용더 많은 것 자동 할당에 관한 정보.

Exec SQL 시작 선언 섹션;
    int *intp;
    char ** charp;
EXEC SQL 종료 선언 섹션;
특수 유형의 무지개 토토

ECPG에는 몇 가지 특별한 유형이 포함되어 있습니다 SQL 서버의 데이터와 쉽게 상호 작용합니다. 을 위한 예는에 대한 지원을 구현했습니다Varchar, 숫자, 날짜, 타임 스탬프간격타입.롤 토토 PostgreSQL : 문서 : 9.0 : PGTYPES 라이브러리그러한 유형을 다루는 기본 함수를 포함합니다 SQL Server에 쿼리를 보낼 필요가 없다는 타임 스탬프에 간격을 추가하기 만하면됩니다 예.

특별 유형Varcharis 지명 된로 변환struct모든 변수. 다음과 같은 선언 :

Varchar var [180];

:로 변환됩니다.

Struct varchar_var int len; char arr [180];  var;

이 구조는 SQL과 인터페이스하는 데 적합합니다 유형의 데이Varchar.

33.6.4. 선택and가져 오기

이제 귀하는 귀하가 생성 한 데이터를 전달할 수 있어야합니다. SQL 명령으로 프로그램. 그러나 당신은 어떻게 검색합니까? 쿼리 결과? 이를 위해 임베디드 SQL이 제공합니다 일반적인 명령의 특수 변형selectandFetch. 이것들 명령에는 특별한in절 검색 된 값이 저장해야합니다.

여기 예입니다.

/*
 *이 테이블을 가정하십시오.
 * 테이블 생성 테스트 1 (a int, b varchar (50));
 */

Exec SQL 시작 선언 섹션;
int v1;
바르 르 차 V2;
Exec SQL END DELLARE SECTION;

 ...

exec SQL a, b에 : v1, : v2 test;

theinto절차가 나타납니다 선택 목록 및From절. 선택 목록의 요소 수와 다음 목록in(대상 목록이라고도 함) 동일해야합니다.

다음은 명령을 사용하는 예입니다fetch:

Exec SQL 시작 선언 섹션;
int v1;
바르 르 차 V2;
Exec SQL END DELLARE SECTION;

 ...

Exec SQL 선택 A, B Test에서 FOO Cursor를 선언합니다.

 ...

하다 
    ...
    exec sql 다음은 foo에서 v1, : v2;
    ...
 하는 동안 (...);

여기in조항이 나타납니다 모든 정상적인 조항.

33.6.5. 표시기

위의 예는 널 값을 처리하지 않습니다. 사실, 검색 예제는 널을 가져 오면 오류가 발생합니다. 데이터베이스의 값. 널 값을 전달할 수 있습니다 데이터베이스 또는 데이터베이스에서 NULL 값을 검색하려면 각 호스트에 두 번째 호스트 무지개 토토 사양을 추가하십시오 데이터를 포함하는 변수. 이 두 번째 호스트 무지개 토토입니다 호출표시기a 데이텀이 무효인지를 알려주는 플래그,이 경우 실제 호스트 무지개 토토의 값은 무시됩니다. 여기 예입니다 널 값의 검색을 올바르게 처리합니다.

exec SQL 시작 선언 섹션;
varchar val;
int val_ind;
EXEC SQL 종료 선언 섹션 :

 ...

exec SQL 선택 B로 : val : val_ind from test1;

지표 무지개 토토val_ind의지 값이 무효가되지 않으면 0이되면 음수가됩니다. 그 값은 널이었다.

표시기에는 또 다른 기능이 있습니다 긍정적이므로 값이 무효가 아니라는 것을 의미하지만 호스트 무지개 토토에 저장되었을 때 잘 렸습니다.