Informix SQL 11.5 — 在 while 循环中访问变量

Posted

技术标签:

【中文标题】Informix SQL 11.5 — 在 while 循环中访问变量【英文标题】:Informix SQL 11.5 — access to variable in while loop 【发布时间】:2020-09-29 17:27:34 【问题描述】:

我有一个这样的while循环:

CREATE PROCEDURE  PROCEDURE1()

  WHILE EXISTS (SELECT c1 FROM table1)
   --how can to  get c1?
  END WHILE;

END PROCEDURE;

很遗憾,这个解决方案不起作用:

  CREATE PROCEDURE  PROCEDURE1()
   Define c1 type1;
   Let c1 = value1;
   WHILE EXISTS (SELECT c1 FROM table1)
   --c1 is not updated after select
    END WHILE;

如何在while循环中访问c1?

【问题讨论】:

请注意,Informix 11.50 已停止服务一段时间,11.70 将于 2020 年 9 月结束。您的目标应该是升级到更新版本的 Informix — 最好是 14.10,但12.10 是一种替代方案,尽管它会比 14.10 更快地停止服务。 【参考方案1】:

您的代码并不完全一致,因此难以可靠地为您提供帮助,但这应该接近您的需要:

CREATE PROCEDURE procedure1()

    DEFINE r1 TYPE1;      -- Pick your type here
    FOREACH SELECT c1 INTO r1 FROM Table1
        -- r1 contains the value from the column c1 in the current row
        -- in the table; use it
    END FOREACH

END PROCEDURE;

虽然您可以将名称 r1 替换为 c1,但这可能会引起混淆。 您可以调整 SELECT 语句以满足您的需要,添加 DISTINCT 或将值传递到过程并对其进行过滤等。如果没有匹配的行(因此您要查找的内容不存在),则循环不会被执行。

我保留在 SELECT 语句后省略分号的权利。

【讨论】:

以上是关于Informix SQL 11.5 — 在 while 循环中访问变量的主要内容,如果未能解决你的问题,请参考以下文章

Informix SQL 11.5 将查询结果存储在具有动态名称的文件中

Informix SQL 11.5 创建没有临时表的存储过程

Informix SQL 11.5 按列将一个选择的结果附加到另一个选择

在 UPDATE 查询中使用 DateTime 或字符串参数时,Informix 11.7 返回 -1 作为受影响的行数

我应该使用哪个 Informix JDBC 驱动程序?

informix SQL查询咨询