将集合查询添加至 SPL 例程

现在,您可将以 FOREACH 定义的游标和集合查询添加至 SPL 例程,如下例所示。

图: 以 FOREACH 定义的游标和集合查询。

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)
            . . .
            END FOREACH
            . . .
            END PROCEDURE;

以上展示的语句形成处理集合变量的元素的 SPL 例程的框架。要将集合分解为它的元素,请使用集合派生的表。在将集合分解为它的元素之后,该例程可单独地访问元素作为集合派生的表的行。既然您已选择了 pnt 中的一个元素,您就可更新或删除那个元素,如 更新集合元素删除集合元素 描述的那样。

要了解集合查询的完整语法,请参阅 GBase 8s SQL 指南:语法 中的 SELECT 语句。要了解集合派生的表的语法,请参阅 GBase 8s SQL 指南:语法 中的“集合派生的表”段。

提示: 如果您正在从不包含元素或包含零元素的集合选择,则您可使用未声明游标的集合查询。然而,如果该集合包含多个元素,且您未使用游标,则您会收到错误消息。
注意: 在上述程序段中,如果 FOREACH 游标定义内的查询(
SELECT * INTO pnt FROM TABLE(vertexes)
)已以分号(;)作为语句终止符终止了,则数据库服务器可能已发出了语法错误。在此,END FOREACH 关键字是逻辑的语句终止符。