⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dyntest.pgc

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 PGC
字号:
/* dynamic SQL test program * * Copyright (c) 2000, Christof Petig <christof.petig@wtal.de> * * $PostgreSQL: pgsql/src/interfaces/ecpg/test/dyntest.pgc,v 1.11 2005/06/30 07:08:59 neilc Exp $ */#include <stdio.h>#include <stdlib.h>#include <string.h>exec sql include sql3types;exec sql include sqlca;static void error(void){  printf("#%ld:%s\n",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);   exit(1);}int main(int argc,char **argv){ exec sql begin declare section;  int COUNT;  int INTVAR;  int INDEX;  int INDICATOR;  bool BOOLVAR;  int TYPE,LENGTH,OCTET_LENGTH,PRECISION,SCALE,NULLABLE,RETURNED_OCTET_LENGTH;  int DATETIME_INTERVAL_CODE;  char NAME[120];  char STRINGVAR[1024];  float FLOATVAR;  double DOUBLEVAR;  char QUERY[1024];  char DB[1024];  exec sql end declare section;  int done=0;  FILE *dbgs;    if ((dbgs = fopen("log", "w")) != NULL)                ECPGdebug(1, dbgs);  snprintf(QUERY,sizeof QUERY,"select * from %s",argc>1 && argv[1][0]?argv[1]:"pg_tables");  exec sql whenever sqlerror do error();    exec sql allocate descriptor MYDESC;  strncpy(DB,argc>2?argv[2]:"mm",sizeof DB);  exec sql connect to :DB;    exec sql prepare MYQUERY from :QUERY;  exec sql declare MYCURS cursor for MYQUERY;    exec sql open MYCURS;    while (1)  {  exec sql fetch in MYCURS into sql descriptor MYDESC;          if (sqlca.sqlcode) break;          exec sql get descriptor MYDESC :COUNT = count;     if (!done)      {  printf("%d Columns\n",COUNT);        for (INDEX=1;INDEX<=COUNT;++INDEX)        {	exec sql get descriptor MYDESC value :INDEX        		:TYPE = type,        		:LENGTH = length, :OCTET_LENGTH=octet_length,        		:PRECISION = precision, :SCALE=scale,        		:NULLABLE=nullable, :NAME=name,        		:RETURNED_OCTET_LENGTH=returned_octet_length;			printf("%s ",NAME);        	switch (TYPE)        	{  case SQL3_BOOLEAN:         			printf("bool ");        			break;        	   case SQL3_NUMERIC:        	   		printf("numeric(%d,%d) ",PRECISION,SCALE);        	        break;        	   case SQL3_DECIMAL:        	   		printf("decimal(%d,%d) ",PRECISION,SCALE);        	        break;        	   case SQL3_INTEGER:         	   		printf("integer ");        	   		break;        	   case SQL3_SMALLINT:        	   		printf("smallint ");        	        break;        	   case SQL3_FLOAT:        	   		printf("float(%d,%d) ",PRECISION,SCALE);        	        break;        	   case SQL3_REAL:        	   		printf("real ");        	        break;        	   case SQL3_DOUBLE_PRECISION:        	   		printf("double precision ");        	        break;        	   case SQL3_DATE_TIME_TIMESTAMP:        	   		exec sql get descriptor MYDESC value :INDEX         	   		:DATETIME_INTERVAL_CODE=datetime_interval_code;        	   		switch(DATETIME_INTERVAL_CODE)        	   		{	case SQL3_DDT_DATE:         	   				printf("date "); break;        	   			case SQL3_DDT_TIME:         	   				printf("time "); break;        	   			case SQL3_DDT_TIMESTAMP:         	   				printf("timestamp "); break;        	   			case SQL3_DDT_TIME_WITH_TIME_ZONE:         	   				printf("time with time zone "); break;        	   			case SQL3_DDT_TIMESTAMP_WITH_TIME_ZONE:         	   				printf("timestamp with time zone "); break;        	   		}        	        break;        	   case SQL3_INTERVAL:        	   		printf("interval ");        	        break;        	   case SQL3_CHARACTER:        	        if (LENGTH>0) printf("char(%d) ",LENGTH);        	        else printf("char(?) ");        	        break;        	   case SQL3_CHARACTER_VARYING:        	        if (LENGTH>0) printf("varchar(%d) ",LENGTH);        	        else printf("varchar() ");        	        break;        	   default:        	        if (TYPE<0) printf("<OID %d> ",-TYPE);        	        else printf("<SQL3 %d> ",TYPE);        	        break;        	}        	if (!NULLABLE) printf("not null ");        	if (OCTET_LENGTH>0) printf("[%d bytes]",OCTET_LENGTH);        	putchar('\n');        }        putchar('\n');        done=1;     }           for (INDEX=1;INDEX<=COUNT;++INDEX)     {  exec sql get descriptor MYDESC value :INDEX      		:TYPE = type, :SCALE=scale, :PRECISION = precision,     		:INDICATOR=indicator;     	if (INDICATOR==-1) printf("NULL");        else switch (TYPE)     	{	case SQL3_BOOLEAN:      	        exec sql get descriptor MYDESC value :INDEX :BOOLVAR=data;     			printf(BOOLVAR?"true":"false");     			break;     	   	case SQL3_NUMERIC:     	   	case SQL3_DECIMAL:     	        if (SCALE==0) /* we might even print leading zeros "%0*d" */     	        {  exec sql get descriptor MYDESC value :INDEX :INTVAR=data;     	           printf("%*d",PRECISION,INTVAR);     	        }     	        else     	        {  exec sql get descriptor MYDESC value :INDEX :FLOATVAR=data;     	           printf("%*.*f",PRECISION+1,SCALE,FLOATVAR);     	        }     	        break;     	   	case SQL3_INTEGER:     	   	case SQL3_SMALLINT:      	        exec sql get descriptor MYDESC value :INDEX :INTVAR=data;     	        printf("%d",INTVAR);     	        break;     	   	case SQL3_FLOAT:     	   	case SQL3_REAL:     	        exec sql get descriptor MYDESC value :INDEX :FLOATVAR=data;     	        printf("%f",FLOATVAR);     	        break;     	   	case SQL3_DOUBLE_PRECISION:     	        exec sql get descriptor MYDESC value :INDEX :DOUBLEVAR=data;     	        printf("%f",DOUBLEVAR);     	        break;     	   	case SQL3_DATE_TIME_TIMESTAMP:     	   	case SQL3_INTERVAL:     	   	case SQL3_CHARACTER:     	   	case SQL3_CHARACTER_VARYING:     	   	default:     	        exec sql get descriptor MYDESC value :INDEX :STRINGVAR=data;     	        printf("'%s'",STRINGVAR);     	        break;     	}     	putchar('|');     }     putchar('\n');  }    exec sql close MYCURS;    exec sql deallocate descriptor MYDESC;  if (dbgs != NULL)       fclose(dbgs);  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -