返回首页

gbase数据、南大通用产品文档:GBase8s将集合值插入到列内

更新日期:2024年09月11日

此部分描述如何使用 DB-Access 将集合值插入到列内。它未讨论如何将个别元素插入到集
合列内。要访问或修改集合的个别元素,
请使用 GBase 8s ESQL/C 程序或 SPL 例程。
要获
取关于如何创建 GBase 8s ESQL/C 程序来插入到集合内的信息,请参阅《GBase 8s ESQL/C
程序员手册》。要获取关于如何创建 SPL 例程来插入到集合内的信息,请参阅 创建和使
用 SPL 例程。
本部分提供的这些示例是基于下图中的 manager 表。
manager 表同时包含简单的和嵌套的集
合类型。
图: 创建 manager 表。
CREATE TABLE manager
(
mgr_name VARCHAR(30),

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 170 -
department VARCHAR(12),
direct_reports SET(VARCHAR(30) NOT NULL),
projects LIST(ROW(pro_name VARCHAR(15),
pro_members SET(VARCHAR(20) NOT NULL))
NOT NULL)
);

将值插入到简单的集合和嵌套的集合内
当您将值插入包含集合列的行内时,您插入集合列包含的所有元素的值以及其他列的值。
例如,下列语句将单个行插入到 manager 表内,该表同时包括简单的集合和嵌套的集合列:
INSERT INTO manager(mgr_name, department,
direct_reports, projects)
VALUES
(
'Sayles', 'marketing',
"SET{'Simonian', 'Waters', 'Adams', 'Davis', 'Jones'}",
LIST{
ROW('voyager_project', SET{'Simonian', 'Waters',
'Adams', 'Davis'}),
ROW ('horizon_project', SET{'Freeman', 'Jacobs',
'Walker', 'Smith', 'Cannan'}),
ROW ('saphire_project', SET{'Villers', 'Reeves',
'Doyle', 'Strongin'})
}
);

将 NULL 值插入到包含 row 类型的集合内
要将值插入到 ROW 类型的集合内,您必须为 ROW 类型中的每一字段指定值。
通常,在集合中不允许 NULL 值。然而,如果集合的元素类型为 ROW 类型,则您可将
NULL 值插入到 row 类型的个别字段内。
您还可指定空集合。
空集合是不包含任何元素的集合。
要指定空集合,
请使用大括号
({})

例如,
下列语句将数据插入到 manager 表中的行内,
但指定 direct_reports 和 projects 列为空
集合:
INSERT INTO manager
VALUES ('Sayles', 'marketing', "SET{}",

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 171 -
"LIST{ROW(NULL, SET{})}"
);
集合列不可包含 NULL 元素。由于指定 NULL 值作为集合的元素,因此下列语句返回一
个错误:
INSERT INTO manager
VALUES ('Cole', 'accounting', "SET{NULL}",
"LIST{ROW(NULL, ""SET{NULL}"")}"
下列语法规则适用于对集合类型执行插入和更新:
使用大括号({})来划分每一集合包含的元素。
如果该集合为嵌套的集合,则使用大括号({})来同时划分内部集合和外部集合的元素。

ifx_var_freevar() 函数释放已为 var binary 和 lvarchar pointer 主变量分配了的内存。

语法
int fix_var_freevar(var_bin)
var binary *var_bin;
var_bin
var binary 或 lvarchar pointer 主变量的地址。
用法
每当您有 var binary 或 lvarchar pointer 主变量时,如下列示例所示,您必须通过
使用 ifx_var_freevar() 函数来显式地释放为它分配的内存。
EXEC SQL var binary ‘polygon’ poly;
EXEC SQL lvarchar *c;

下列示例说明 ifx_var_freevar() 的使用。您必须通过使用 ifx_var_freevar() 函数来显
式地释放已为 var binary 和 lvarchar pointer 主变量分配了的内存。
ifx_var_freevar(&poly);
ifx_var_freevar(&c);

如果您未使用 ifx_var_dealloc() 来释放已为 var binary 主变量的数据缓冲区分配了
的内存,则 ifx_var_freevar() 会这么做。然后,它释放 var binary 和 lvarchar pointer 主
变量的内存。在前面的示例中,在调用了 ifx_var_freevar() 之后,会将 poly 和 c 设置为
空。

返回代码
0
函数成功。
<0
函数不成功,且返回值指示错误的原因。

这个示例将一个简单CASE表达式的值赋给变量appraisal,selector值是 grade。
DECLARE
grade CHAR(1) := 'B';
appraisal VARCHAR2(20);
BEGIN
appraisal :=
CASE grade
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Very Good'
WHEN 'C' THEN 'Good'
WHEN 'D' THEN 'Fair'
WHEN 'F' THEN 'Poor'
ELSE 'No such grade'
END;
DBMS_OUTPUT.PUT_LINE ('Grade ' || grade || ' is ' || appraisal);
END;

--Result:
--Grade B is Very Good

GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 37 -