Postgresql 9.0.23 문서화 | ||||
---|---|---|---|---|
PostgreSQL : 문서 : 9.0 : 연결 토토 | 토토 : 문서 : 9.0 : ECPG- C에 포함 된 SQL | 33 장ECPG- 내장SQLin c | 다음 |
inPostgre와이즈 토토 : 문서 : 9.0 : 와이즈 토토 와이즈 토토당신은 방법을 보았습니다 임베디드 SQL 프로그램에서 SQL 문을 실행할 수 있습니다. 일부 해당 진술 중 고정 값 만 사용했으며 사용자가 제공 한 값을 명령문에 삽입하거나 프로그램 프로세스 쿼리에 의해 리턴 된 값. 그런 종류 진술은 실제 응용 프로그램에서 실제로 유용하지 않습니다. 이것 섹션은 C 사이에 데이터를 전달할 수있는 방법에 대해 자세히 설명합니다. 간단한 메커니즘을 사용한 프로그램 및 임베디드 SQL 문 라고 불리는호스트 무지개 토토. 임베디드에서 SQL 프로그램 우리는 SQL 문을 고려합니다게스트C 프로그램 코드에서호스트 언어. 따라서 무지개 토토 C 프로그램 중호스트 무지개 토토.
C 프로그램과 SQL 문 사이의 데이터 전달은 다음과 같습니다. 임베디드 SQL에서 특히 간단합니다. 대신 프로그램을 수반하는 진술에 데이터를 붙여 넣습니다 가치를 올바르게 인용하는 것과 같은 다양한 합병증 단순히 C 변수의 이름을 SQL에 쓸 수 있습니다. 결장에 의해 접두사 인 진술. 예를 들어:
실행 가능한 값으로 삽입 (: v1, 'foo', : v2);
이 문장은 이름라는 두 개의 c 무지개 토토를 나타냅니다.v1andv2당신이 한 종류의 데이터 또는 다른 데이터를 사용하도록 제한됩니다.
SQL 문에 C 변수를 삽입하는이 스타일 SQL에서 값 표현이 예상되는 곳 성명.
예를 들어 프로그램에서 데이터를 데이터베이스로 전달하려면 쿼리의 매개 변수로 또는 데이터베이스에서 데이터를 전달합니다. 프로그램으로 돌아가서 의도 된 C 변수 이 데이터를 포함하여 특별히 표시된 것으로 선언해야합니다. 섹션, 그래서 내장 된 SQL 사전 처리기는 그들을.
이 섹션은 다음과 같이 시작합니다.
Exec SQL 시작 선언 섹션;
:로 끝납니다.
exec SQL 종료 선언 섹션;
해당 라인 사이에 일반 C 변수가 있어야합니다 다음과 같은 선언
int x = 4; Char Foo [16], Bar [16];
보시다시피, 초기 값을 선택적으로 할당 할 수 있습니다. 변수에. 변수의 범위는 프로그램 내에서 선언 섹션의 위치. 당신은 할 수 있습니다 또한 다음 구문으로 변수를 선언합니다 암시 적으로 선언 섹션을 생성합니다.
Exec SQL int i = 4;
당신은 프로그램에 많은 선언 섹션을 가질 수 있습니다. 좋다.
선언은 또한 출력 파일에 반영됩니다. 정상적인 C 변수이므로 다시 선언 할 필요가 없습니다. SQL 명령에 사용되지 않는 변수는 이 특별 섹션 밖에서 정상적으로 선언됩니다.
구조 또는 조합의 정의도 나열되어야합니다. 내부선언섹션. 그렇지 않으면 사전 처리기는 이러한 유형을 처리 할 수 없습니다. 정의를 알고 있습니다.
호스트 무지개 토토로서 배열, typedefs, 스트러크와 포인터. 또한 특수 유형의 호스트가 있습니다 ECPG에만 존재하는 변수
호스트 무지개 토토에 대한 몇 가지 예 :
배열 선언의 가장 일반적인 사용 중 하나는 아마도 다음과 같이 숯 배열의 할당 일 것입니다.
Exec SQL 시작 선언 섹션; char str [50]; EXEC SQL 종료 선언 섹션;
길이를 관리해야합니다. 당신 자신. 이 호스트 무지개 토토를 대상으로 사용하는 경우 그 이상의 문자열을 반환하는 쿼리의 변수 49 자, 버퍼 오버플로가 발생합니다.
사용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.
이제 귀하는 귀하가 생성 한 데이터를 전달할 수 있어야합니다. 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조항이 나타납니다 모든 정상적인 조항.
위의 예는 널 값을 처리하지 않습니다. 사실, 검색 예제는 널을 가져 오면 오류가 발생합니다. 데이터베이스의 값. 널 값을 전달할 수 있습니다 데이터베이스 또는 데이터베이스에서 NULL 값을 검색하려면 각 호스트에 두 번째 호스트 무지개 토토 사양을 추가하십시오 데이터를 포함하는 변수. 이 두 번째 호스트 무지개 토토입니다 호출표시기a 데이텀이 무효인지를 알려주는 플래그,이 경우 실제 호스트 무지개 토토의 값은 무시됩니다. 여기 예입니다 널 값의 검색을 올바르게 처리합니다.
exec SQL 시작 선언 섹션; varchar val; int val_ind; EXEC SQL 종료 선언 섹션 : ... exec SQL 선택 B로 : val : val_ind from test1;
지표 무지개 토토val_ind의지 값이 무효가되지 않으면 0이되면 음수가됩니다. 그 값은 널이었다.
표시기에는 또 다른 기능이 있습니다 긍정적이므로 값이 무효가 아니라는 것을 의미하지만 호스트 무지개 토토에 저장되었을 때 잘 렸습니다.