返回首页

gbase数据、南大通用产品文档:GBase8a查看数据库对象定义

更新日期:2024年09月11日

使用本功能,您可以在SQL 编辑器中查看数据库对象定义。
在SQL 编辑器中,您可以同时按下“Ctrl”键和鼠标左键来使用查看数据库对
象定义功能。所有的对象定义都是只读状态不可以编辑。如下图所示:

图 8-35 查看对象定义-按住Ctrl+鼠标左键
如果查看的是表,则打开表设计器,如下图所示:



GBase 8a MPP Cluster 管理工具手册
南大通用数据技术股份有限公司

- 179 -

图 8-36 查看对象定义-表定义-表属性页

GBase 8a MPP Cluster 管理工具手册

- 180 -

南大通用数据技术股份有限公司

图 8-37 查看对象定义-表定义-列属性页
如果查看的是视图,则打开创建视图的脚本,如下图所示:



GBase 8a MPP Cluster 管理工具手册
南大通用数据技术股份有限公司

- 181 -

图 8-38 查看对象定义-视图定义信息
如果查看的是存储过程,则打开创建存储过程的脚本,如下图所示:

GBase 8a MPP Cluster 管理工具手册

- 182 -

南大通用数据技术股份有限公司

图 8-39 查看对象定义-存储过程定义信息
如果查看的函数,则打开创建函数的脚本,如下图所示:



GBase 8a MPP Cluster 管理工具手册
南大通用数据技术股份有限公司

- 183 -

图 8-40 查看对象定义-函数定义信息

GBase 8s ESQL/C 支持可以保存时间值消息的这两种数据类型:
datetime 数据类型,以时间作为日历日期和时间进行编码。
interval 数据类型,编码一段时间。
下表总了这两种时间数据类型。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 124 -


表 1. ESQL/C 时间数据类型
SQL 数据类型
ESQL/C 数
据类型
C typedef
名称
样本声明
DATETI
ME
datet
ime
dtime
_t
EXEC SQL BEGIN DECLARE
SECTION;
datetime 年销售;

EXEC SQL END DECLARE SECTION;

INTERV
AL
inter
val
intrvl
_t
EXEC SQL BEGIN DECLARE
SECTION;
间隔小时到第二个 test_num;

EXEC SQL END DECLARE SECTION;


头文件 datetime.h 包含 dtime_t 和 intrvl_t 结构,以及可用于组合限定符值的多个
宏定义。将此文件包含在使用任何 datetime 或 interval 主机变量的 C 源文件中:
EXEC SQL include datetime;

decimal.h 头文件定义类型 dec_t,它是 dtime_t 和 intrvl_t 结构的一个组件。

由于这些数据类型的多字性质,
不可能声明一个名为 year 、
month 、
day 、
hour 、
minute 、second 或 fraction 的未初始化的 datetime 或 interval 主机变量:
EXEC SQL BEGIN DECLARE SECTION;
datetime year; /* will cause an error */
datetime year to day year, today; /* ambiguous */
EXEC SQL END DECLARE SECTION;

datetime 或 interval 数据类型存储为十进制数,缩放因子为零,精度等于其限定符
隐含的位数。当您了解精度和尺度时,可以知道存储格式。例如:如果将表列定义为
DATETIME YEAR TO DAY,则它包含四位数年份、两位数月份以及两位数日期,一共有
八位数。因此它被存储为 decimal(8,0)。


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 125 -

如果基准十进制值的缺省精度不合适,则可以指定不同的精度。例如,如果您有一个
类型为 interval 的主机变量,具有限定符 day to day,则底层的十进制数的缺省精度为两
位。如果有一百天以上的时间间隔,这个精度是不够的。可以指定三位数的精度如下:
interval day(3) to day;
datetime 数据类型
使用 datetime 数据类型为 DATETIME 类型的数据库值声明主机变量。使用限定符
指定 datetime 数据类型的准确性。

例如:以下声明中的限定符是 year to day:
datetime year to day sale;

作为一个主机变量 dtime_t. 结构表示一个 datetime 值:
typedef struct dtime {
short dt_qual;
dec_t dt_dec;
} dtime_t;

dtime 结构和 dtime_t typedef 具有两个部分。下表列出了这些部分。

表 2. dtime 结构中的字段
字段
描述
dt_qu
al
datetime 值的限定符
dt_de
c
datetime 值的字段位数,此字段是 decimal 值。

声明一个 DATETIME 列的主机变量,
其中 datetime 数据类型后面是可选的限定符,
如下所示:
EXEC SQL include datetime;


EXEC SQL BEGIN DECLARE SECTION;
datetime year to day holidays[10];
datetime hour to second wins, places, shows;

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 126 -

datetime column6;
EXEC SQL END DECLARE SECTION;

如果您省略上一个示例中 datetime 主机变量中的限定符,则您的程序必须使
用表 1中显示的宏显式初始化此限定符。
interval 数据类型
使用 interval 数据类型声明 INTERVAL 类型的数据库列的主机变量。

可以使用限定符指定 interval 数据类型的准确性。以下声明中的限定符为 hour to
second:
interval hour to second test_run;

作为一个主机变量 intrvl_t,它表示一个 interval 值:
typedef struct intrvl {
short in_qual;
dec_t in_dec;
} intrvl_t;

intrvl 结构和 intrvl_t typedef 具有两个部分。下表列出了这些部分。

表 3. intrvl 结构中的字段
字段
描述
in_qual
interval 值的限定符
in_dec
interval 值的字段位数,此字段是 decimal 值

声明一个 INTERVAL 列的主机变量,其中 interval 数据类型后面是可选的限定符,
如下所示:
EXEC SQL BEGIN DECLARE SECTION;
interval day(3) to day accrued_leave, leave_taken;
interval hour to second race_length;
interval scheduled;
EXEC SQL END DECLARE SECTION;


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 127 -

如果您省略上一个示例中 interval 主机变量中的限定符,
则您的程序必须使用以下章
节中描述的宏显式初始化此限定符。
datetime 和 interval 数据类型的宏
除了 datetime 和 interval 数据结构,datetime.h 文件定义了下表中显示的宏函数,
以直接使用二进制形式的限定符。

表 4. datetime 和 interval 数据类型的限定符宏
宏的名称
描述
TU_YEAR
YEAR 限定符字段的实际单位
TU_MONTH
MONTH 限定符字段的实际单位
TU_DAY
DAY 限定符字段的实际单位
TU_HOUR
HOUR 限定符字段的实际单位
TU_MINUTE
MINUTE 限定符字段的实际单位
TU_SECOND
SECOND 限定符字段的实际单位
TU_FRAC
FRACTION 的前导限定符字段的实际单位
TU_Fn
名称为 datetime 结束字段的 FRACTION(n),n 为 1 - 5
TU_START(q)
从限定符 q 返回前导字段数
TU_END(q)
从限定符 q 返回末尾字段数
TU_LEN(q)
返回限定符 q 中位数的长度
TU_FLEN(f)
返回 interval 限定符的第一个字段的位数长度
TU_ENCODE(p,f,t)
从第一个字段数 f 创建一个限定符,其精度为 p ,尾部字段数
为 t
TU_DTENCODE(f,t)
从第一个字段数 f 和尾随的字段数 t 创建一个 datetime 限定

TU_IENCODE(p,f,t)
从第一个字段数 f 和尾随的字段数 t 创建一个 interval 限定
符,其精度为 p ,尾部字段为 t

例如:如果您的程序不在主机变量的声明声明中提供 interval 限定符,您需要使用
interval 限定符宏初始化并设置 interval 主机变量。在以下示例中,interval 变量获得一
个 day to second 限定符,限定符中的最长字段的精度 day 设置为 2:
/* declare a host variable without a qualifier */
EXEC SQL BEGIN DECLARE SECTION;
interval inv1;

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 128 -

EXEC SQL END DECLARE SECTION;


/* set the interval qualifier for the host variable */
inv1.in_qual = TU_IENCODE(2, TU_DAY, TU_SECOND);


/* assign values to the host variable */
incvasc ("5 2:10:02", &inv1);
获取和插入 DATETIME 和 INTERVAL 值
当应用程序获取或插入 DATETIME 或 INTERVAL 值时,GBase 8s ESQL/C 必须确
保主机变量的限定符字段是有效的:
当应用程序将 DATETIME 值提取到 datetime 主机变量或从 datetime 主机变量插
入 DATETIME 值时,必须确保 dtime_t 结构的 dt_qual 字段有效。
当应用程序将 INTERVAL 值提取到 interval 主机变量或从 interval 主机变量插入
INTERVAL 值时,必须确保 intrvl_t 结构的 in_qual 字段有效。
获取和插入到 datetime 主机变量
当应用程序使用 datetime 主机变量获取或插入 DATETIME 值时,
GBase 8s ESQL/C
必须在 datetime 主机变量中找到一个有效的限定符。
GBase 8s ESQL/C 根据与主变量相关
联的 dtime_t 结构中的 dt_qual 字段的值,执行以下操作之一:
当 dt_qual 字段包含有效限定符时,GBase 8s ESQL/C 扩展列值以符合 dt_qual 限定
符。
扩展时添加或删除 DATETIME 值的字段以使其与给定的限定符匹配的操作。您可以
使用 SQL EXTEND 函数和 GBase 8s ESQL/Cdtextend() 函数显式扩展 DATETIME 值。
当 dt_qual 字段不包含一个有效限定符时,GBase 8s ESQL/C 对获取和插入采取不同
的操作:
对于获取,GBase 8s ESQL/C 使用 DATETIME 列值和其限定符初始化 datetime 主
机变量。

(0)
是无效的限定符。
因此,
如果将 dt_qual 字段设置为零,
则可以确保 GBase 8s
ESQL/C 使用 DATETIME 列的限定符。

对于插入,GBase 8s ESQL/C 不能执行插入或修改操作。
GBase 8s ESQL/C 将 SQLSTATE 状态变量设置为一个错误类代码(SQLCODE 设置
为负值),并且 DATETIME 列上的修改和插入操作失败。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 129 -

获取和插入到 interval 主机变量
当应用程序使用 interval 主机变量获取或插入 INTERVAL 值时,GBase 8s ESQL/C
必须在 interval 主机变量中找到一个有效的限定符。GBase 8s ESQL/C 根据与主变量相关
联的 intrvl_t 结构中的 in_qual 字段的值,执行以下操作之一:
当 in_qual 字段包含有效限定符时,GBase 8s ESQL/C 检查它与来自 INTERVAL 列
值的限定符的一致性。
如果它们属于同一 interval 类 year to month 或 day to fraction,则这两个限定符是
符合的。如果限定符不符合,则 GBase 8s ESQL/C 将 SQLSTATE 状态变量设置为错误类
代码(以及 SQLCODE 设置为负值),并且选择、修改或插入操作失败。

如果限定符符合但不一样,
则 GBase 8s ESQL/C 扩展列的值以符合 in_qual 限定符。
扩展时添加或删除 INTERVAL 的 interval 类值的字段以使其与给定的限定符匹配的操作,
可以使用 GBase 8s ESQL/Cinvextend() 函数显式扩展 INTERVAL 值。

当 in_qual 字段不包含有效的限定符时,GBase 8s ESQL/C 对获取或插入采取不同的
操作:
对于获取,
如果 in_qual 字段包含零或是一个无效的限定符,
则 GBase 8s ESQL/C 使
用 INTERVAL 列值及其限定符初始化 interval 主机变量。
对于插入,如果 in_qual 字段与 INTERVAL 列不一致或如果它没有包含有效值,则
GBase 8s ESQL/C 不会执行插入或修改操作。
GBase 8s ESQL/C 将 SQLSTATE 状态变量设置为一个错误类代码(SQLCODE 设置
为负值),并且 INTERVAL 列上的修改和插入操作失败。
隐式数据转换
可以将 DATETIME 或 INTERVAL 列值获取到字符(char 、string 或 fixchar)主
机变量。 GBase 8s ESQL/C 在它将其存储在字符主机变量之前将 DATETIME 或
INTERVAL 列值主或为字符字符串。
该字符字符串符合 DATETIME 和 INTERVAL 值的
ANSI SQL 标准。如果主机变量太短,则 GBase 8s ESQL/C 将 sqlca.sqlwarn.sqlwarn1 设
置为 W,使用星号(*)填充主机变量,并将任何指示变量设置到不需截断字符字符串的
长度。

还可以从字符(char 、string 、 fixchar 或 varchar)主机变量插入 DATETIME 或
INTERVAL 列值。GBase 8s ESQL/C 使用列值的数据类型和限定符将字符值转换为
DATETIME 或 INTERVAL 值。
它希望字符串包含符合 ANSI SQL 标准的 DATETIME or
INTERVAL 值。


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 130 -

如果转换失败,则 GBase 8s ESQL/C 将 SQLSTATE 状态变量设置为一个错误类代
码(SQLCODE 设置为负值),并且修改和插入操作失败。
重要: GBase 8s 产品不支持从 DATETIME 和 INTERVAL 列值到数字(double 、
int 等)
主变量的自动数据转换。
GBase 8s 产品也不支持从数字
(double 、
int 等)
或 date
主机变量到 DATETIME 和 INTERVAL 列值的自动数据转换。
DATETIME 和 INTERVAL 值的 ANSI SQL 标准
ANSI SQL 标准指定 DATETIME 和 INTERVAL 值的字符表示法的限定符和格式。
DATETIME 值的标准限定符是 YEAR TO SECOND,标准格式如下:
YYYY-MM-DD HH:MM:SS

INTERVAL 值的标准指定下列两种间隔类:
YEAR TO MONTH 类具有格式:YYYY-MM
该格式的子集也有效:例如,只有月间隔。
DAY TO FRACTION 类具有格式:DD HH:MM:SS.F
连续字段的任何子集也是有效的:例如,MINUTE TO FRACTION。
转换 datetime 值的数据
可以使用 GBase 8s ESQL/C 库函数 dtcvasc() 、
dtcvfmtasc() 、
dttoasc() 和 dttofmtasc()
显式在 DATETIME 列值和字符串之间转换。

例如,
可以使用 GBase 8s ESQL/C 库函数和中间字符串在 DATETIME 和 DATE 日
期类型之间执行转换。

将 DATETIME 值转换为 DATE 值:
使用 dtextend() 函数将 DATETIME 限定符调整为 year to day。
应用 dttoasc() 函数创建 yyyy-mm-dd 格式的字符字符串。
使用模式参数 yyyy-mm-dd 的 rdefmtdate() 函数将字符串转换为 DATE 值。
转换 interval 值的数据
可以使用 GBase 8s ESQL/C 库函数 incvasc() 、
incvfmtasc() 、
intoasc() 和 intofmtasc()
显式在 INTERVAL 列值和字符字符串之间转换。

例如,
可以使用 GBase 8s ESQL/C 库函数和中间字符串在 DATETIME 和 DATE 日
期类型之间执行转换。


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 131 -

将 DATE 值转换为 DATETIME 值:
声明具有限定符 year to day 的主机变量(或使用
TU_DTENCODE(TU_YEAR,TU_DAY) 宏返回的值初始化限定符)。
使用具有 yyyy-mm-dd 模式的 rfmtdate() 函数将 DATE 值转换为字符字符串。
使用 dtcvasc() 函数将字符字符串转换为之前预备好的 DATETIME 变量中的值。
如有必要,使用 dtextend() 函数调整 DATETIME 限定符。

使用 AUTO_TUNE_SERVER_SIZE 配置参数来根据预期的并发用户数设置要分配的内存和存
储空间大小。
onconfig.std 值
不在 onconfig.std 文件中。
缺省值
未设置。
在安装期间创建服务器的值
依赖于您在安装程序中指定的用户数。

SMALL = 1 - 100 用户
MEDIUM = 101 - 500 用户
LARGE = 501 - 1000 用户
XLARGE = 多于 1000 用户
生效
如果您在安装期间创建一个服务器。
编辑 onconfig 文件并首次重启数据库服务器之后。
用法
如果您在安装期间创建一个服务器,则指定数据库服务器的预期用户数。将
AUTO_TUNE_SERVER_SIZE 配置参数设置成相应的大小,会影响下列特性的大小:

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 32 -

l 缓冲池的大小。
l 在数据库停止为了提高性能而自动地添加逻辑日志之前,逻辑日志文件大小的最大
值。
l 下列已创建的存储空间的初始大小,这些存储空间是在安装期间自动创建的:
n
物理日志的可扩展 plogspace
n
逻辑日志的 dbspace
n
数据库和表的 dbspace
n
临时 dbspace
n
sbspace
n
临时 sbspace
下表说明 AUTO_TUNE_SERVER_SIZE 配置参数值如何影响大小。
表. 对内存和存储空间分配的影响.

缓冲池
(BUFFERPOOL)

小的最大值
自动地创建的存储
空间的初始大小
逻辑日志文件
(AUTO_LLOG)

小的最大值
SMALL
可用共享内存的 10%
50 MB
200 MB
MEDIUM
20%
100 MB
500 MB
LARGE
33%
200 MB
1 GB
XLARGE
50%
500 MB
2 GB
如果您在安装期间未创建一个数据库,或在初始化服务器后首次更改
AUTO_TUNE_SERVER_SIZE 配置参数的值,则新的值仅会影响下列特性的大小:
l 缓冲池的大小,如果 BUFFERPOOL 配置参数的设置包括 memory='auto' 选项。
l 在服务器停止为了提高性能而自动地添加逻辑日志之前,所有逻辑日志大小的最大
值。