您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

在结果集中循环

语法

FOR  AS [()] DO 

| {.}

END FOR

语法元素

 ::= 

定义包含行结果的标识符。

 ::= 

指定要打开的游标的名称。

 ::= [,{}...]

指定要传递到游标的 select 语句的一个或多个参数。

 ::= 

指定要传递给游标的标量值。

 ::= !! SQLScript procedural statements

定义将要循环的过程语句。

. ::= !! Provides attribute access

要访问循环主体中的行结果属性,请使用显示的语法。

描述

打开先前声明的游标,遍历绑定到该游标的查询结果集中的每一行。过程主体中的语句是针对结果集中的每一行执行的。处理完游标的最后一行后,将退出循环并关闭游标。 提示由于此循环方法负责打开和关闭游标,因此可以避免资源泄漏。因此,此循环优先于显式打开和关闭游标并使用其它循环变式。

在循环主体中,可以像访问游标属性一样访问游标当前迭代的行属性。假设 是 a_row 且迭代的数据包含列 test,那么可以使用 a_row.test 访问此列的值。

示例

以下示例演示如何使用 FOR -loop 对 c_cursor1 的结果进行循环。

CREATE PROCEDURE foreach_proc() LANGUAGE SQLSCRIPT AS

BEGIN

DECLARE v_isbn VARCHAR(20) = '';

DECLARE CURSOR c_cursor1 (v_isbn VARCHAR(20)) FOR

SELECT isbn, title, price, crcy FROM books

ORDER BY isbn;

FOR cur_row AS c_cursor1(v_isbn)

DO

CALL ins_msg_proc('book title is: ' || :cur_row.title);

END FOR;

END;