HSQL迭代FOR语句不起作用

时间:2013-04-17 18:56:01

标签: hsqldb

使用HSQL 2.2.5我需要在存储过程中一次 shudder 处理一行,所以我认为“Iterated FOR”语句可能对我有用。不幸的是,我似乎无法使其发挥作用。它应该看起来像:

FOR SELECT somestuff from sometable DO    一些随机的SQL语句 结束;

这留下了一些语法,但现在已足够接近。

问题似乎是循环内的语句永远不会执行。我已经验证我的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;

我在表TTP2中插入10行,值为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是一个视图,但裸桌会发生同样的事情。

我做错了什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这适用于最新版本的HSQLDB。尝试使用HSQLDB网站上的2.3.0版本候选快照。

当FOR语句最初在大约两年前添加时,它的功能有限。该功能在以后的版本中得到了扩展。