Postgresql 9.0.23 문서화 | ||||
---|---|---|---|---|
롤 토토 PostgreSQL : 문서 : 9.0 : PGTYPES 라이브러리 | 토토 : 문서 : 9.0 : ECPG- C에 포함 된 SQL | 33 장ECPG- 임베디드윈 토토in c | 다음 |
윈 토토 디스크립터 영역은보다 정교한 방법입니다. a의 결과 처리select, fetch또는 A설명진술. 윈 토토 디스크립터 영역 그룹 메타 데이터 항목과 함께 한 줄의 데이터 데이터를 하나로 데이터 구조. 메타 데이터는 특히 유용합니다 결과의 특성이있는 동적 윈 토토 문장 실행 열은 미리 알려지지 않을 수 있습니다. Postgre윈 토토은 두 가지를 제공합니다 설명자 영역을 사용하는 방법 : 명명 된 윈 토토 디스크립터 영역 및 c- 구조 sqldas.
이름 지정된 윈 토토 디스크립터 영역은 헤더로 구성됩니다. 전체 설명자에 관한 정보와 하나에 대한 정보가 포함되어 있습니다 또는 기본적으로 각각 설명하는 항목 설명자 영역 결과 행의 한 열.
윈 토토 디스크립터 영역을 사용하기 전에 하나를 할당하십시오 :
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문자 그대로의 정수가 될 수 있습니다 또는 정수를 포함하는 호스트 변수. 가능한 필드 이다:
결과 세트의 행 수
실제 데이터 항목 (따라서 데이터 유형) 필드는 쿼리에 따라 다릅니다)
?
구현되지 않음
표시기 (널 값 또는 값을 나타냅니다 잘림)
구현되지 않음
캐릭터의 데이텀 길이
열 이름
구현되지 않음
데이텀의 문자 표현의 길이 바이트
정밀도 (유형숫자)
문자의 데이텀 길이
데이텀의 문자 표현 길이 바이트
스케일 (유형 용숫자)
열의 데이터 유형의 숫자 코드
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;
윈 토토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구조는 다음과 같습니다.
"가 포함되어 있습니다.윈 토토DA" 문자 그대로.
할당 된 공간의 크기가 포함되어 있습니다 바이트.
a Parametrized Query Case가 전달되었습니다Open, 선언또는execute사용키워드. 사용되는 경우 의 출력으로select, execute또는fetch진술, 그 값은와 동일합니다윈 토토D진술
결과 세트에 필드 수가 포함되어 있습니다.
쿼리가 둘 이상의 레코드를 반환하는 경우, 다중 연결된 윈 토토DA 구조가 반환되고desc_next다음에 대한 포인터를 보유합니다 목록의 항목.
결과 세트의 필드 배열입니다. 그만큼 필드는 다음과 같습니다.
필드의 유형 식별자가 포함되어 있습니다. 값은 참조ENUM ecpgttypeinecpgtype.h.
필드의 이진 길이가 포함되어 있습니다. 예를 들어 4 바이트ecpgt_int.
(char *) 윈 토토data포인트 데이터에.
(char *) sqlind포인트 데이터의 널 표시기에. 0은 null이 아닌 것을 의미합니다. -1은 null을 의미합니다.
Struct 윈 토토Name 윈 토토Name구조에 필드 이름을 포함합니다.
struct 윈 토토name 짧은 길이; char 데이터 [이름 지정]; ;
윈 토토name.length필드 이름의 길이를 포함합니다.
윈 토토name.data실제 필드 이름을 포함합니다.