inPostgre토토 커뮤니티 : 문서 : 8.1 : 토토 커뮤니티 토토 커뮤니티당신은 방법을 보았습니다 임베디드 SQL 프로그램에서 SQL 문을 실행할 수 있습니다. 일부 해당 진술 중 고정 값 만 사용했으며 사용자가 제공 한 값을 명령문에 삽입하거나 프로그램 프로세스 쿼리에 의해 리턴 된 값. 그런 종류 진술은 실제 응용 프로그램에서 실제로 유용하지 않습니다. 이것 섹션은 C 사이에 데이터를 전달할 수있는 방법에 대해 자세히 설명합니다. 간단한 메커니즘을 사용한 프로그램 및 임베디드 SQL 문 라고 불리는호스트 변수.
C 프로그램과 SQL 문 사이의 데이터 전달은 다음과 같습니다. 임베디드 SQL에서 특히 간단합니다. 대신 프로그램을 수반하는 진술에 데이터를 붙여 넣습니다 가치를 올바르게 인용하는 것과 같은 다양한 합병증 단순히 C 변수의 이름을 SQL에 쓸 수 있습니다. 결장에 의해 접두사 인 진술. 예를 들어:
Exec SQL insert initeable 값 (: v1, 'foo', : v2);
이 문장은 이름라는 두 개의 C 변수를 나타냅니다.v1andv2당신이 한 종류의 데이터 또는 다른 데이터를 토토하도록 제한됩니다.
SQL 문에 C 변수를 삽입하는이 스타일 SQL 문에서 값 표현식이 예상됩니다. ~ 안에 우리가 C 변수에 대한 참조라고하는 SQL 환경호스트 변수.
예를 들어 프로그램에서 데이터를 데이터베이스로 전달하려면 쿼리의 매개 변수로 또는 데이터베이스에서 데이터를 전달합니다. 프로그램으로 돌아가서 의도 된 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.
이제 귀하는 귀하가 생성 한 데이터를 전달할 수 있어야합니다. 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조항이 나타납니다 모든 정상적인 조항.
이 두 가지 방법 모두 시간. 결과 세트를 잠재적으로 처리 해야하는 경우 한 줄 이상을 포함하면 표시된대로 커서를 토토해야합니다. 두 번째 예에서.
위의 예는 널 값을 처리하지 않습니다. 사실, 검색 예제는 널을 가져 오면 오류가 발생합니다. 데이터베이스의 값. 널 값을 전달할 수 있습니다 데이터베이스 또는 데이터베이스에서 NULL 값을 검색하려면 각 호스트에 두 번째 호스트 변수 사양을 추가하십시오 데이터를 포함하는 변수. 이 두 번째 호스트 변수입니다 호출표시기데이텀이 무효인지를 알려주는 플래그,이 경우 실제 호스트 변수의 값은 무시됩니다. 여기 예입니다 널 값의 검색을 올바르게 처리합니다.
Exec SQL 시작 선언 섹션; varchar val; int val_ind; EXEC SQL 종료 선언 섹션 : ... exec SQL 선택 B로 : val : val_ind from test1;
지표 변수val_ind의지 값이 무효가되지 않으면 0이되면 음수가됩니다. 그 값은 널이었다.
표시기에는 또 다른 기능이 있습니다 긍정적이므로 값이 무효가 아니라는 것을 의미하지만 호스트 변수에 저장되었을 때 잘 렸습니다.