使用HSQL 2.2.5 我需要在存储过程中一次处理一行,所以我认为“迭代 FOR”语句可能对我有用。不幸的是,我似乎无法让它发挥作用。它应该看起来像:
FOR SELECT somestuff FROM sometable DO 一些随机的 SQL 语句 END FOR;
这留下了一些语法,但现在已经足够接近了。
问题似乎是循环内的语句永远不会执行。我已经验证了我的 SELECT 语句确实返回了一些东西。
所以让我们具体一点。当我执行这个存储过程时:
CREATE PROCEDURE b()
MODIFIES SQL DATA
BEGIN ATOMIC
DECLARE count_var INTEGER;
SET count_var = 0;
WHILE count_var < 10 DO
INSERT INTO TTP2 VALUES(count_var);
SET count_var = count_var + 1;
END WHILE;
END;
我将 10 行插入到表 TTP2 中,值从 0 到 9。(TTP2 只定义了一列,类型为 INTEGER。)
但是当我像这样用 FOR 语句代替 WHILE 时:
CREATE PROCEDURE c()
MODIFIES SQL DATA
BEGIN ATOMIC
DECLARE count_var INTEGER;
SET count_var = 0;
FOR SELECT id FROM ttp_by_session FETCH 10 ROWS ONLY DO
INSERT INTO TTP2 VALUES(count_var);
SET count_var = count_var + 1;
END FOR;
END;
我没有任何东西插入到 TTP2 中。(我已经验证 SELECT 语句返回 10 行,一列整数。)
当我关闭 FETCH 子句时,我仍然没有得到任何结果。ttp_by_session 是一个视图,但同样的事情发生在一个裸表上。
我究竟做错了什么?
谢谢您的帮助。