在 Informix SPL 例程中执行与传统 sleep() 系统调用语义等效的最佳方法是什么?换句话说,只需“暂停” N 秒(或毫秒或其他什么,但几秒就可以了)。我正在寻找一种解决方案,它不涉及将一些新的(可能由我编写的)C 代码或其他库链接到 Informix 服务器。这必须是我可以完全从 SPL 做的事情。 IDS 10 或 11 的解决方案就可以了。

@RET - “明显”的答案对我来说并不明显!我不知道 SYSTEM 命令。谢谢! (是的,我就是你认为的那个人。)

是的,它仅用于调试目的。不幸的是,SPL 中的 CURRENT 将始终返回相同的值,设置在调用的入口处:



将 CURRENT 包装在它自己的子程序中没有帮助。在第一次调用包装器时,您确实会得到不同的答案(前提是您使用的是 YEAR TO FRACTION(5) 或其他具有足够高分辨率的其他类型以显示差异),但随后您会在每一个上得到相同的值后续调用,确保任何类型的循环永远不会终止。

最佳答案

你不想要明显的答案肯定有一些很好的理由:SYSTEM "sleep 5" 。如果您只想让 SPL 在检查各种值等时暂停,这里有一些想法(当然,所有这些都是彻头彻尾的黑客攻击):

  • 使 TRACE FILE 成为命名管道(假设是 Unix 后端),因此它会阻塞,直到您选择从中读取,或者
  • 创建另一个表,让您的 SPL 轮询 WHILE 循环中的特定条目,并从其他地方插入所述行(效率极低)
  • 使 SET LOCK MODE 成为您的 friend :执行“SET LOCK MODE TO WAIT n”并故意重新查询您已经在其上打开游标的表。当然,您需要将其包装在 EXCEPTION 处理程序中。

  • 希望这是一些帮助(如果你是 Ars 和 Rose::DB 的同一个 JS,这是我至少能做的 ;-)

    10-08 17:19