返回首页

gbase数据、南大通用产品文档:GBase8s主要内容

更新日期:2024年09月11日

本出版物涵盖全部 GBase 8s 错误消息,按照错误消息代码罗列,并提供纠错对策。
本出版物针对以下用户编写:

数据库用户

数据库管理员

数据库应用程序程序员
本手册假定您具备以下背景:

对于计算机、操作系统和操作系统提供的实用程序的工作知识

使用关系数据库经验或熟悉数据库概念

一些计算机编程经验

GBase 8s 产品可以支持多种语言、文化和代码集。由给定地域和编码中语言使用的与数字
数据、货币、日期和时间的字符集、整理和表示法相关的所有信息都集中在称为 Global
Language Support (GLS) 语言环境的单个环境中。
GBase 8s OLE DB Provider 遵循用于日期、时间和货币的 ISO 字符串格式,如 Microsoft™
OLE DB 标准所定义。可以通过设置 GBase 8s 环境变量或注册表项(如 DBDATE)来覆
盖该缺省值。
如果在 GBase 8s 环境中使用简单网络管理协议 (SNMP),请注意,这些协议(SNMPv1 和
SNMPv2)仅识别英语代码集。有关更多信息,请参阅《GBase 8s SNMP Subagent 指南》
中有关 GLS 和 SNMP 的主题。
本出版物中的示例在编写时假设您使用以下某种语言环境:UNIX™ 平台上的 en_us.8859-1
(ISO 8859-1) 。这些语言环境支持用于显示和输入日期、时间、数字和货币值的美国英语
格式约定。它们还支持 ISO 8859-1 代码集(在 UNIX 和 Linux™ 上),这些代码集包括
ASCII 代码集以及很多 8 位字符(如 é、è 和 ñ)。
如果您计划在数据或 SQL 标识中使用其他语言环境中的字符,或者希望符合字符数据的
其他整理规则,那么可以指定其他语言环境。
有关如何指定语言环境、附加语法的指示信息以及与 GLS 语言环境相关的其他注意事项,
请参阅《GBase 8s GLS 用户指南》。

在您将集合检索至集合变量内之后,您可将值插入至该集合变量。INSERT 语句的语法略
有不同,这依赖于您想要条件到的 集合的类型。

插入至 SET 或 MULTISET 内
要插入至存储在集合变量中的 SET 或 MULTISET 内,请使用 INSERT 语句,并跟在带
有集合变量的 TABLE 关键字之后,如下图所示。
图: 插入至存储在集合变量中的 SET 或 MULTISET 内。
INSERT INTO TABLE(p_coll) VALUES(3);
TABLE 关键字使得集合变量成为集合派生的表。在 处理 SELECT 语句中的集合 部分中
描述集合派生的表。前图派生的集合是一列的虚拟表,集合的每一元素表示表的一行。在
插入之前,请将 p_coll 考虑作为包含下图展示的行(元素)的虚拟表。
图: 虚拟表元素。
5

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

7
31
19
13
在插入之后,p_coll 可能看上去像下图所示的虚拟表一样。
图: 虚拟表元素。
5
7
31
19
13
3
由于该集合为 SET,因此,将新的值添加到该集合,但未定义新元素的位置。对于
MULTISET ,适用同样的原理。
提示: 您一次仅可将一个值插入至简单的集合内。

插入至 LIST 内
如果集合为 LIST,则您可将新的元素添加在 LIST 中的特定点,或添加在 LIST 的末尾。
如同 SET 或 MULTISET 一样,
您必须首先定义集合变量,
并从数据库将集合选择至该集
合变量内。
下图展示您需要定义集合变量并从 numbers 表选择 LIST 至该集合变量内的语句。
图: 定义集合变量并选择 LIST。
DEFINE e_coll LIST(INTEGER NOT NULL);

SELECT evens INTO e_coll FROM numbers
WHERE id = 99;
此时,e_coll 的值可能为 LIST {2,4,6,8,10}。由于 e_coll 保存 LIST,因此,每一元素有在
该列表中的编号的位置。
要将元素添加在 LIST 中特定的位置,
请将 AT position 子句添加
到 INSERT 语句,如下图所示。
图: 将元素添加在 LIST 中特定的点。
INSERT AT 3 INTO TABLE(e_coll) VALUES(12);
现在,e_coll 中的 LIST 有元素 {2,4,12,6,8,10},依此顺序。
您在 AT 子句中为 position 输入的值可为数值或变量,但它必须有 INTEGER 或
SMALLINT 数据类型。您不可使用字母、浮点数值、十进制值或表达式。

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


检查 LIST 集合的基数
有时,您可能想要将元素添加在 LIST 的末尾。在此情况下,您可使用 cardinality() 函数来
找到 LIST 中的元素的编号,然后输入一个大于cardinality() 返回的值的位置。
GBase 8s 允许您随同存储在列中的集合来使用 cardinality() 函数,
但不允许随同存储在集合
变量中的集合来使用。在 SPL 例程中,您可以 SELECT 语句检查列中的集合的基数,并
将该值返回给变量。
假设在 numbers 表中,其 id 列为 99 的那一行的 evens 列仍然包含集合 LIST {2,4,6,8,10}。
这一次,您想要将元素 12 添加在该 LIST 的末尾。您可使用 SPL 过程 end_of_list 实现,
如下图所示。
图: end_of_list SPL 过程。
CREATE PROCEDURE end_of_list()

DEFINE n SMALLINT;
DEFINE list_var LIST(INTEGER NOT NULL);

SELECT CARDINALITY(evens) FROM numbers INTO n
WHERE id = 100;

LET n = n + 1;

SELECT evens INTO list_var FROM numbers
WHERE id = 100;

INSERT AT n INTO TABLE(list_var) VALUES(12);

END PROCEDURE;
在 end_of_list 中,
变量 n 保存 cardinality() 返回的值,
即,
LIST 中的项数。
LET 语句使 n 递
增,
以便于 INSERT 语句可在 LIST 的最后的位置插入值。
SELECT 语句将来自该表的一
行的集合选择至集合变量 list_var 内。INSERT 语句将元素 12 插入在该列表的结尾。

VALUES 子句的语法
当您插入至 SPL 集合变量内时,VALUES 子句的语法与当您插入至集合列内时是不一样
的。将文字插入至集合变量内的语法规则如下:
在 VALUES 关键字之后使用圆括号来括起值的完整列表。

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

如果您正在插入至简单的集合内,则无需使用类型构造函数或方括号。
如果您正在插入至嵌套的集合,则您需要指定文字的集合。