Postgre스포츠 토토 베트맨 9.3.25 문서 | ||||
---|---|---|---|---|
와이즈 토토 PostgreSQL : 문서 : 9.3 : PGTYPES 라이브러리 | 젠 토토 : 문서 : 9.3 : ECPG- C에 포함 된 SQL | 제 33 장ECPG- 임베디드Postgre스포츠in c | 다음 |
스포츠 토토 베트맨 디스크립터 영역은보다 정교한 방법입니다. a의 결과 처리select, fetch또는 A설명진술. 스포츠 토토 베트맨 디스크립터 영역 그룹 메타 데이터 항목과 함께 한 줄의 데이터 데이터를 하나로 데이터 구조. 메타 데이터는 실행할 때 특히 유용합니다 동적 스포츠 토토 베트맨 문, 결과 열의 특성 미리 알려지지 않을 수도 있습니다. Postgre스포츠 토토 베트맨은 두 가지 방법을 제공합니다 설명 자 영역 사용 : 명명 된 스포츠 토토 베트맨 설명자 영역 및 C- 구조 스포츠 토토 베트맨DAS.
이름 지정된 스포츠 토토 베트맨 디스크립터 영역은 헤더로 구성되어 있으며 전체 디스크립터 및 하나 이상의 항목에 관한 정보 기본적으로 각각의 한 열을 설명하는 디스크립터 영역 결과 행.
스포츠 토토 베트맨 디스크립터 영역을 사용하기 전에 할당해야합니다. 하나:
exec 스포츠 토토 베트맨 할당 디스크립터식별자;
식별자는 역할을합니다."변수 이름"설명 자 영역. 필요하지 않을 때 더 이상 설명자, 당신은 그것을 거래해야합니다 :
Exec 스포츠 토토 베트맨 Dalleloce Descriptor식별자;
디스크립터 영역을 사용하려면의 스토리지 대상으로 지정하십시오.in호스트 목록 대신 조항 변수 :
Exec 스포츠 토토 베트맨 Fetch 다음에 MyCursor에서 스포츠 토토 베트맨 디스크립터 MyDesc;
결과 세트가 비어 있으면 설명자 영역이 여전히 쿼리에서 메타 데이터를 포함하십시오, 즉 필드 이름.
아직 실행되지 않은 준비된 쿼리,설명Statement를 사용하여 메타 데이터를 얻을 수 있습니다 결과 세트의 :
Exec 스포츠 토토 베트맨 시작 선언 섹션; char * sql_stmt = "select * from table1"; Exec 스포츠 토토 베트맨 END DELLARE SECTION; Exec 스포츠 토토 베트맨 STMT1 준비 : 스포츠 토토 베트맨_STMT; Exec 스포츠 토토 베트맨 STMT1을 스포츠 토토 베트맨 디스크립터 MyDesc에 설명합니다.
postgresql 9.0 이전,스포츠 토토 베트맨키워드 선택 사항이므로 사용디스크립터and스포츠 토토 베트맨 디스크립터이름이 지정된 스포츠 토토 베트맨 설명자 영역. 이제 그것은 필수입니다.스포츠 토토 베트맨키워드는 스포츠 토토 베트맨DA 디스크립터 영역을 생성합니다. 참조섹션 33.7.2.
in설명andfetch진술,intoand사용키워드를 익숙해 질 수 있습니다 유사하게 : 결과 세트와 메타 데이터를 설명 자 영역.
이제 디스크립터 영역에서 데이터를 어떻게 얻습니까? 당신은 할 수 있습니다 디스크립터 영역을 필드 명명 된 구조로 생각하십시오. 에게 헤더에서 필드의 값을 검색하여 호스트 변수, 다음 명령을 사용하십시오.
Exec 스포츠 토토 베트맨 GET DESCRICTOR이름 :hostvar=필드;
현재, 헤더 필드는 하나뿐입니다.count영역이 존재합니다 (즉, 몇 개의 열이 결과). 호스트 변수는 정수 유형이어야합니다. 얻기 위해 항목 설명 자 영역에서 필드는 다음 명령을 사용합니다.
Exec 스포츠 토토 베트맨 Get Descriptor이름valueNum :hostvar=필드;
Num문자 그대로의 정수 일 수 있습니다 정수를 포함하는 호스트 변수. 가능한 필드는 다음과 같습니다.
결과 세트의 행 수
실제 데이터 항목 (따라서이 필드의 데이터 유형은 쿼리에서)
언제타입is9, dateTime_interVal_code값은입니다.1for날짜, 2forTime, 3for타임 스탬프, 4for시간대가있는 시간또는5for시간대가있는 타임 스탬프.
구현되지 않음
표시기 (널 값 또는 값을 나타냅니다 잘림)
구현되지 않음
캐릭터의 데이텀 길이
열 이름
구현되지 않음
바이트에서 데이텀의 문자 표현 길이
정밀도 (유형숫자)
캐릭터의 데이텀 길이
바이트에서 데이텀의 문자 표현 길이
스케일 (유형 용숫자)
열의 데이터 유형의 숫자 코드
inexecute, 선언andOpen진술,의 효과inand사용키워드가 다릅니다. 설명자 영역은 또한 입력 매개 변수를 제공하기 위해 수동으로 제작할 수 있습니다. 쿼리 또는 커서 및스포츠 토토 베트맨 디스크립터 사용이름를 통과하는 방법입니다 매개 변수로 입력 매개 변수. 구축 할 진술 명명 된 스포츠 토토 베트맨 디스크립터 영역은 다음과 같습니다.
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;
스포츠 토토 베트맨키워드가 생략되었습니다. 의 사용 사례에 대한 단락inand사용키워드섹션 33.7.1추가로 여기에 적용하십시오. 에서설명진술디스크립터|in키워드가 사용됩니다 :
exec 스포츠 토토 베트맨 repection_statement destatement_statement in mysqlda;
스포츠 토토 베트맨DA를 사용하는 프로그램의 일반적인 흐름은 다음과 같습니다.
쿼리 준비를하고 커서를 선언합니다.
결과 행에 대한 스포츠 토토 베트맨DA를 선언합니다.
입력 매개 변수에 대한 스포츠 토토 베트맨DA를 선언하고 초기화 (메모리 할당, 매개 변수 설정).
입력 스포츠 토토 베트맨DA로 커서를 엽니 다.
커서에서 행을 가져 와서 출력에 저장 스포츠 토토 베트맨da.
출력 스포츠 토토 베트맨DA에서 호스트 변수로 값을 읽습니다 ( 필요한 경우 변환).
커서를 닫습니다.
입력 스포츠 토토 베트맨DA에 할당 된 메모리 영역을 제거합니다.
스포츠 토토 베트맨DA는 세 가지 데이터 구조 유형을 사용합니다.스포츠 토토 베트맨DA_T, 스포츠 토토 베트맨var_t및struct 스포츠 토토 베트맨name.
팁 :Postgresql의 스포츠 토토 베트맨DA는 비슷한 데이터 구조를 가지고 있습니다 IBM DB2 Universal Database의 하나이므로 일부 기술 DB2의 스포츠 토토 베트맨DA에 대한 정보는 Postgre스포츠 토토 베트맨을 이해하는 데 도움이 될 수 있습니다 더 나은 것.
구조 유형스포츠 토토 베트맨DA_T는 유형입니다 실제 스포츠 토토 베트맨DA. 하나의 레코드를 보유하고 있습니다. 그리고 둘 이상의스포츠 토토 베트맨DA_T구조는 링크 된 목록에 연결할 수 있습니다 의 포인터와 함께desc_next필드, 따라서 순서대로 행의 수집을 나타냅니다. 그래서 언제 두 개 이상의 행이 가져 오면 응용 프로그램은 다음을 읽을 수 있습니다. 다음desc_next포인터 IN 각스포츠 토토 베트맨DA_T노드.
정의스포츠 토토 베트맨DA_Tis :
struct sqlda_struct char sqldaid [8]; 긴 sqldabc; 짧은 스포츠 토토 베트맨n; 짧은 스포츠 토토 베트맨D; struct sqlda_struct *desc_next; struct 스포츠 토토 베트맨var_struct 스포츠 토토 베트맨var [1]; ; typedef struct sqlda_struct sqlda_t;
필드의 의미는 다음과 같습니다.
문자 그대로 문자열이 포함되어 있습니다"스포츠 토토 베트맨DA ".
할당 된 공간의 크기가 바이트의 크기를 포함합니다.
매개 변수에 대한 입력 매개 변수 수가 포함되어 있습니다. 쿼리가 전달 된 경우Open, 선언또는execute사용키워드. 의 출력으로 사용되는 경우select, execute또는fetch진술, 그 값은 동일합니다 처럼스포츠 토토 베트맨D진술
결과 세트에 필드 수가 포함되어 있습니다.
쿼리가 둘 이상의 레코드를 반환하면 다중 링크 된 스포츠 토토 베트맨DA 구조가 반환되고desc_next목록의 다음 항목에 대한 포인터를 보유하고 있습니다.
결과 세트의 열의 배열입니다.
구조 유형스포츠 토토 베트맨var_t열을 보유합니다 유형 및 길이와 같은 값 및 메타 데이터. 의 정의 유형은 :
struct 스포츠 토토 베트맨var_struct 짧은 sqltype; 짧은 스포츠 토토 베트맨len; char *스포츠 토토 베트맨data; 짧은 *sqlind; struct 스포츠 토토 베트맨name 스포츠 토토 베트맨name; ; typedef struct 스포츠 토토 베트맨var_struct 스포츠 토토 베트맨var_t;
필드의 의미는 다음과 같습니다.
필드의 유형 식별자를 포함합니다. 값은 참조enum ecpgttypeinecpgtype.h.
필드의 이진 길이를 포함합니다. 예를 들어 4 바이트ecpgt_int.
데이터를 가리 킵니다. 데이터 형식은에 설명되어 있습니다.섹션 33.4.4.
널 표시기를 가리 킵니다. 0은 null이 아닌 것을 의미합니다. -1을 의미합니다 널.
필드의 이름.
astruct 스포츠 토토 베트맨name구조는 열을 보유합니다 이름. 그것은의 멤버로 사용됩니다.스포츠 토토 베트맨var_t구조. 구조의 정의는 다음과 같습니다.
#Define NamedAtalen 64 struct 스포츠 토토 베트맨name 짧은 길이; char 데이터 [이름 지정]; ;
필드의 의미는 다음과 같습니다.
필드 이름의 길이를 포함합니다.
실제 필드 이름을 포함합니다.
sqlda는 다음과 같습니다.
선언스포츠 토토 베트맨DA_T수신 할 구조 결과 세트.
executefetch/execute/설명명령 선언 된 스포츠 토토 베트맨DA를 지정하는 쿼리 처리를 위해
보고하여 설정 한 결과의 레코드 수 확인스포츠 토토 베트맨N,스포츠 토토 베트맨DA_T구조.
각 열의 값을스포츠 토토 베트맨VAR [0], 스포츠 토토 베트맨var [1]등, 회원스포츠 토토 베트맨DA_T구조.
다음 행으로 이동 (스포츠 토토 베트맨DA_T구조) by 다음desc_next포인터, a 회원스포츠 토토 베트맨DA_T구조.
필요에 따라 위에서 반복하십시오.
스포츠 토토 베트맨DA를 통해 세트를 검색하는 예입니다.
먼저, a 선언스포츠 토토 베트맨DA_T구조로 결과 세트를 받으십시오.
스포츠 토토 베트맨da_t *스포츠 토토 베트맨da1;
다음, 명령에 sqlda를 지정하십시오. 이것은입니다.fetch명령 예.
exec 스포츠 토토 베트맨이 CUR1에서 디스크립터 스포츠 토토 베트맨DA1로 다음에 가져 오기;
링크 된 목록을 따라 루프를 실행하여 행을 검색합니다.
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; ...
열 값을 얻으려면를 확인하십시오.스포츠 토토 베트맨TYPEvalue, 회원스포츠 토토 베트맨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_T 구조) 할당 sqlda.
할당 된 메모리의 입력 값 세트 (복사)
입력 스포츠 토토 베트맨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- 스포츠 토토 베트맨n = 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);
여기에 액세스를 가져 오는 방법을 설명하는 예제 프로그램이 있습니다. 입력 매개 변수로 지정된 데이터베이스 통계, 시스템 카탈로그에서
이 응용 프로그램은 PG_DATABASE의 두 시스템 테이블에 합류합니다 데이터베이스 OID의 PG_STAT_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및스포츠 토토 베트맨lenin스포츠 토토 베트맨var구조.
/* 입력 매개 변수에 대한 스포츠 토토 베트맨DA 구조를 만듭니다. */ sqlda2 = (sqlda_t *) malloc (sizeof (sqlda_t) + sizeof (스포츠 토토 베트맨var_t)); memset (sqlda2, 0, sizeof (sqlda_t) + sizeof (스포츠 토토 베트맨var_t)); sqlda2- 스포츠 토토 베트맨n = 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를 설정 한 후 입력으로 커서를 엽니 다 sqlda.
/* 입력 매개 변수가있는 커서를 엽니 다. */ 디스크립터 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 스포츠 토토 베트맨 모든 분리;
전체 프로그램이에 표시됩니다.예제 33-1.
예 33-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- 스포츠 토토 베트맨n = 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)
이전 | 배트맨 스포츠 토토 베트맨 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 다음 |
PGTYPES 라이브러리 | 젠 토토 : 문서 : 9.3 : ECPG- C에 포함 된 SQL | 오류 처리 |