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 作为受影响的行数