이 문서는 지원되지 않는 버전의 Postgre윈 토토을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다Postgre와이즈 토토 : 문서 : 17 : 34.7. 설명자 영역 사용버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

33.9. 설명자 영역 사용

윈 토토 디스크립터 영역은보다 정교한 방법입니다. a의 결과 처리select, fetch또는 A설명진술. 윈 토토 디스크립터 영역 그룹 메타 데이터 항목과 함께 한 줄의 데이터 데이터를 하나로 데이터 구조. 메타 데이터는 특히 유용합니다 결과의 특성이있는 동적 윈 토토 문장 실행 열은 미리 알려지지 않을 수 있습니다. Postgre윈 토토은 두 가지를 제공합니다 설명자 영역을 사용하는 방법 : 명명 된 윈 토토 디스크립터 영역 및 c- 구조 sqldas.

33.9.1. 윈 토토 디스크립터로 명명되었습니다 영역

이름 지정된 윈 토토 디스크립터 영역은 헤더로 구성됩니다. 전체 설명자에 관한 정보와 하나에 대한 정보가 포함되어 있습니다 또는 기본적으로 각각 설명하는 항목 설명자 영역 결과 행의 한 열.

윈 토토 디스크립터 영역을 사용하기 전에 하나를 할당하십시오 :

exec 윈 토토 할당 디스크립터식별자;

식별자는 역할을합니다."변수 이름"설명 자 영역. 필요하지 않을 때 더 이상 설명자, 당신은 그것을 거래해야합니다 :

Exec 윈 토토 Dalloce Descriptor식별자;

디스크립터 영역을 사용하려면 스토리지 대상으로 지정하십시오. 에서in목록 대신 조항 호스트 변수 :

exec 윈 토토 Fetch 다음에 MyCursor에서 윈 토토 디스크립터 MyDesc;

결과 세트가 비어 있으면 서술자 영역이 여전히 쿼리에서 메타 데이터를 포함하십시오, 즉 필드 이름.

아직 실행되지 않은 준비된 쿼리,설명명령문을 사용하는 데 사용될 수 있습니다 결과 세트의 메타 데이터 :

Exec 윈 토토 시작 선언 섹션;
char * sql_stmt = "select * from table1";
Exec 윈 토토 END DELLARE SECTION;

Exec 윈 토토 STMT1 준비 : 윈 토토_STMT;
Exec 윈 토토 STMT1을 윈 토토 디스크립터 MyDesc에 설명합니다.

postgresql 9.0 이전,윈 토토키워드는 선택 사항이므로 사용디스크립터and윈 토토 설명자명명 된 윈 토토 디스크립터 영역을 생산합니다. 이제 필수, 생략윈 토토키워드 윈 토토DA 디스크립터 영역을 생성하고 참조섹션 33.9.2.

in설명andFetch진술,in사용키워드 비슷하게 사용될 수 있습니다. 결과 세트와 설명 자 영역의 메타 데이터.

이제 디스크립터 영역에서 데이터를 어떻게 얻습니까? 너 설명자 영역을 명명 된 구조로 생각할 수 있습니다. 전지. 헤더에서 필드 값을 검색하려면 호스트 변수로 저장하고 다음 명령을 사용하십시오.

Exec 윈 토토 GET DESCRICTOR이름 :hostvar=필드;

현재, 헤더 필드는 하나뿐입니다.count항목 설명자 영역이 존재합니다 (즉, 몇 개의 열이 결과에 포함). 호스트 변수는 an이어야합니다 정수 유형. 항목 설명 자 영역에서 필드를 얻으려면 사용하십시오. 다음 명령 :

Exec 윈 토토 Get Descriptor이름valueNum :hostvar=필드;

Num문자 그대로의 정수가 될 수 있습니다 또는 정수를 포함하는 호스트 변수. 가능한 필드 이다:

추기경(정수)

결과 세트의 행 수

데이터

실제 데이터 항목 (따라서 데이터 유형) 필드는 쿼리에 따라 다릅니다)

DateTime_interVal_code(정수)

?

DateTime_interVal_Precision(정수)

구현되지 않음

표시기(정수)

표시기 (널 값 또는 값을 나타냅니다 잘림)

key_member(정수)

구현되지 않음

길이(정수)

캐릭터의 데이텀 길이

이름(String)

열 이름

nullable(정수)

구현되지 않음

Octet_length(정수)

데이텀의 문자 표현의 길이 바이트

정밀(정수)

정밀도 (유형숫자)

returned_length(정수)

문자의 데이텀 길이

returned_octet_length(정수)

데이텀의 문자 표현 길이 바이트

스케일(정수)

스케일 (유형 용숫자)

타입(정수)

열의 데이터 유형의 숫자 ​​코드

inexecute, 선언andOpen진술,의 효과inand사용키워드가 다릅니다. 에이 디스크립터 영역은 입력을 제공하기 위해 수동으로 제작할 수 있습니다. 쿼리 또는 커서의 매개 변수 및윈 토토 디스크립터 사용이름입력을 전달하는 방법입니다 매개 변수로의 매개 변수. 구축하는 진술 a 이름이 지정된 윈 토토 디스크립터 영역은 다음과 같습니다.

Exec 윈 토토 Set Descriptor이름valueNum 필드= :hostvar;

Postgre윈 토토은 하나의 레코드를 하나씩 검색하는 것을 지원합니다fetch진술 및 데이터 저장 이 경우 호스트 변수에서 변수가 정렬. 예 :

Exec 윈 토토 시작 선언 섹션;
int id [5];
Exec 윈 토토 END DELLARE SECTION;

Exec 윈 토토 Fetch 5 MyCursor에서 윈 토토 디스크립터 MyDesc로 향합니다.

Exec 윈 토토 GET DESCRICTOR MYDESC 값 1 : ID = DATA;

33.9.2. 윈 토토DA 디스크립터 영역

윈 토토DA 디스크립터 영역은 C 언어 구조입니다. 또한 쿼리의 결과 세트와 메타 데이터를 얻는 데 사용됩니다. 하나의 구조는 결과 세트에서 한 레코드를 저장합니다.

exec sql 포함 sqlda.h;
sqlda_t *mysqlda;

MyCursor에서 디스크립터 My윈 토토DA로의 Exec 윈 토토 Fetch 3;

윈 토토키워드입니다 생략. 의 사용 사례에 대한 단락inand사용키워드 안에섹션 33.9.1추가로 여기에 적용하십시오. 에서설명진술디스크립터키워드를 완전히 생략 할 수 있습니다 그만큼in키워드가 사용됩니다 :

exec 윈 토토 repected_statement in mysqlda;

윈 토토DA의 구조는 다음과 같습니다.

#Define NamedAtalen 64

struct 윈 토토name

        짧은 길이;
        char 데이터 [이름 지정];
;

struct 윈 토토var_struct

        짧은 sqltype;
        짧은 윈 토토len;
        char *윈 토토data;
        짧은 *sqlind;
        struct 윈 토토name 윈 토토name;
;

struct sqlda_struct

        char sqldaid [8];
        긴 sqldabc;
        짧은 sqln;
        짧은 윈 토토D;
        struct sqlda_struct *desc_next;
        struct 윈 토토var_struct 윈 토토var [1];
;

typedef struct 윈 토토var_struct 윈 토토var_t;
typedef struct sqlda_struct sqlda_t;

윈 토토DA 구조에 대한 할당 된 데이터는 가변적입니다. 결과 세트의 필드 수와 또한 레코드의 문자열 데이터 값의 길이에 따라 다릅니다. 의 개별 분야윈 토토DA구조는 다음과 같습니다.

윈 토토DAID

"가 포함되어 있습니다.윈 토토DA" 문자 그대로.

윈 토토DABC

할당 된 공간의 크기가 포함되어 있습니다 바이트.

윈 토토N

a Parametrized Query Case가 전달되었습니다Open, 선언또는execute사용키워드. 사용되는 경우 의 출력으로select, execute또는fetch진술, 그 값은와 동일합니다윈 토토D진술

윈 토토D

결과 세트에 필드 수가 포함되어 있습니다.

desc_next

쿼리가 둘 이상의 레코드를 반환하는 경우, 다중 연결된 윈 토토DA 구조가 반환되고desc_next다음에 대한 포인터를 보유합니다 목록의 항목.

윈 토토var

결과 세트의 필드 배열입니다. 그만큼 필드는 다음과 같습니다.

윈 토토TYPE

필드의 유형 식별자가 포함되어 있습니다. 값은 참조ENUM ecpgttypeinecpgtype.h.

윈 토토len

필드의 이진 길이가 포함되어 있습니다. 예를 들어 4 바이트ecpgt_int.

윈 토토data

(char *) 윈 토토data포인트 데이터에.

sqlind

(char *) sqlind포인트 데이터의 널 표시기에. 0은 null이 아닌 것을 의미합니다. -1은 null을 의미합니다.

윈 토토name

Struct 윈 토토Name 윈 토토Name구조에 필드 이름을 포함합니다.

struct 윈 토토name

        짧은 길이;
        char 데이터 [이름 지정];
;
길이

윈 토토name.length필드 이름의 길이를 포함합니다.

데이터

윈 토토name.data실제 필드 이름을 포함합니다.