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

30.6. 호스트 변수 토토

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

30.6.1. 개요

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

Exec SQL insert initeable 값 (: v1, 'foo', : ​​v2);

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

SQL 문에 C 변수를 삽입하는이 스타일 SQL 문에서 값 표현식이 예상됩니다. ~ 안에 우리가 C 변수에 대한 참조라고하는 SQL 환경호스트 변수.

30.6.2. 섹션 선언

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

이 섹션은로 시작합니다.

Exec SQL 시작 선언 섹션;

exec SQL 종료 선언 섹션;

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

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

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

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

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

특별 유형Varchar변환되었습니다 이름으로struct모든 변수에 대해. 에이 와 같은 선언

Varchar var [180];

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

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

30.6.3. 가져 오기

이제 귀하는 귀하가 생성 한 데이터를 전달할 수 있어야합니다. 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;

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

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

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

 ...

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

 ...

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

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

이 두 가지 방법 모두 시간. 결과 세트를 잠재적으로 처리 해야하는 경우 한 줄 이상을 포함하면 표시된대로 커서를 토토해야합니다. 두 번째 예에서.

30.6.4. 표시기

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

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

 ...

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

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

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