返回首页

gbase数据、南大通用产品文档:GBase8sDatetime 对象类型

更新日期:2024年09月11日

GBase 8s 支持的时间类型数据有时间类型,日期类型, 时间戳类型。
Factory
Sql 类型
1(缺省值)
2
3
备注
DATE
SQLT_DAT
SQLT_DAT
SQLT_TIMESTAMP

TIME
SQLT_DAT
SQLT_DAT
SQLT_TIMESTAMP

DATETIME
SQLT_DAT
SQLT_DAT
SQLT_TIMESTAMP




在C 语言中,使用GCIDateTime 对象表示时, 使用子类型区分。

GCI 接口在使用时间类型做数据库访问操作时,有如下规则:
l
GCIDateTime 时间,包含小时(范围0~23)
,分钟(范围0~59)
,秒(范围0~59)
,不包
含纳秒。
l
GCIDateTime 日期,包含年(范围-4712~9999)
,月(范围0~11)
,日(范围1~31)

l
GCIDateTime 时间戳,包含年(范围-4712~9999)
,月(范围0~11)
,日(范围1~31)

小时(范围0~23)
,分钟(范围0~59)
,秒(范围0~59)
,纳秒(范围0~999999999)
关于纳秒,GBase8s 中datetime 的fraction 类型的位数范围是1~5,最大只保留5 位有 效
数字, 所以纳秒的低4 位会被舍弃。例如,对于datetime year to fraction(5)的数据, 输
入值为9999,存入数据库的值为0。
Datetime 对象类型使用举例:
/* allocate the program variable for storing the data */
GCIDateTime *tstmpltz = (GCIDateTime *)NULL;
/* Col1 is a timestamp

*/
OraText *sqlstmt = (OraText *)"SELECT col1 FROM foo";
/*
分配Datetime 对象句柄 */
status = GCIDescriptorAlloc(envhp,(void **)&tstmpltz, GCI_DTYPE_TIMESTAMP,
0, (void **)0);
....
status
=
GCIStmtPrepare
(stmthp,
errhp,
sqlstmt,
(ub4)strlen
((char
*)sqlstmt),
(ub4)GCI_NTV_SYNTAX, (ub4)GCI_DEFAULT);
/* 绑定对象句柄,注意是指针的地址*/
status = GCIDefineByPos(stmthp, &defnp, errhp, 1, &tstmpltz, sizeof(tstmpltz),
SQLT_TIMESTAMP_LTZ, 0, 0, 0, GCI_DEFAULT);
/* Execute and Fetch */
GCIStmtExecute(svchp, stmthp, errhp, 1, 0,(GCISnapshot *) NULL,
(GCISnapshot *)NULL, GCI_DEFAULT)
At this point tstmpltz contains a valid timestamp with local time zone data. You
can get the time zone name of the datetime data using:
status = GCIDateTimeGetTimeZoneName(envhp, errhp, tstmpltz, (ub1 *)buf,
C 语言类型(64 位系
统)
子类型
数据库类型名称
SQLT 类型
GCIDateTime 时间

GCI_DTYPE_TI
ME
datetime
hour
to
second
SQLT_TIME
GCIDateTime 日期
GCI_DTYPE_D
ATE
Datetime year to day
SQLT_DATE
GCIDateTime 时间戳
GCI_DTYPE_TI
MESTAMP
除去以上类型的其他
时间类型, 例如
datetime
year
to
fraction(5), datetime
hour to fraction(4).
SQLT_TIMESTAMP



(ub4 *)&buflen);

在您准备语句之后,您可多次执行它。使用 EXECUTE 语句执行不是 SELECT 语句的那
些语句,以及仅返回一行的 SELECT 语句。
下列 GBase 8s ESQL/C 代码准备并执行银行账户的多语句更新:
EXEC SQL BEGIN DECLARE SECTION;
char bigquery[270] = "begin work;";
EXEC SQL END DECLARE SECTION;
stcat ("update account set balance = balance + ? where ", bigquery);
stcat ("acct_number = ?;', bigquery);

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 220 -

stcat ("update teller set balance = balance + ? where ", bigquery);
stcat ("teller_number = ?;', bigquery);
stcat ("update branch set balance = balance + ? where ", bigquery);
stcat ("branch_number = ?;', bigquery);
stcat ("insert into history values(timestamp, values);", bigquery);

EXEC SQL prepare bigq from :bigquery;

EXEC SQL execute bigq using :delta, :acct_number, :delta,
:teller_number, :delta, :branch_number;

EXEC SQL commit work;
EXECUTE 语句的 USING 子句提供主变量的列表,以其值替代准备好的语句中的问号。
如果 SELECT
(或 EXECUTE FUNCTION)
仅返回一行,
则您可使用 EXECUTE 的 INTO
子句来指定接收这些值的主变量。

使用 DBUPSPACE 环境变量,可以指定和限制 UPDATE STATISTICS 语句在尝试同时构
造多列分布时可使用的系统磁盘空间量。

max 是一个正整数,指定要为 UPDATE STATISTICS 操作中排序而分配的最大磁
盘空间 (KB)。
default 为一个正整数,指定不使用 PDQ 时要分配的最大内存数量 (4-50 MB)。
选项
无符号整数:
1:不使用任何索引来排序。在 sqexplain.out 中打印更新统计信息的整个计划。
2:不使用任何索引来排序。不打印更新统计信息的计划。
3 以上:使用可用的索引来排序。在说明输出文件中打印更新统计信息的整个计划。
例如,要将 DBUPSPACE 设置为 2,500 KB 的磁盘空间和 1 兆字节的内存,请输入以
下命令:

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 166 -
setenv DBUPSPACE 2500:1
在设置此值后,数据库服务器可在执行 UPDATE STATISTICS 语句期间使用不超过
2,500 KB 的磁盘空间。如果表需要 5 兆字节的磁盘空间用于排序,那么 UPDATE
STATISTICS 分两次完成该任务;每次构造一半列的分布。
如果未设置 DBUPSPACE,那么对于 max,缺省值为 1 兆字节 (1,024 KB),而对于
default,缺省值为 15 兆字节。如果尝试将 DBUPSPACE 设置为小于 1,024 KB 的任何
值,它会自动设置为 1,024 KB,但不会返回任何错误消息。如果此值尚未大到足以允许
一次构造多个分布,那么至少会完成一个分布,即使完成此任务所需的磁盘空间量超过
DBUPSPACE 指定的磁盘空间量也是如此。