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

While 循环

语法

WHILE  DO

END WHILE

语法元素

	::=  IS [NOT] NULL

::= < | > | = | <= | >= | !=

::= |

::= [{operator}…]

::= | |

::= +|-|/|*

定义求值为真或假的布尔表达式。

 ::= !! SQLScript procedural statements

描述

只要循环开头 的布尔表达式求值为 trueWHILE 循环就会执行循环主体中的 语句。

谓词 x [NOT] BETWEEN lower AND upper 也可以在 的表达式中使用。其工作方式与 [ NOT ] ( x >= lower AND x <= upper) 相同。有关详细信息,请参阅示例 3。

示例 1

使用 WHILE 可使用嵌套循环增加 :v_index1 和 :v_index2 变量。

CREATE PROCEDURE procWHILE (OUT V_INDEX2 INTEGER) LANGUAGE SQLSCRIPT

READS SQL DATA

AS

BEGIN

DECLARE v_index1 INT = 0;

WHILE :v_index1 < 5 DO

v_index2 = 0;

WHILE :v_index2 < 5 DO

v_index2 = :v_index2 + 1;

END WHILE;

v_index1 = :v_index1 + 1;

END WHILE;

END;

示例 2

您还可以将标量 UDF 用于 while 条件,如下所示。

CREATE PROCEDURE proc (in input1 INTEGER, out output1 TYPE1)  

AS

BEGIN

DECLARE i INTEGER DEFAULT :input1;

DECLARE cnt INTEGER DEFAULT 0;

WHILE SUDF(:i) > 0 DO

cnt = :cnt + 1;

i = :i - 1;

END WHILE;

output1 = SELECT value FROM T1 where id = :cnt ;

END;

示例 3

CREATE FUNCTION between_03(x INT)

RETURNS result NVARCHAR(1) AS

BEGIN

DECLARE idx INT = :x;

result = 'O';

WHILE :idx BETWEEN 5 AND 15 DO

idx = :idx + 1;

result = 'X';

END WHILE;

END;

注意不会执行特定检查以避免无限循环。