在Informix SPL例程中执行传统sleep()系统调用的语义等价物的最佳方法是什么? 换句话说,只需“暂停”N秒(或毫秒或其他,但秒可以)。 我在寻找涉及链接了一些新的(也许是我写的)C代码或其他库到Informix服务器的解决方案。 这必须是我纯粹可以从SPL那里做的事情。 IDS 10或11的解决方案没问题。

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


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

- IBM Informix SQL指南

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

===============>>#1 票数:1 已采纳

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

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

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

===============>>#2 票数:0

我知道答案太晚了。 但是我最近遇到了同样的问题,这个网站显示为第一个。 所以在这里放置新的anwser对其他人是有益的。

Eric Herber发现了完美的解决方案并于2012年4月发布: 如何在存储过程中固定时间睡眠(或产量)不幸的是这个网站已关闭。

他的解决方案是使用以下功能:

integer sysadmin:yieldn( integer nseconds )

===============>>#3 票数:0

我认为你希望这个“暂停”用于调试目的,否则考虑一下,你总是会为你的服务器做一些比睡眠更好的任务...

一个建议:也许你可以获得CURRENT,添加它几秒钟(让mytimestamp)然后在while循环中选择CURRENT而CURRENT <= mytimestamp。 我的办公桌周围没有设置informix来尝试它,所以你必须找到正确的语法。 同样,不要在生产服务器上放置这样的黑客。 你被警告了:D

===============>>#4 票数:0

然后你必须在另一个你将从第一个调用的函数中扭曲CURRENT(但这是对前一个hack的攻击......)。

  ask by John Siracusa translate from so

未解决问题?本站智能推荐: