| 젠 토토 : 문서 : 9.6 : 젠 토토 | |||
|---|---|---|---|
| 스포츠 토토 결과 PostgreSQL : 문서 : 9.6 : PgTypes 라이브러리 | 사설 토토 사이트 : 문서 : 9.6 : ECPG- C에 포함 된 SQL | 34장.ECPG- 임베디드윈 토토C에서 | 다음 |
윈 토토 설명자 영역은 다음의 결과를 처리하기 위한 보다 정교한 방법입니다.선택, 가져오기또는설명문. 윈 토토 설명자 영역은 한 데이터 행의 데이터를 메타데이터 항목과 함께 하나의 데이터 구조로 그룹화합니다. 메타데이터는 결과 열의 특성을 미리 알 수 없는 동적 윈 토토 문을 실행할 때 특히 유용합니다. Postgre윈 토토은 설명자 영역을 사용하는 두 가지 방법, 즉 명명된 윈 토토 설명자 영역과 C 구조 윈 토토DA를 제공합니다.
명명된 윈 토토 설명자 영역은 전체 설명자에 관한 정보를 포함하는 헤더와 기본적으로 각각 결과 행의 한 열을 설명하는 하나 이상의 항목 설명자 영역으로 구성됩니다.
윈 토토 설명자 영역을 사용하기 전에 하나를 할당해야 합니다:
EXEC 윈 토토 할당 설명자식별자;
식별자는 다음 역할을 합니다."변수 이름"11484_11580
EXEC 윈 토토 할당 해제 설명자식별자;
설명자 영역을 사용하려면 해당 영역을 저장 대상으로 지정하십시오.INTO절, 호스트 변수 나열 대신:
EXEC 윈 토토 FETCH NEXT FROM FROM FROM FROM INTO 윈 토토 DESCRIPTOR mydesc;
결과 세트가 비어 있으면 설명자 영역에는 쿼리의 메타데이터, 즉 필드 이름이 계속 포함됩니다.
아직 실행되지 않은 준비된 쿼리의 경우,설명문을 사용하여 결과 집합의 메타데이터를 가져올 수 있습니다.
EXEC 윈 토토 시작 선언 섹션; char *sql_stmt = "SELECT * FROM table1"; EXEC 윈 토토 END 선언 섹션; EXEC 윈 토토 PREPARE stmt1 FROM :sql_stmt; EXEC 윈 토토 DESCRIBE stmt1 INTO 윈 토토 DESCRIPTOR mydesc;
Postgre윈 토토 9.0 이전에는윈 토토키워드는 선택사항이므로 사용설명자그리고윈 토토 설명자이름이 지정된 윈 토토 설명자 영역이 생성되었습니다. 이제는 필수이며,을 생략합니다.윈 토토키워드는 윈 토토DA 설명자 영역을 생성합니다. 참조섹션 34.7.2.
에설명그리고가져오기문장, theINTO그리고사용 중키워드는 비슷한 용도로 사용될 수 있습니다. 즉, 설명자 영역에 결과 세트와 메타데이터를 생성합니다.
이제 설명자 영역에서 데이터를 어떻게 가져오나요? 설명자 영역은 명명된 필드가 있는 구조로 생각할 수 있습니다. 헤더에서 필드 값을 검색하여 호스트 변수에 저장하려면 다음 명령을 사용하십시오.
EXEC 윈 토토 GET 설명자이름 :hostvar = 필드;
현재 헤더 필드는 하나만 정의되어 있습니다:COUNT, 존재하는 항목 설명자 영역 수(즉, 결과에 포함된 열 수)를 알려줍니다. 호스트 변수는 정수 유형이어야 합니다. 항목 설명자 영역에서 필드를 가져오려면 다음 명령어를 사용하세요.
EXEC 윈 토토 GET 설명자이름값num :hostvar = 필드;
번호은 리터럴 정수이거나 정수를 포함하는 호스트 변수일 수 있습니다. 가능한 필드는 다음과 같습니다:
결과 집합의 행 수
실제 데이터 항목(따라서 이 필드의 데이터 유형은 쿼리에 따라 다름)
언제TYPEis9, DATETIME_INTERVAL_CODE값은1for날짜, 2for시간, 3for타임스탬프, 4for시간대 포함 시간또는5for시간대가 포함된 타임스탬프.
구현되지 않음
표시기(널 값 또는 값 잘림을 나타냄)
구현되지 않음
문자 단위의 데이텀 길이
열 이름
구현되지 않음
데이텀의 문자 표현 길이(바이트)
정밀도(유형용숫자)
문자 단위의 데이텀 길이
데이텀의 문자 표현 길이(바이트)
규모(유형용숫자)
컬럼의 데이터 유형에 대한 숫자 코드
에실행, 선언그리고열기문장, 효과INTO그리고사용 중키워드가 다릅니다. 쿼리나 커서에 대한 입력 매개변수를 제공하기 위해 설명자 영역을 수동으로 구축할 수도 있습니다.윈 토토 설명자 사용이름은 입력 매개변수를 매개변수화된 쿼리에 전달하는 방법입니다. 명명된 윈 토토 설명자 영역을 작성하는 명령문은 다음과 같습니다.
EXEC 윈 토토 세트 설명자이름값num 필드 = :hostvar;
Postgre윈 토토은 하나에서 둘 이상의 레코드 검색을 지원합니다.가져오기문을 작성하고 이 경우 호스트 변수에 데이터를 저장하는 것은 변수가 배열이라고 가정합니다. 예:
EXEC 윈 토토 시작 선언 섹션; 정수 아이디[5]; EXEC 윈 토토 END 선언 섹션; EXEC 윈 토토 FETCH 5 mycursor INTO 윈 토토 DESCRIPTOR mydesc; EXEC 윈 토토 GET 설명자 mydesc VALUE 1 :id = DATA;
윈 토토DA 설명자 영역은 쿼리의 결과 세트와 메타데이터를 가져오는 데에도 사용할 수 있는 C 언어 구조입니다. 하나의 구조는 결과 세트의 하나의 레코드를 저장합니다.
EXEC 윈 토토에는 윈 토토da.h가 포함됩니다. 윈 토토da_t *my윈 토토da; EXEC 윈 토토 FETCH 3을 mycursor에서 설명자 my윈 토토da로;
참고하세요윈 토토키워드가 생략되었습니다. 의 사용 사례에 대한 단락INTO그리고사용 중키워드섹션 34.7.1또한 여기에 추가로 적용됩니다. 에서설명진술하세요설명자다음과 같은 경우 키워드를 완전히 생략할 수 있습니다.INTO키워드가 사용되었습니다:
EXEC 윈 토토 DESCRIBE prepare_statement INTO my윈 토토da;
윈 토토DA를 사용하는 프로그램의 일반적인 흐름은 다음과 같습니다:
쿼리를 준비하고 이에 대한 커서를 선언하십시오.
결과 행에 대해 윈 토토DA를 선언하십시오.
입력 매개변수에 대한 윈 토토DA를 선언하고 초기화하십시오(메모리 할당, 매개변수 설정).
입력 윈 토토DA로 커서를 엽니다.
커서에서 행을 가져와서 출력 윈 토토DA에 저장합니다.
출력 윈 토토DA의 값을 호스트 변수로 읽습니다(필요한 경우 변환 포함).
커서를 닫으세요.
입력 윈 토토DA에 할당된 메모리 영역을 해제합니다.
윈 토토DA는 세 가지 데이터 구조 유형을 사용합니다.윈 토토da_t, 윈 토토var_t및구조체 윈 토토name.
팁:Postgre윈 토토의 윈 토토DA는 IBM DB2 Universal Database의 데이터 구조와 유사하므로 DB2의 윈 토토DA에 대한 일부 기술 정보는 Postgre윈 토토의 윈 토토DA를 더 잘 이해하는 데 도움이 될 수 있습니다.
구조 유형윈 토토da_t은 실제 윈 토토DA의 유형입니다. 하나의 기록을 보유하고 있습니다. 그리고 2개 이상윈 토토da_t구조체는 포인터를 사용하여 연결 리스트로 연결될 수 있습니다.desc_next필드로, 순서가 지정된 행 모음을 나타냅니다. 따라서 두 개 이상의 행을 가져오면 애플리케이션은 다음과 같이 해당 행을 읽을 수 있습니다.desc_next각각의 포인터윈 토토da_t노드.
의 정의윈 토토da_t다음과 같습니다:
구조체 윈 토토da_struct
char 윈 토토daid[8];
긴 윈 토토dabc;
짧은 윈 토토n;
짧은 윈 토토d;
구조체 윈 토토da_struct *desc_next;
구조체 윈 토토var_struct 윈 토토var[1];
;
typedef 구조체 윈 토토da_struct 윈 토토da_t;
필드의 의미는 다음과 같습니다:
리터럴 문자열이 포함되어 있습니다"윈 토토DA ".
할당된 공간의 크기를 바이트 단위로 담고 있습니다.
그것이 전달된 경우 매개변수화된 쿼리에 대한 입력 매개변수의 수를 포함합니다.열기, 선언또는실행다음을 사용하는 문사용 중키워드. 의 출력으로 사용되는 경우선택, 실행또는가져오기문, 그 값은 다음과 같습니다윈 토토d성명
결과 세트의 필드 수를 포함합니다.
쿼리가 하나 이상의 레코드를 반환하는 경우 여러 연결된 윈 토토DA 구조가 반환되며desc_next목록의 다음 항목에 대한 포인터를 보유합니다.
이것은 결과 집합의 열 배열입니다.
구조 유형윈 토토var_t열 값과 유형 및 길이와 같은 메타데이터를 보유합니다. 유형의 정의는 다음과 같습니다.
구조체 윈 토토var_struct
짧은 윈 토토type;
짧은 윈 토토len;
char *윈 토토data;
짧은 *sqlind;
구조체 윈 토토name 윈 토토name;
;
typedef struct 윈 토토var_struct 윈 토토var_t;
필드의 의미는 다음과 같습니다:
필드의 유형 식별자를 포함합니다. 값은 다음을 참조하세요.enum ECPGttypeinecpgtype.h.
필드의 바이너리 길이를 포함합니다. 예를 들어, 4바이트ECPGt_int.
데이터를 가리킵니다. 데이터 형식은에 설명되어 있습니다.섹션 34.4.4.
널 표시기를 가리킵니다. 0은 null이 아님을 의미하고, -1은 null을 의미합니다.
필드 이름.
A 구조체 윈 토토name구조에는 열 이름이 있습니다. 의 멤버로 사용됩니다.윈 토토var_t구조. 구조의 정의는 다음과 같습니다.
#define NAMEDATALEN 64
구조체 윈 토토 이름
짧은 길이;
문자 데이터[NAMEDATALEN];
;
필드의 의미는 다음과 같습니다:
필드 이름의 길이를 포함합니다.
실제 필드 이름이 포함되어 있습니다.
윈 토토DA를 통해 쿼리 결과 집합을 검색하는 일반적인 단계는 다음과 같습니다.
선언윈 토토da_t결과 세트를 수신하는 구조입니다.
실행가져오기/실행/설명선언된 윈 토토DA를 지정하는 쿼리를 처리하는 명령입니다.
다음을 보고 결과 세트의 레코드 수를 확인하십시오.윈 토토n,의 회원윈 토토da_t구조.
다음에서 각 열의 값을 가져옵니다.윈 토토var[0], 윈 토토var[1]등, 회원윈 토토da_t구조.
다음 행으로 이동(윈 토토da_t구조) 다음을 수행하여desc_next포인터, 구성원윈 토토da_t구조.
필요에 따라 위 내용을 반복하세요.
다음은 윈 토토DA를 통해 결과 집합을 검색하는 예입니다.
먼저, 선언하세요윈 토토da_t결과 세트를 수신하는 구조입니다.
윈 토토da_t *윈 토토da1;
다음으로, 명령에 윈 토토DA를 지정하세요. 이것은가져오기명령 예.
EXEC 윈 토토 FETCH NEXT FROM INTO DESCRIPTOR 윈 토토da1;
행을 검색하려면 연결된 목록을 따라 루프를 실행하세요.
윈 토토da_t *cur_윈 토토da;
(cur_윈 토토da = 윈 토토da1;
cur_윈 토토da != NULL;
cur_윈 토토da = cur_윈 토토da-desc_next)
...
루프 내에서 또 다른 루프를 실행하여 각 열 데이터를 검색합니다(윈 토토var_t구조) 행의 구조입니다.
for (i = 0; i < cur_윈 토토da-윈 토토d; i++)
윈 토토var_t v = cur_윈 토토da-윈 토토var[i];
char *윈 토토data = v.윈 토토data;
짧은 윈 토토len = v.윈 토토len;
...
열 값을 얻으려면 다음을 확인하세요.윈 토토type값, 구성원윈 토토var_t구조. 그런 다음 열 유형에 따라 적절한 방법으로 전환하여윈 토토var필드를 호스트 변수로 변환합니다.
char var_buf[1024];
스위치(v.윈 토토type)
사례 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] = "SELECT d.oid, * FROM pg_database d, pg_stat_database s WHERE d.oid = s.datid AND (d.datname = ? OR d.oid = ?)"; EXEC 윈 토토 END 선언 섹션; EXEC 윈 토토 PREPARE stmt1 FROM :query;
다음으로, 윈 토토DA에 메모리를 할당하고 입력 매개변수 수를 설정하십시오.윈 토토n,의 멤버 변수윈 토토da_t구조. 준비된 쿼리에 두 개 이상의 입력 매개변수가 필요한 경우 애플리케이션은 (매개변수 수 - 1) * sizeof(윈 토토var_t)로 계산된 추가 메모리 공간을 할당해야 합니다. 여기에 표시된 예에서는 두 개의 입력 매개변수에 대한 메모리 공간을 할당합니다.
윈 토토da_t *윈 토토da2; 윈 토토da2 = (윈 토토da_t *) malloc(sizeof(윈 토토da_t) + sizeof(윈 토토var_t)); memset(윈 토토da2, 0, sizeof(윈 토토da_t) + sizeof(윈 토토var_t)); 윈 토토da2-윈 토토n = 2; /* 입력 변수 개수 */
메모리 할당 후 매개변수 값을 다음 위치에 저장하세요.윈 토토var[]배열. (이는 윈 토토DA가 결과 세트를 수신할 때 열 값을 검색하는 데 사용되는 것과 동일한 배열입니다.) 이 예에서 입력 매개변수는 다음과 같습니다."포스트그레스", 문자열 유형을 가지며1, 정수 유형을 가집니다.
윈 토토da2-윈 토토var[0].윈 토토type = ECPGt_char; 윈 토토da2-윈 토토var[0].윈 토토data = "포스트그레스"; 윈 토토da2-윈 토토var[0].윈 토토len = 8; int intval = 1; 윈 토토da2-윈 토토var[1].윈 토토type = ECPGt_int; 윈 토토da2-윈 토토var[1].윈 토토data = (char *) &intval; 윈 토토da2-윈 토토var[1].윈 토토len = sizeof(intval);
커서를 열고 미리 설정된 윈 토토DA를 지정하면 입력 매개변수가 준비된 명령문으로 전달됩니다.
설명자 윈 토토da2를 사용하여 EXEC 윈 토토 OPEN cur1;
마지막으로, 입력 윈 토토DA를 사용한 후에는 쿼리 결과를 수신하는 데 사용되는 윈 토토DA와 달리 할당된 메모리 공간을 명시적으로 해제해야 합니다.
무료(윈 토토da2);
다음은 시스템 카탈로그에서 입력 매개변수로 지정된 데이터베이스의 액세스 통계를 가져오는 방법을 설명하는 예제 프로그램입니다.
이 응용 프로그램은 두 개의 시스템 테이블 pg_database 및 pg_stat_database를 데이터베이스 OID에 결합하고 두 개의 입력 매개변수(데이터베이스)로 검색된 데이터베이스 통계를 가져오고 표시합니다.포스트그레및 OID1).
먼저, 입력용 윈 토토DA와 출력용 윈 토토DA를 선언하세요.
EXEC 윈 토토에는 윈 토토da.h가 포함됩니다. 윈 토토da_t *윈 토토da1; /* 출력 설명자 */ 윈 토토da_t *윈 토토da2; /* 입력 설명자 */
다음으로, 데이터베이스에 연결하고 명령문을 준비하고 준비된 명령문에 대한 커서를 선언하십시오.
정수
메인(공허)
EXEC 윈 토토 시작 선언 섹션;
char query[1024] = "d.oid 선택,* pg_database d, pg_stat_database s WHERE d.oid=s.datid AND ( d.datname=? OR d.oid=? )";
EXEC 윈 토토 END 선언 섹션;
EXEC 윈 토토 CONNECT TO testdb AS con1 USER testuser;
EXEC 윈 토토 SELECT pg_catalog.set_config('search_path', '', false); EXEC 윈 토토 커밋;
EXEC 윈 토토 PREPARE stmt1 FROM :query;
EXEC 윈 토토 선언 cur1 stmt1에 대한 커서;
다음으로, 입력 매개변수에 대한 입력 윈 토토DA에 일부 값을 입력하십시오. 입력 윈 토토DA에 메모리를 할당하고 입력 매개변수 수를 다음과 같이 설정합니다.윈 토토n. 유형, 값 및 값 길이를 저장합니다.윈 토토type, 윈 토토data및윈 토토len에서윈 토토var구조.
/* 입력 매개변수에 대한 윈 토토DA 구조를 생성합니다. */
윈 토토da2 = (윈 토토da_t *) malloc(sizeof(윈 토토da_t) + sizeof(윈 토토var_t));
memset(윈 토토da2, 0, sizeof(윈 토토da_t) + sizeof(윈 토토var_t));
윈 토토da2-윈 토토n = 2; /* 입력 변수 개수 */
윈 토토da2-윈 토토var[0].윈 토토type = ECPGt_char;
윈 토토da2-윈 토토var[0].윈 토토data = "포스트그레스";
윈 토토da2-윈 토토var[0].윈 토토len = 8;
간격 = 1;
윈 토토da2-윈 토토var[1].윈 토토type = ECPGt_int;
윈 토토da2-윈 토토var[1].윈 토토data = (char *)&intval;
윈 토토da2-윈 토토var[1].윈 토토len = sizeof(intval);
입력 윈 토토DA를 설정한 후, 입력 윈 토토DA로 커서를 엽니다.
/* 입력 매개변수로 커서를 엽니다. */
설명자를 사용하여 EXEC 윈 토토 OPEN cur1 윈 토토da2;
열린 커서에서 출력 윈 토토DA로 행을 가져옵니다. (일반적으로 전화를 하셔야 합니다.)가져오기루프에서 반복적으로 결과 집합의 모든 행을 가져옵니다.)
동안 (1)
윈 토토da_t *cur_윈 토토da;
/* 커서에 설명자를 할당 */
EXEC 윈 토토은 cur1에서 설명자 윈 토토da1로 다음 항목을 가져옵니다.
다음으로, 연결된 목록을 따라 윈 토토DA에서 가져온 레코드를 검색하십시오.윈 토토da_t구조.
for (cur_윈 토토da = 윈 토토da1 ;
cur_윈 토토da != NULL ;
cur_윈 토토da = cur_윈 토토da-desc_next)
...
첫 번째 레코드의 각 열을 읽으세요. 열의 개수가 저장됩니다.윈 토토d, 첫 번째 열의 실제 데이터는에 저장됩니다.윈 토토var[0], 두 멤버 모두윈 토토da_t구조.
/* 행의 모든 열을 인쇄합니다. */
for (i = 0; i < 윈 토토da1-윈 토토d; i++)
윈 토토var_t v = 윈 토토da1-윈 토토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 간격;
이중 이중발;
부호 없는 long long int longlongval;
사례 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 윈 토토 CLOSE cur1;
EXEC 윈 토토 커밋;
EXEC 윈 토토 모두 연결 해제;
전체 프로그램은 다음에 표시됩니다.예 34-1.
예 34-1. 윈 토토DA 프로그램 예
#include <stdlib.h
#include <문자열.h
#include <stdlib.h
#include <stdio.h
#include <unistd.h
EXEC 윈 토토에는 윈 토토da.h가 포함됩니다.
윈 토토da_t *윈 토토da1; /* 출력 설명자 */
윈 토토da_t *윈 토토da2; /* 입력 설명자 */
EXEC 윈 토토을 찾을 수 없을 때 중단하십시오.
윈 토토ERROR가 중지될 때마다 EXEC 윈 토토;
정수
메인(공허)
EXEC 윈 토토 시작 선언 섹션;
char query[1024] = "d.oid 선택,* pg_database d, pg_stat_database s WHERE d.oid=s.datid AND ( d.datname=? OR d.oid=? )";
int 간격;
부호 없는 long long int longlongval;
EXEC 윈 토토 END 선언 섹션;
EXEC 윈 토토 CONNECT TO uptimedb AS con1 사용자 가동 시간;
EXEC 윈 토토 SELECT pg_catalog.set_config('search_path', '', false); EXEC 윈 토토 커밋;
EXEC 윈 토토 PREPARE stmt1 FROM :query;
EXEC 윈 토토 DECLARE cur1 stmt1에 대한 커서;
/* 입력 매개변수에 대한 윈 토토DA 구조 생성 */
윈 토토da2 = (윈 토토da_t *)malloc(sizeof(윈 토토da_t) + sizeof(윈 토토var_t));
memset(윈 토토da2, 0, sizeof(윈 토토da_t) + sizeof(윈 토토var_t));
윈 토토da2-윈 토토n = 2; /* 입력 변수의 개수 */
윈 토토da2-윈 토토var[0].윈 토토type = ECPGt_char;
윈 토토da2-윈 토토var[0].윈 토토data = "포스트그레스";
윈 토토da2-윈 토토var[0].윈 토토len = 8;
간격 = 1;
윈 토토da2-윈 토토var[1].윈 토토type = ECPGt_int;
윈 토토da2-윈 토토var[1].윈 토토data = (char *) &intval;
윈 토토da2-윈 토토var[1].윈 토토len = sizeof(intval);
/* 입력 매개변수로 커서를 엽니다. */
EXEC 윈 토토 OPEN cur1 설명자를 사용하여 윈 토토da2;
동안 (1)
윈 토토da_t *cur_윈 토토da;
/* 커서에 설명자를 할당 */
EXEC 윈 토토은 cur1에서 설명자 윈 토토da1로 다음 항목을 가져옵니다.
(cur_윈 토토da = 윈 토토da1 ;
cur_윈 토토da != NULL ;
cur_윈 토토da = cur_윈 토토da-desc_next)
나는 int;
문자 이름_buf[1024];
char var_buf[1024];
/* 행의 모든 열을 인쇄합니다. */
for (i=0 ; i<cur_윈 토토da-윈 토토d ; i++)
윈 토토var_t v = cur_윈 토토da-윈 토토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)
사례 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);
휴식;
케이스 ECPGt_long_long: /* bigint */
memcpy(&longval, 윈 토토data, 윈 토토len);
snprintf(var_buf, sizeof(var_buf), "%lld", longlongval);
휴식;
기본값:
나는 int;
memset(var_buf, 0, sizeof(var_buf));
for (i = 0; i < 윈 토토len; i++)
char tmpbuf[16];
snprintf(tmpbuf, sizeof(tmpbuf), "%02x ", (부호 없는 문자) 윈 토토data[i]);
strncat(var_buf, tmpbuf, sizeof(var_buf));
휴식;
printf("%s = %s (유형: %d)\n", name_buf, var_buf, v.윈 토토type);
printf("\n");
EXEC 윈 토토 CLOSE cur1;
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/uptime,uptime=CTc/uptime (유형: 1) datid = 1 (유형: 1) datname = template1 (유형: 1) 백엔드 수 = 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) 백엔드 수 = 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)