返回首页

gbase数据、南大通用产品文档:GBase8aBEGINEND

更新日期:2024年09月11日

功能说明
存储程序
(过程和函数)
可能包含多个语句,
这时就使用BEGIN...END 复合语句。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1356
语法格式
[begin_label:] BEGIN
[statement_list]
END [end_label]
表5- 172 参数说明
参数名称


statement_list
表示一个或多个语句的列表。多个语句之间使用分号“;”进行
分隔。
说明

复合语句可以被标记。
end_label 只有在begin_label 出现后才能使用,
并且
如果两者都出现,它们必须相同;

要使用多个语句,
就需要客户端能发送包含语句分隔符
“;”
的查询字符串。
这可在客户端通过gbase 命令行使用分隔符更改命令来处理。更改查询结
束的分隔符“;”(比如,改为//),允许“;”用在程序体中。

syscolumns 系统目录表描述数据库中的每个列。
对于在表或视图中定义的每一列,都会有一行存在。
表 10. SYSCOLUMNS 表

类型
解释
colname
VARCHAR(128)
列名
tabid
INTEGER
包含列的表的标识代码
colno
SMALLINT
列号
系统按顺序指定此列号(在每个表中从
左到右)。

coltype
SMALLINT
指示该列的数据类型的代码:
0 = CHAR
1 = SMALLINT
2 = INTEGER
3 = FLOAT
4 = SMALLFLOAT

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 25 -


类型
解释
5 = DECIMAL
6 = SERIAL
1
7 = DATE
8 = MONEY
9 = NULL
10 = DATETIME
11 = BYTE
12 = TEXT
13 = VARCHAR
14 = INTERVAL
15 = NCHAR
16 = NVARCHAR
17 = INT8
18 = SERIAL8
1
19 = SET
20 = MULTISET
21 = LIST
22 = ROW(未命名)
23 = COLLECTION
40 = 可变长度不透明类型
2
41 = 固定长度不透明类型
2
43 = LVARCHAR(仅适用于客户机端)
45 = BOOLEAN
52 = BIGINT
53 = BIGSERIAL
1
2061 = IDSSECURITYLABEL
2
4118 = ROW(命名)
collength
任何以下数据类型:
基于整数
可变长度字符
时间
定点
简单大对象
IDSSECURITYLABEL
值决定于列的数据类型。对于某些数据
类型,值是列长(以字节为单位)。请
参阅存储列长以获取更多信息。
colmin
INTEGER
最小列长(以字节计)
colmax
INTEGER
最大列长(以字节计)
extended_id
INTEGER
在 coltype 列中指定的数据类型的数
据类型代码(来自 sysxtdtypes 表)
seclabelid
INTEGER
安全标号的标号标识与该列相关联(如
果该列为受保护的列)。否则,其标号
标识为 NULL。
colattr
SMALLINT
HIDDEN
1 - 隐藏的列
ROWVER

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 26 -


类型
解释
2 - 行版本列
ROW_CHKSUM
4 - 行键列
ER_CHECKVER
8 - ER 行版本列
UPGRD1_COL
16 - ER 自动主键列
UPGRD2_COL
32 - ER 自动主键列
UPGRD3_COL
64 - ER 自动主键列
PK_NOTNULL
128 - NOT NULL by PRIMARY KEY

注:
1 在 DB-Access 中,总是将偏移值 256 添加到这些 coltype 代码上,因为 DB-Access 会将 SERIAL、
SERIAL8 和 BIGSERIAL 列设置为 NOT NULL。
2 请参阅不透明数据类型以获取更多信息。

tabid 和 colno 列的组合索引只允许唯一值。
coltype 代码可通过显示列的以下特征的位图递增。
位值
设置位时的有效值
0x0100
不允许使用 NULL 值
0x0200
值来自主变量
0x0400
用于联网的数据库服务器的点分十进制
0x0800
DISTINCT 数据类型
0x1000
命名 ROW 类型
0x2000
LVARCHAR 基本类型中的 DISTINCT 类型
0x4000
BOOLEAN 基本类型中的 DISTINCT 类型
0x8000
在客户机系统上处理的集合

例如,命名行类型的 coltype 值 4118 是十六进制值 0x1016 的十进制表示法,该十
六进制值与设置了命名行类型位的未命名行类型 0x016 的十六进制 coltype 值相同。文
件 $GBASEDBTDIR/incl/esql/sqltypes.h 包含有关 syscolumns.coltype 代码的其他信
息。
NOT NULL 约束
同样,如果列不允许使用 NULL 值,那么 coltype 值将增加 256。要确定这种列的数

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 27 -

据类型,根据可能的 coltype 值,从值中减去 256 并求余数。例如,如果 coltype 值为
262,减去 256 得到余数 6,那么这表示列具有 SERIAL 数据类型。
存储列数据类型
数据库服务器将 coltype 值作为位图存储,如 SYSCOLUMNS 中列示的那样。
不透明数据类型
特定数据类型是由数据库服务器作为内置不透明数据类型来实现的。
内置不透明数据类
型的类型定义由数据库服务器提供。
内置不透明类型没有唯一的 coltype 值。相反,coltype 值基于不透明类型的类别。
以下表列出内置不透明数据类型的 coltype 值:

不透明数据类型的类别
预定义数据类型
coltype 列的值
固定长度不透明类型
BLOB、BOOLEAN 和 CLOB
41
长度可变的不透明类型
LVARCHAR
40
VARCHAR(128) 的 DISTINCT
IDSSECURITYLABEL
2061

使用 sysxtdtypes 系统目录表中的 extended_id 列来区分不同的固定长度不透明类
型。
存储列长度
collength 列值取决于列的数据类型。
基于整数的数据类型
BIGINT、
BIGSERIAL、
DATE、
INTEGER、
INT8、
SERIAL、
SERIAL8 或 SMALLINT 列的 collength
值与机器无关。数据库服务器对 SQL 语言的这些基于整数的数据类型使用以下长度。
基于整数的数据类型
长度(以字节计)
SMALLINT
2
DATE、INTEGER 和 SERIAL
4
INT8 和 SERIAL8
10
BIGINT 和 BIGSERIAL
8

可变长度字符数据类型
对于 LVARCHAR 类型的 GBase 8s 列,collength 具有来自数据类型声明的 max 值或
2048(如果没有指定最大值)。
对于 VARCHAR 或 NVARCHAR 列,max_size 和 min_space 值是使用以下某个公式编码
在 collength 列中:
如果 collength 值是正的:
collength = (min_space * 256) + max_size

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 28 -

如果 collength 值是负的:
collength + 65536 = (min_space * 256) + max_size
时间数据类型
如前面所述,DATE 列在 collength 列中的值为 4。
对于类型为 DATETIME 或 INTERVAL 的列,collength 是使用以下公式确定的:
(length * 256) + (first_qualifier * 16) + last_qualifier
长度是 DATETIME 或 INTERVAL 字段的实际长度,
first_qualifier 和 last_qualifier
具有下表所显示的值。
字段限定符

字段限定符

YEAR
0
FRACTION(1)
11
MONTH
2
FRACTION(2)
12
DAY
4
FRACTION(3)
13
HOUR
6
FRACTION(4)
14
MINUTE
8
FRACTION(5)
15
SECOND
10



例如:如果 DATETIME YEAR TO MINUTE 列长度为 12(例如:YYYY:DD:MO:HH:MI),
first_qualifier 值为 0(用于 YEAR),并且 last_qualifier 值为 8(用于 MINUTE),
那么 collength 值为 3080(由 (256 * 12) + (0 * 16) + 8 计算所得)。
定点数据类型
MONEY 或 DECIMAL(p,s) 列的 collength 值可使用以下公式来计算:
(precision * 256) + scale
简单大对象数据类型
如果列的数据类型为 BYTE 或 TEXT,那么 collength 保存描述符的长度。
存储最大值和最小值
colmin 和 colmax 值分别保存该列中第二小和第二大的数据值。例如:如果索引列中
的各个值为 1、2、3、4 和 5,那么 colmin 值为 2 而 colmax 值为 4。存储第二小的数
据值和第二大的数据值会让查询优化器对列中的值范围进行假设并进一步依次优化搜索策
略。
仅当对列建立了索引并且 UPDATE STATISTICS 语句显式或隐式地计算了列分发时,
colmin 和 colmax 列才会包含值。
如果在表空间中存储 BYTE 或 TEXT 数据,
那么 colmin
值会编码为 -1。
colmin 和 colmax 列仅对适合四个字节的数据类型有效:SMALLFLOAT、SMALLINT、
INTEGER 以及 CHAR 的前四个字节。所有其他非整数列类型的值是最大值或最小值的头四
个字节,它们被视为整数。

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 29 -

使用 UPDATE STATISTICS MEDIUM 比依赖于 colmin 和 colmax 值要好。UPDATE
STATISTICS MEDIUM 提供了更好的信息并且对于所有数据类型都有效。
GBase
8s 不计算用户定义的数据类型的 colmin 和 colmax 值。但是,如果用户定义
的辅助访问方法提供了用户定义的数据类型,那么这些列具有用户定义的数据类型的值。

gbase_query ..................................
33