返回首页

gbase数据、南大通用产品文档:GBase8s删除集合元素

更新日期:2024年09月11日


GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 305 -
在您将个别的元素从集合变量选择至元素变量内之后,您可从集合删除该元素。例如,在
您以集合查询从集合变量 vertexes 选择一个点之后,您可将该点从集合移除。
删除集合元素涉及的步骤包括:
1.
声明集合变量和元素变量。
2.
将集合从数据库选择至集合变量内。
3.
声明游标,以便于您可从集合变量一次选择一个元素。
4.
编写定位您想要删除的元素的循环或分支。
5. 使用 DELETE WHERE CURRENT OF 语句来从集合删除元素,
该语句使用集合变
量作为集合派生的表。
下图展示删除 vertexes 中四个点之一的例程,以便于多边形成为三角形,而不是矩形。
图: 删除四个点之一的例程。
CREATE PROCEDURE shapes()

DEFINE vertexes SET( point NOT NULL );
DEFINE pnt point;

SELECT definition INTO vertexes FROM polygons
WHERE id = 207;

FOREACH cursor1 FOR
SELECT * INTO pnt FROM TABLE(vertexes)
IF pnt = '(3,4)' THEN
-- calls the equals function that
-- compares two values of point type
DELETE FROM TABLE(vertexes)
WHERE CURRENT OF cursor1;
EXIT FOREACH;
ELSE
CONTINUE FOREACH;
END IF;
END FOREACH
. . .
END PROCEDURE;
在前图中,FOREACH 语句声明游标。SELECT 语句是集合派生的查询,从集合变
量 vertexes 一次将选择一个元素至元素变量 pnt。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 306 -
IF THEN ELSE 结构测试当前在 pnt 中的值,看它是否为点 '(3,4)'。请注意,表达式 pnt =
'(3,4)' 调用在点数据类型上定义的 equal() 函数的实例。如果 pnt 中的当前值为 '(3,4)',则
DELETE 语句删除它,且 EXIT FOREACH 语句退出该游标。
提示: 从存储在集合变量中的集合删除元素,未将它从存储在数据库中的集合删除。在您从集
合变量删除元素之后,您必须以新的集合更新存储在数据库中的集合。要了解展示如何更新集
合列的示例,请参阅 更新数据库中的集合。
在《GBase 8s SQL 指南:语法》中描述 DELETE 语句的语法。

更新数据库中的集合
在您(通过删除、更新或插入元素)更改 SPL 例程中集合变量的内容之后,您必须以新的
集合更新数据库。
要更新数据库中的集合,请添加一个设置表中的集合列的 UPDATE 语句,设置为更新了
的集合变量的内容。例如,下图中的 UPDATE 语句展示如何更新 polygons 表,来
将 definition 列设置为存储在集合变量 vertexes 中的新集合。
图: 更新数据库中的集合。
CREATE PROCEDURE shapes()

DEFINE vertexes SET(point NOT NULL);
DEFINE pnt point;

SELECT definition INTO vertexes FROM polygons
WHERE id = 207;

FOREACH cursor1 FOR
SELECT * INTO pnt FROM TABLE(vertexes)
IF pnt = '(3,4)' THEN
-- calls the equals function that
-- compares two values of point type
DELETE FROM TABLE(vertexes)
WHERE CURRENT OF cursor1;
EXIT FOREACH;
ELSE
CONTINUE FOREACH;
END IF;
END FOREACH

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

UPDATE polygons SET definition = vertexes
WHERE id = 207;

END PROCEDURE;
现在,shapes() 例程完成。在您运行 shapes() 之后,更新存储在其 ID 列为 207 的行中的集
合,以便于它包含三个值,而不是四个。
您可使用 shapes() 例程作为框架,来编写操纵集合的其他 SPL 例程。
出现在存储在 polygons 表的 207 的 definition 列中的集合的元素罗列如下:
'(3,1)'
'(8,1)'
'(8,4)'

删除整个集合
如果您想要删除集合的所有元素,您可使用单个 SQL 语句。您无需声明游标。要删除整
个集合,您必须执行下列任务:

定义集合变量。

将该集合从数据库选择至集合变量内。

输入使用集合变量作为集合派生的表的 DELETE 语句。

更新来自数据库的集合。
下图展示您可能在 SPL 例程中用于删除整个集合的语句。
图: 删除整个集合的 SPL 例程。
DEFINE vertexes SET( INTEGER NOT NULL );

SELECT definition INTO vertexes FROM polygons
WHERE id = 207;

DELETE FROM TABLE(vertexes);

UPDATE polygons SET definition = vertexes
WHERE id = 207;
此种形式的 DELETE 语句删除集合变量 vertexes 中的整个集合。
您不可使用一个使用集合
派生的表的 DELETE 语句中的 WHERE 子句。
在 UPDATE 语句之后,polygons 表包含空的集合,其中 id 列等于 207。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 308 -
在 GBase 8s SQL 指南:语法 中描述 DELETE 语句的语法。

COVAR_POP()
函数说明
返回一对表达式的总体协方差。返回的结果为double 数据类型。
语法
COVAR_POP( expression1, expression2)
表5- 31 参数说明

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
866
参数名称


expression1
数值表达式
expression2
数值表达式
注意
COVAR_POP 函数计算将忽略expression1 或expression2 为NULL
值的记录。
示例
create table all_tables(owner int, avg_row_len int, avg_space int);
insert into all_tables values(1, 1241,
2446);
insert into all_tables values(1, 1158,
1028);
insert into all_tables values(1,
332,
621);
insert into all_tables values(1,
126,
408);
insert into all_tables values(1,
173,
1222);
insert into all_tables values(1,
180,
834);
insert into all_tables values(1,
96,
702);
insert into all_tables values(1,
285,
158);
insert into all_tables values(1,
null,
159);
insert into all_tables values(1,
190, null);
insert into all_tables values(1, null,null);
insert into all_tables values(2, 1,
2);
insert into all_tables values(2, 3,
4);
insert into all_tables values(2,
5,
6);
gbase> SELECT owner,covar_pop(avg_row_len, avg_space) from all_tables
group by owner;
+-------+-----------------------------------+
| owner | covar_pop(avg_row_len, avg_space) |
+-------+-----------------------------------+
|
2 |

使用 PSM_DEBUG_LOG 环境变量,可以为您的环境(例如,单个会话)指定 GBase 8s
Primary Storage Manager 调试日志的位置。

pathname $GBASEDBTDIR/psm_debug.log 的位置的完整路径名。如果仅指定文件
名,那么存储管理器将在您启动存储管理器的工作目录中创建调试日志。
PSM_DEBUG_LOG 环境变量会覆盖 PSM_DEBUG_LOG 配置参数的值。