토토 꽁 머니 디스크립터 영역은 A의 결과를 처리하는보다 정교한 방법입니다select
, fetch
또는 A설명
진술. 토토 꽁 머니 디스크립터 영역은 메타 데이터 항목과 함께 한 행의 데이터 데이터를 하나의 데이터 구조로 그룹화합니다. 메타 데이터는 결과 열의 특성을 미리 알 수없는 동적 토토 꽁 머니 문을 실행할 때 특히 유용합니다. Postgre토토 꽁 머니은 디스크립터 영역을 사용하는 두 가지 방법을 제공합니다 : 명명 된 토토 꽁 머니 디스크립터 영역과 C- 구조 토토 꽁 머니DAS.
이름 지정된 토토 꽁 머니 디스크립터 영역은 전체 설명자와 관련된 정보와 하나 이상의 항목 디스크립터 영역을 포함하는 헤더로 구성되어 있으며 기본적으로 각각 결과 행의 한 열을 설명합니다..
토토 꽁 머니 디스크립터 영역을 사용하기 전에 하나를 할당해야합니다.
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 디스크립터 영역을 생성합니다섹션 35.7.2.
in설명
및fetch
진술,in
and사용
키워드는 유사하게 사용될 수 있습니다. 디스크립터 영역에서 결과 세트와 메타 데이터를 생성합니다.
이제 디스크립터 영역에서 데이터를 어떻게 얻습니까? 디스크립터 영역을 필드 명명 된 구조로 생각할 수 있습니다. 헤더에서 필드 값을 검색하고 호스트 변수에 저장하려면 다음 명령을 사용하십시오..
Exec 토토 꽁 머니 Get Descriptor이름
:hostvar
=필드
;
현재, 헤더 필드가 하나만 정의되어 있습니다.count
, 이는 얼마나 많은 품목 디스크립터 영역이 존재하는지 알려줍니다 (즉, 결과에 얼마나 많은 열이 포함되어 있는지). 호스트 변수는 정수 유형이어야합니다. 항목 설명 자 영역에서 필드를 얻으려면 다음 명령을 사용하십시오.
Exec 토토 꽁 머니 GET DESCRICTOR이름
valueNum
:hostvar
=필드
;
Num
문자 그대로의 정수 또는 정수를 포함하는 호스트 변수 일 수 있습니다. 가능한 필드는 다음과 같습니다.
추기경
(정수)결과 세트의 행 수
데이터
실제 데이터 항목 (따라서이 필드의 데이터 유형은 쿼리에 따라 다름)
DateTime_interVal_code
(정수)언제타입
is9
, dateTime_interVal_code
값은입니다.1
for날짜
, 2
forTime
, 3
for타임 스탬프
, 4
for시간대가있는 시간
또는5
for시간대가있는 타임 스탬프
.
DateTime_interVal_Precision
(정수)구현되지 않음
표시기
(정수)표시기 (널 값 또는 값 자리를 나타내는)
key_member
(정수)구현되지 않음
길이
(정수)문자의 데이텀 길이
이름
(String)열 이름
nullable
(정수)구현되지 않음
Octet_length
(정수)바이트에서 데이텀의 문자 표현 길이
정밀
(정수)정밀도 (유형숫자
)
returned_length
(정수)캐릭터의 데이텀 길이
returned_octet_length
(정수)바이트에서 데이텀의 문자 표현 길이
스케일
(정수)스케일 (유형 용숫자
)
타입
(정수)열의 데이터 유형의 숫자 코드
inexecute
, 선언
andOpen
진술,의 효과in
and사용
키워드가 다릅니다. 디스크립터 영역은 쿼리 또는 커서의 입력 매개 변수를 제공하기 위해 수동으로 제작할 수 있습니다.토토 꽁 머니 디스크립터 사용
는 입력 매개 변수를 매개 변수화 쿼리로 전달하는 방법입니다. 이름이 지정된 토토 꽁 머니 디스크립터 영역을 구축하려는 진술은 다음과 같습니다.이름
exec 토토 꽁 머니 세트 디스크립터이름
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;
토토 꽁 머니
키워드가 생략되었습니다. 의 사용 사례에 대한 단락in
and사용
키워드섹션 35.7.1추가로 여기에 적용하십시오. 에서설명
진술디스크립터
이면 키워드를 완전히 생략 할 수 있습니다into
키워드가 사용됩니다 :
exec 토토 꽁 머니 repection_statement inciqlda;
토토 꽁 머니DA를 사용하는 프로그램의 일반적인 흐름은 다음과 같습니다.
쿼리 준비하고 커서를 선언합니다.
결과 행에 대한 토토 꽁 머니DA를 선언합니다.
입력 매개 변수에 대한 토토 꽁 머니DA를 선언하고 초기화 (메모리 할당, 매개 변수 설정)..
입력 토토 꽁 머니DA로 커서를 엽니 다.
커서에서 행을 가져 와서 출력 토토 꽁 머니DA에 저장합니다.
출력 토토 꽁 머니DA에서 호스트 변수로 값을 읽으십시오 (필요한 경우 변환)
커서를 닫습니다.
입력 토토 꽁 머니DA에 할당 된 메모리 영역을 제거합니다.
토토 꽁 머니DA는 세 가지 데이터 구조 유형을 사용합니다.토토 꽁 머니DA_T
, 토토 꽁 머니var_t
및struct 토토 꽁 머니name
.
Postgre토토 꽁 머니의 토토 꽁 머니DA는 IBM DB2 범용 데이터베이스와 유사한 데이터 구조를 가지고 있으므로 DB2의 토토 꽁 머니DA에 대한 일부 기술 정보는 Postgre토토 꽁 머니의 더 나은 이해에 도움이 될 수 있습니다..
구조 유형토토 꽁 머니DA_T
는 실제 토토 꽁 머니DA의 유형입니다. 하나의 레코드를 보유하고 있습니다. 그리고 둘 이상의토토 꽁 머니DA_T
구조는 링크 된 목록에 링크 된 목록에 연결할 수 있습니다desc_next
필드, 따라서 순서대로 행하는 행을 나타냅니다. 따라서 두 개 이상의 행을 가져 오면 응용 프로그램은를 따라 읽을 수 있습니다.desc_next
각각의 포인터토토 꽁 머니DA_T
노드.
의 정의토토 꽁 머니DA_T
IS :
struct sqlda_struct char 토토 꽁 머니daid [8]; 긴 sqldabc; 짧은 sqln; 짧은 토토 꽁 머니D; struct sqlda_struct *desc_next; struct 토토 꽁 머니var_struct 토토 꽁 머니var [1]; ; typedef struct sqlda_struct sqlda_t;
필드의 의미는 다음과 같습니다.
토토 꽁 머니daid
문자 그대로 문자열이 포함되어 있습니다"토토 꽁 머니DA"
.
토토 꽁 머니DABC
할당 된 공간의 크기가 바이트의 크기를 포함합니다.
토토 꽁 머니N
전달 된 경우 매개 변수화 된 쿼리의 입력 매개 변수 수가 포함되어 있습니다.Open
, 선언
또는execute
사용
키워드. 의 출력으로 사용되는 경우select
, execute
또는fetch
진술, 그 값은와 동일합니다토토 꽁 머니D
진술
토토 꽁 머니D
결과 세트에 필드 수가 포함되어 있습니다.
desc_next
쿼리가 둘 이상의 레코드를 반환하면 여러 개의 링크 된 토토 꽁 머니DA 구조가 반환되고desc_next
목록의 다음 항목에 대한 포인터를 보유합니다.
토토 꽁 머니var
결과 세트의 열의 배열입니다.
구조 유형토토 꽁 머니var_t
유형 및 길이와 같은 열 값과 메타 데이터를 보유합니다. 유형의 정의는 다음과 같습니다.
struct 토토 꽁 머니var_struct 짧은 sqltype; 짧은 토토 꽁 머니len; char *토토 꽁 머니data; 짧은 *sqlind; struct 토토 꽁 머니name 토토 꽁 머니name; ; typedef struct 토토 꽁 머니var_struct 토토 꽁 머니var_t;
필드의 의미는 다음과 같습니다.
토토 꽁 머니TYPE
필드의 유형 식별자를 포함합니다. 값은 참조enum ecpgttype
inecpgtype.h
.
토토 꽁 머니len
필드의 이진 길이를 포함합니다. 예를 들어, 4 바이트ecpgt_int
.
토토 꽁 머니data
데이터를 가리 킵니다. 데이터 형식은에 설명되어 있습니다.섹션 35.4.4.
sqlind
널 표시기를 가리 킵니다. 0은 null을 의미하지 않으며 -1은 null을 의미합니다.
토토 꽁 머니name
필드의 이름.
astruct 토토 꽁 머니name
구조는 열 이름을 보유합니다. 그것은의 멤버로 사용됩니다.토토 꽁 머니var_t
구조. 구조의 정의는 다음과 같습니다.
#Define NamedAtalen 64 struct 토토 꽁 머니name 짧은 길이; char 데이터 [이름 지정]; ;
필드의 의미는 다음과 같습니다.
길이
필드 이름의 길이를 포함합니다.
데이터
실제 필드 이름을 포함합니다.
토토 꽁 머니DA를 통해 설정된 쿼리 결과를 검색하는 일반 단계는 다음과 같습니다.
선언토토 꽁 머니DA_T
결과 세트를 수신 할 구조.
executeFetch
/execute
/설명
선언 된 토토 꽁 머니DA를 지정하는 쿼리를 처리하는 명령.
보고하여 설정 한 결과의 레코드 수 확인토토 꽁 머니N
, 회원토토 꽁 머니DA_T
구조.
각 열의 값을 얻으십시오토토 꽁 머니VAR [0]
, 토토 꽁 머니VAR [1]
등,토토 꽁 머니DA_T
구조.
다음 행으로 이동 (토토 꽁 머니DA_T
구조)에 따른desc_next
포인터,토토 꽁 머니DA_T
구조.
필요에 따라 위에서 반복하십시오.
토토 꽁 머니DA를 통해 세트를 검색하는 예입니다.
먼저, a 선언토토 꽁 머니DA_T
결과 세트를 수신 할 구조.
토토 꽁 머니da_t *토토 꽁 머니da1;
다음, 명령에 토토 꽁 머니da를 지정하십시오. 이것은입니다.fetch
명령 예제.
exec 토토 꽁 머니 exect sql exect cur1에서 디스크립터 sqlda1;
링크 된 목록을 따라 루프를 실행하여 행을 검색합니다.
sqlda_t *cur_sqlda; for (cur_sqlda = sqlda1; cur_sqlda! = null; cur_sqlda = cur_sqlda- desc_next) ...
루프 내부에서 다른 루프를 실행하여 각 열 데이터를 검색합니다 (토토 꽁 머니var_t
구조) 행의.
for (i = 0; i <cur_sqlda- sqld; i ++) 토토 꽁 머니var_t v = cur_sqlda- 토토 꽁 머니var [i]; char *토토 꽁 머니data = v.토토 꽁 머니data; 짧은 토토 꽁 머니len = v.토토 꽁 머니len; ...
열 값을 얻으려면를 확인하십시오.토토 꽁 머니TYPE
value, 회원토토 꽁 머니var_t
구조. 그런 다음 열 유형에 따라 적절한 방법으로 전환하여에서 데이터를 복사하십시오.토토 꽁 머니var
호스트 변수에 필드
char var_buf [1024]; 스위치 (v.토토 꽁 머니type) CASE ECPGT_CHAR : memset (& var_buf, 0, sizeof (var_buf)); memcpy (& var_buf, 토토 꽁 머니data, (sizeof (var_buf) <= 토토 꽁 머니len? sizeof (var_buf) -1 : 토토 꽁 머니len)); 부서지다; case ecpgt_int : / * 정수 * / memcpy (& intval, 토토 꽁 머니data, 토토 꽁 머니len); snprintf (var_buf, sizeof (var_buf), "%d", intval); 부서지다; ...
토토 꽁 머니DA를 사용하여 입력 매개 변수를 준비한 쿼리에 전달하는 일반 단계는 다음과 같습니다.
준비된 쿼리 생성 (준비 문)
토토 꽁 머니DA_T 구조를 입력 토토 꽁 머니DA로 선언합니다.
입력 토토 꽁 머니DA에 대한 메모리 영역 (토토 꽁 머니DA_T 구조) 할당.
할당 된 메모리에서 입력 값을 설정합니다.
입력 토토 꽁 머니DA를 지정하여 커서를 엽니 다.
여기 예입니다.
먼저 준비된 진술을 작성하십시오.
exec 토토 꽁 머니 시작 선언 섹션; char query [1024] = "pg_database d, pg_stat_database s에서 d.oid = s.datid 및 (d.datname =? 또는 d.oid =?)"; Exec 토토 꽁 머니 END DELLARE SECTION; EXEC 토토 꽁 머니 STMT1 준비 : 쿼리;
다음, 토토 꽁 머니DA에 대한 메모리를 할당하고 입력 매개 변수 수를 설정합니다토토 꽁 머니N
,의 멤버 변수토토 꽁 머니DA_T
구조. 준비된 쿼리에 둘 이상의 입력 매개 변수가 필요한 경우, 응용 프로그램은 (nr. of params -1) * sizeof (토토 꽁 머니var_t)에 의해 계산되는 추가 메모리 공간을 할당해야합니다. 여기에 표시된 예제는 두 개의 입력 매개 변수에 대한 메모리 공간을 할당합니다.
토토 꽁 머니DA_T *토토 꽁 머니DA2; sqlda2 = (sqlda_t *) malloc (sizeof (sqlda_t) + sizeof (토토 꽁 머니var_t)); memset (sqlda2, 0, sizeof (sqlda_t) + sizeof (토토 꽁 머니var_t)); sqlda2- sqln = 2; / * 입력 변수 수 */
메모리 할당 후 매개 변수 값을에 저장하십시오.토토 꽁 머니var []
배열. (이것은 토토 꽁 머니DA가 결과 세트를 수신 할 때 열 값을 검색하는 데 사용되는 것과 동일합니다.)이 예에서는 입력 매개 변수가입니다."Postgres"
, 문자열 유형이 있고1
, 정수 유형이 있습니다.
sqlda2- 토토 꽁 머니var [0] .sqltype = ecpgt_char; sqlda2- 토토 꽁 머니var [0] .토토 꽁 머니data = "postgres"; sqlda2- 토토 꽁 머니var [0] .토토 꽁 머니len = 8; int intval = 1; sqlda2- 토토 꽁 머니var [1] .sqltype = ecpgt_int; sqlda2- 토토 꽁 머니var [1] .토토 꽁 머니data = (char *) & intval; sqlda2- 토토 꽁 머니var [1] .토토 꽁 머니len = sizeof (intval);
커서를 열고 미리 설정된 토토 꽁 머니DA를 지정하여 입력 매개 변수가 준비된 명령문으로 전달됩니다..
exec sql descriptor sqlda2를 사용하여 CUR1 OPEN CUR1;
마지막으로, 입력 토토 꽁 머니DAS를 사용한 후에 할당 된 메모리 공간은 쿼리 결과를 수신하는 데 사용되는 토토 꽁 머니DA와 달리 명시 적으로 해제되어야합니다..
free (토토 꽁 머니da2);
여기에 시스템 카탈로그에서 입력 매개 변수로 지정된 데이터베이스의 액세스 통계를 가져 오는 방법을 설명하는 예제 프로그램이 있습니다..
이 응용 프로그램은 데이터베이스 OID의 PG_DATABASE 및 PG_STAT_DATABASE의 두 시스템 테이블에 합류하며 두 개의 입력 매개 변수 (A Database에 의해 검색되는 데이터베이스 통계를 가져오고 표시합니다.Postgres
및 OID1
).
먼저 입력에 대한 토토 꽁 머니DA를 선언하고 출력을위한 토토 꽁 머니DA를 선언합니다.
exec sql 포함 sqlda.h; 토토 꽁 머니da_t *토토 꽁 머니da1; / * 출력 설명 자 */ sqlda_t *sqlda2; / * 입력 설명 자 */
다음으로, 다음, 데이터베이스에 연결하고, 진술을 준비하고, 준비된 진술에 대한 커서를 선언합니다.
int 메인 (void) Exec 토토 꽁 머니 시작 선언 섹션; char query [1024] = "pg_database d, pg_stat_database s에서 d.oid = s.datid 및 (d.datname =? 또는 d.oid =?)"; Exec 토토 꽁 머니 END DELLARE SECTION; EXEC 토토 꽁 머니 TestDB에 CON1 사용자 테스트를 사용합니다. Exec 토토 꽁 머니 선택 PG_CATALOG.SET_CONFIG ( 'search_Path', '', False); Exec 토토 꽁 머니 커밋; Exec 토토 꽁 머니 STMT1 준비 : 쿼리; EXEC 토토 꽁 머니 STMT1에 대한 CUR1 커서 선언;
다음, 입력 매개 변수에 대한 입력 토토 꽁 머니DA에 값을 넣으십시오. 입력 토토 꽁 머니DA에 대한 메모리를 할당하고 입력 매개 변수 수를로 설정하십시오.토토 꽁 머니N
. 상점 유형, 값 및 가치 길이로토토 꽁 머니TYPE
, 토토 꽁 머니DATA
및토토 꽁 머니len
in토토 꽁 머니var
구조.
/* 입력 매개 변수에 대한 토토 꽁 머니DA 구조를 만듭니다. */ sqlda2 = (sqlda_t *) malloc (sizeof (sqlda_t) + sizeof (토토 꽁 머니var_t)); memset (sqlda2, 0, sizeof (sqlda_t) + sizeof (토토 꽁 머니var_t)); sqlda2- sqln = 2; / * 입력 변수 수 */ sqlda2- 토토 꽁 머니var [0] .sqltype = ecpgt_char; sqlda2- 토토 꽁 머니var [0] .토토 꽁 머니data = "postgres"; sqlda2- 토토 꽁 머니var [0] .토토 꽁 머니len = 8; intval = 1; sqlda2- 토토 꽁 머니var [1] .sqltype = ecpgt_int; sqlda2- 토토 꽁 머니var [1] .토토 꽁 머니data = (char *) & intval; sqlda2- 토토 꽁 머니var [1] .토토 꽁 머니len = sizeof (intval);
입력 토토 꽁 머니DA를 설정 한 후 입력 토토 꽁 머니DA로 커서를 엽니 다.
/* 입력 매개 변수가있는 커서를 엽니 다. */ 디스크립터 sqlda2;를 사용하여 Exec 토토 꽁 머니 Open CUR1
열린 커서에서 출력 토토 꽁 머니DA로 행을 가져옵니다. (일반적으로 전화해야Fetch
루프에서 반복적으로 결과 세트에서 모든 행을 가져 오기 위해.)
while (1) sqlda_t *cur_sqlda; / * 디스크립터 할당 커서 */ exec 토토 꽁 머니이 CUR1에서 디스크립터 토토 꽁 머니DA1로 가져옵니다.
다음, 링크 된 링크 목록을 따라 토토 꽁 머니DA에서 가져온 레코드를 검색토토 꽁 머니DA_T
구조.
for (cur_sqlda = sqlda1; cur_sqlda! = null; cur_sqlda = cur_sqlda- desc_next) ...
첫 번째 레코드에서 각 열을 읽으십시오. 열 수는에 저장됩니다.토토 꽁 머니D
, 첫 번째 열의 실제 데이터는에 저장됩니다.토토 꽁 머니VAR [0]
, 두 멤버토토 꽁 머니DA_T
구조.
/* 모든 열을 연속으로 인쇄하십시오. */ for (i = 0; i <sqlda1- sqld; i ++) 토토 꽁 머니var_t v = sqlda1- 토토 꽁 머니var [i]; char *토토 꽁 머니data = v.토토 꽁 머니data; 짧은 토토 꽁 머니len = v.토토 꽁 머니len; strncpy (name_buf, v.토토 꽁 머니name.data, v.토토 꽁 머니name.length); name_buf [v.토토 꽁 머니name.length] = '\ 0';
이제 열 데이터가 변수에 저장됩니다V
. 모든 데이텀을 호스트 변수로 복사하여v.토토 꽁 머니type
열의 유형의 경우
스위치 (v.토토 꽁 머니type) int intval; 더블 볼; 서명되지 않은 긴 긴 int longlongval; CASE ECPGT_CHAR : memset (& var_buf, 0, sizeof (var_buf)); memcpy (& var_buf, 토토 꽁 머니data, (sizeof (var_buf) <= 토토 꽁 머니len? sizeof (var_buf) -1 : 토토 꽁 머니len)); 부서지다; case ecpgt_int : / * 정수 * / memcpy (& intval, 토토 꽁 머니data, 토토 꽁 머니len); snprintf (var_buf, sizeof (var_buf), "%d", intval); 부서지다; ... 기본: ... printf ( " %s = %s (유형 : %d) \ n", name_buf, var_buf, v.토토 꽁 머니type);
모든 레코드를 처리 한 후 커서를 닫고 데이터베이스와 연결을 끊습니다.
Exec 토토 꽁 머니 COR1; Exec 토토 꽁 머니 커밋; EXEC 토토 꽁 머니 모든 분리;
전체 프로그램이에 표시됩니다.예 35.1.
예 35.1. 예제 토토 꽁 머니DA 프로그램
#include <stdlib.h #include <string.h #include <stdlib.h #include <stdio.h #include <unistd.h exec sql은 sqlda.h; 토토 꽁 머니da_t *토토 꽁 머니da1; / * 출력에 대한 설명자 */ sqlda_t *sqlda2; / * 입력에 대한 설명자 */ 찾을 수 없을 때마다 Exec 토토 꽁 머니이 중단됩니다. 토토 꽁 머니ERROR가 중지 될 때마다 토토 꽁 머니 EXEC; int 메인 (void) Exec 토토 꽁 머니 시작 선언 섹션; char query [1024] = "pg_database d, pg_stat_database s에서 d.oid = s.datid 및 (d.datname =? 또는 d.oid =?)"; int intval; 서명되지 않은 긴 긴 int longlongval; Exec 토토 꽁 머니 END DELLARE SECTION; EXEC 토토 꽁 머니 CON1 사용자 가동 시간으로 UptimedB에 연결합니다. Exec 토토 꽁 머니 선택 PG_CATALOG.SET_CONFIG ( 'search_Path', '', False); Exec 토토 꽁 머니 커밋; Exec 토토 꽁 머니 STMT1 준비 : 쿼리; STMT1에 대한 EXEC 토토 꽁 머니 선언 CUR1 커서; / * 입력 매개 변수에 대한 토토 꽁 머니DA 구조 생성 */ sqlda2 = (sqlda_t *) malloc (sizeof (sqlda_t) + sizeof (토토 꽁 머니var_t)); memset (sqlda2, 0, sizeof (sqlda_t) + sizeof (토토 꽁 머니var_t)); sqlda2- sqln = 2; / * 여러 입력 변수 */ sqlda2- 토토 꽁 머니var [0] .sqltype = ecpgt_char; sqlda2- 토토 꽁 머니var [0] .토토 꽁 머니data = "postgres"; sqlda2- 토토 꽁 머니var [0] .토토 꽁 머니len = 8; intval = 1; sqlda2- 토토 꽁 머니var [1] .sqltype = ecpgt_int; sqlda2- 토토 꽁 머니var [1] .토토 꽁 머니data = (char *) & intval; sqlda2- 토토 꽁 머니var [1] .토토 꽁 머니len = sizeof (intval); /* 입력 매개 변수가있는 커서를 엽니 다. */ 디스크립터 토토 꽁 머니DA2를 사용하여 EXEC 토토 꽁 머니 OPEN CUR1; 동안 (1) sqlda_t *cur_sqlda; / * 디스크립터 할당 커서 */ exec 토토 꽁 머니은 다음에 cur1에서 디스크립터 sqlda1로 가져옵니다. for (cur_sqlda = sqlda1; cur_sqlda! = null; cur_sqlda = cur_sqlda- desc_next) int i; char name_buf [1024]; char var_buf [1024]; /* 모든 열을 연속으로 인쇄합니다. */ for (i = 0; i <cur_sqlda- sqld; i ++) 토토 꽁 머니var_t v = cur_sqlda- 토토 꽁 머니var [i]; char *토토 꽁 머니data = v.토토 꽁 머니data; 짧은 토토 꽁 머니len = v.토토 꽁 머니len; strncpy (name_buf, v.토토 꽁 머니name.data, v.토토 꽁 머니name.length); name_buf [v.토토 꽁 머니name.length] = '\ 0'; 스위치 (v.토토 꽁 머니type) CASE ECPGT_CHAR : memset (& var_buf, 0, sizeof (var_buf)); memcpy (& var_buf, 토토 꽁 머니data, (sizeof (var_buf) <= 토토 꽁 머니len? sizeof (var_buf) -1 : 토토 꽁 머니len)); 부서지다; case ecpgt_int : / * 정수 * / memcpy (& intval, 토토 꽁 머니data, 토토 꽁 머니len); snprintf (var_buf, sizeof (var_buf), "%d", intval); 부서지다; CASE ECPGT_LONG_LONG : / * BIGINT * / memcpy (& longlongval, 토토 꽁 머니data, 토토 꽁 머니len); snprintf (var_buf, sizeof (var_buf), "%lld", longlongval); 부서지다; 기본: int i; memset (var_buf, 0, sizeof (var_buf)); for (i = 0; i <토토 꽁 머니len; i ++) char tmpbuf [16]; snprintf (tmpbuf, sizeof (tmpbuf), "%02x", (서명 된 char) 토토 꽁 머니data [i]); strncat (var_buf, tmpbuf, sizeof (var_buf)); 부서지다; printf ( " %s = %s (유형 : %d) \ n", name_buf, var_buf, v.토토 꽁 머니type); printf ( "\ n"); Exec 토토 꽁 머니 COR1; Exec 토토 꽁 머니 커밋; Exec 토토 꽁 머니 모든 분리; 반환 0;
이 예제의 출력은 다음과 같은 것으로 보일 것입니다 (일부 숫자는 다릅니다).
OID = 1 (유형 : 1) datname = template1 (유형 : 1) datdba = 10 (유형 : 1) 인코딩 = 0 (유형 : 5) datistemplate = t (유형 : 1) datallowconn = t (유형 : 1) datconnlimit = -1 (유형 : 5) datlastsysoid = 11510 (유형 : 1) datfrozenxid = 379 (유형 : 1) dattablespace = 1663 (유형 : 1) datconfig = (유형 : 1) dataCl = = c/Upime, Uptime = CTC/Uptime (유형 : 1) datid = 1 (유형 : 1) datname = template1 (유형 : 1) Numbackends = 0 (유형 : 5) xact_commit = 113606 (유형 : 9) xact_rollback = 0 (유형 : 9) blks_read = 130 (유형 : 9) blks_hit = 7341714 (유형 : 9) tup_returned = 38262679 (유형 : 9) tup_fetched = 1836281 (유형 : 9) tup_inserted = 0 (유형 : 9) tup_updated = 0 (유형 : 9) tup_deleted = 0 (유형 : 9) OID = 11511 (유형 : 1) datname = postgres (유형 : 1) datdba = 10 (유형 : 1) 인코딩 = 0 (유형 : 5) datistemplate = f (유형 : 1) datallowconn = t (유형 : 1) datconnlimit = -1 (유형 : 5) datlastsysoid = 11510 (유형 : 1) datfrozenxid = 379 (유형 : 1) dattablespace = 1663 (유형 : 1) datconfig = (유형 : 1) dataCl = (유형 : 1) datid = 11511 (유형 : 1) datname = postgres (유형 : 1) Numbackends = 0 (유형 : 5) xact_commit = 221069 (유형 : 9) xact_rollback = 18 (유형 : 9) blks_read = 1176 (유형 : 9) blks_hit = 13943750 (유형 : 9) tup_returned = 77410091 (유형 : 9) tup_fetched = 3253694 (유형 : 9) tup_inserted = 0 (유형 : 9) tup_updated = 0 (유형 : 9) tup_deleted = 0 (유형 : 9)
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면