返回首页

gbase数据、南大通用产品文档:GBase8s从集合中选择

更新日期:2024年09月11日

本节描述如何查询对集合类型定义的列。集合类型是一种复杂 数据类型。其中每个集合值
包含具有相同数据类型的一组元素。有关集合数据类型的详细描述,请参阅《GBase 8s 数
据库设计和实现指南》

有关如何访问集合包含的个别元素的信息,
请参阅处理 SELECT 语
句中的集合。
下图显示 manager 表,
在本节的示例中使用了该表。
manager 表同时包含简单集合类型和嵌
套集合类型。简单集合是一种集合类型。它不包含本身就是集合类型的任何字
段。 manager 表的 direct_reports 列就是一个简单集合。嵌套集合是包含另一集合类型的集
合类型。manager 表的projects 列就是一个嵌套集合。
图: manager 表
CREATE TABLE manager
(
mgr_name VARCHAR(30),
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 表的每一行返回 department 列中的数据和 direct_reports 列中的所有
元素的查询。
图: 查询
SELECT department, direct_reports FROM manager
图: 查询结果
department marketing
direct_reports SET {Smith, Waters, Adams, Davis, Kurasawa}

department engineering
ddirect_reports SET {Joshi, Davis, Smith, Waters, Fosmire, Evans,
Jones}

department publications
direct_reports SET {Walker, Fremont, Porat, Johnson}


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

department accounting
direct_reports SET {Baker, Freeman, Jacobs}

对集合类型查询的输出总是包括类型构造函数,它指定集合是 SET 、MULTISET 或
LIST 。例如:在此结果中,SET 构造函数位于每个集合的元素前面。花括号({})划分
集合的元素;逗号隔开集合的个别元素。



sword GCIStringAllocSize (
GCIEnv *envhp,
GCIError *errhp,
const GCIString *vs,
ub4 *allocsize
);

GBase 8s GCI 接口使用指南

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

获取字符串内存的分配大小(以代码点 (Unicode) 或字节为单位),分配的大小大于或等
于实际字符串大小。 参数
输入
/输出


envhp
输入/输出 环境句柄
errhp
输入/输出 错误信息句柄,该接口调用失败时,错误信息会存在该句柄上
vs
输入
返回其分配大小(以字节为单位)的字符串。vs 参数必须是非
NULL 指针
allocsize
输出
返回分配的字符串内存大小(以字节为单位)


如果执行成功,返回 GCI_SUCCESS,否则返回 GCI_ERROR。

包含列分隔符的第一个字符的数据的导出
问题现象
包含列分隔符的第一个字符的数据的导出。
解决方法
由于导出数据中包含列分隔符的第一个字符,这时导出程序会给数据中与列分隔
符第一个字符重复的字符进行转义。
举例如下:
数据库里的数据:

GBase 8a MPP Cluster 最佳实践
5 FAQ
文档版本(2022-02-11)
南大通用数据技术股份有限公司
148
col1
col2
a
1|2|3

第一种情况:分隔符是“|@$”时,直接使用select 命令导出数据:
a|@$1\|2\|3
由于“|”被加了转义符,所以在导入的时候出现错误。

第二种情况:分隔符是“@$”时,直接使用select 命令导出数据:
a@$1|2|3
由于“|”没有加转义符,此时导入数据是正确的。

第三种情况:
分隔符是“|@$”时,
使用select 命令并增加escaped by 导出数据:
a@$1|2|3
由于“|”没有加转义符,此时导入数据是正确的。
结论:在数据内容包含列分隔符首字符时,需要增加escaped by,以解决转义问
题。