华为云云数据库GaussDB访问特殊数据类型_云淘科技
ecpg支持numeric、decimal、date、timestamp和interval数据类型。由于这些数据类型的内部结构较为复杂,无法被映射到初级数据类型的宿主变量,因此应用程序通过声明特殊类型的宿主变量以及使用pgtypes库中的函数处理这些特殊类型。pgtypes库中的接口函数可参考ecpg接口参考章节。
timestamp, date
首先,程序必须包含timestamp类型的头文件:
#include
其次,在声明部分中声明类型为timestamp的宿主变量:
EXEC SQL BEGIN DECLARE SECTION; timestamp ts; EXEC SQL END DECLARE SECTION;
读取值到宿主变量之后,使用pgtypes库函数进行处理。如下示例中,使用PGTYPEStimestamp_to_asc()函数将timestamp值转换成文本形式:
EXEC SQL SELECT now()::timestamp INTO :ts; printf("ts = %s ", PGTYPEStimestamp_to_asc(ts));
示例输出如下:
ts = 2022-06-27 18:03:56.949343
另外,date类型可以用相同的方式处理。程序必须包括pgtypes_data.h头文件,并声明一个date类型的宿主变量并用PGTYPEdata_to_asc()函数将其转换成文本形式。
interval
interval类型的处理与timestamp和date类型类似,不同的是interval类型变量的存储空间需要分配在堆内存中。
示例如下:
#include #include #include int main(void) { EXEC SQL BEGIN DECLARE SECTION; interval *in; EXEC SQL END DECLARE SECTION; /* 连接数据库testdb, 需提前创建好testdb库 */ EXEC SQL CONNECT TO testdb; in = PGTYPESinterval_new(); EXEC SQL SELECT '1 min'::interval INTO :in; printf("interval = %s ", PGTYPESinterval_to_asc(in)); PGTYPESinterval_free(in); EXEC SQL COMMIT; EXEC SQL DISCONNECT ALL; return 0; }
numeric, decimal
numeric和decimal类型的处理类似于interval类型:需要定义一个指针,并在堆上分配一些内存空间并且使用pgtypes库函数访问该变量。
示例如下:
#include #include #include EXEC SQL WHENEVER SQLERROR STOP; int main(void) { EXEC SQL BEGIN DECLARE SECTION; numeric *num; numeric *num2; decimal *dec; EXEC SQL END DECLARE SECTION; /* 连接数据库testdb, 需提前创建好testdb库 */ EXEC SQL CONNECT TO testdb; num = PGTYPESnumeric_new(); dec = PGTYPESdecimal_new(); EXEC SQL SELECT 12.345::numeric(4,2), 23.456::decimal(4,2) INTO :num, :dec; printf("numeric = %s ", PGTYPESnumeric_to_asc(num, 0)); printf("numeric = %s ", PGTYPESnumeric_to_asc(num, 1)); printf("numeric = %s ", PGTYPESnumeric_to_asc(num, 2)); /*转换十进制到数值型以显示十进制值*/ num2 = PGTYPESnumeric_new(); PGTYPESnumeric_from_decimal(dec, num2); printf("decimal = %s ", PGTYPESnumeric_to_asc(num2, 0)); printf("decimal = %s ", PGTYPESnumeric_to_asc(num2, 1)); printf("decimal = %s ", PGTYPESnumeric_to_asc(num2, 2)); PGTYPESnumeric_free(num2); PGTYPESdecimal_free(dec); PGTYPESnumeric_free(num); EXEC SQL COMMIT; EXEC SQL DISCONNECT ALL; return 0; }
父主题: 宿主变量
同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家