HSQL 迭代 FOR 语句不起作用

Posted

技术标签:

【中文标题】HSQL 迭代 FOR 语句不起作用【英文标题】:HSQL Iterated FOR Statement not working 【发布时间】:2013-04-17 18:56:00 【问题描述】:

使用 HSQL 2.2.5 我需要颤抖在存储过程中一次处理一行,所以我认为“迭代 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】:

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

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

【讨论】:

谢谢弗雷德。我会试一试,然后告诉你结果如何。 我下载了 2.2.9(想要一个稳定的版本)。它像宣传的那样工作。 :-) 谢谢@fredt!

以上是关于HSQL 迭代 FOR 语句不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Java中带有sum的SQL语句不起作用

HSQL 在 Spring 引导测试中不起作用

jQuery if 语句在 for 循环中不起作用

for循环后的最后一个过程语句在pl sql中不起作用

Liquid - if contains 语句在 for 循环中不起作用

我的迭代器实现不起作用,它有啥问题?