在Informix SPL例程中执行传统sleep()系统调用的语义等价物的最佳方法是什么?换句话说,只需“暂停”N秒(或毫秒或其他,但秒可以)。我正在寻找一种解决方案,不涉及将一些新的(可能是我编写的)C代码或其他库链接到Informix服务器。这必须是我纯粹可以从SPL那里做的事情。 IDS 10或11的解决方案没问题。
@RET - “显而易见”的答案对我来说并不明显!我不知道SYSTEM命令。谢谢! (是的,我是你认为我的那个人。)
是的,它仅用于调试目的。不幸的是,SPL中的CURRENT将始终返回相同的值,在调用的条目处设置:
“在SPL函数内部对EXRUTE FUNCTION(或EXECUTE PROCEDURE)语句调用时对CURRENT的任何调用都会在SPL函数启动时返回系统时钟的值。”
- IBM Informix Guide to SQL
将CURRENT包装在自己的子程序中没有用。你第一次调用你的包装器时会得到一个不同的答案(前提是你使用YEAR TO FRACTION(5)或其他一些具有足够高分辨率的类型来显示差异)但是你会得到相同的值。后续调用,确保任何类型的循环永远不会终止。
答案 0 :(得分:1)
必须有一些充分的理由让你不想要明显的答案:
SYSTEM "sleep 5"
。如果您想要的是SPL在您检查各种值等时暂停,那么这里有几个想法(当然所有这些都是彻底的黑客攻击):
希望这是一些帮助(如果你是同一个Ars和Rose :: DB成名的JS,那是我能做的最少的事情; - )
答案 1 :(得分:0)
我认为你希望这个“暂停”用于调试目的,否则考虑一下,你总是会为你的服务器做一些比睡眠更好的任务......
建议:也许你可以获得CURRENT,添加它几秒钟(让mytimestamp)然后在while循环中选择CURRENT而CURRENT< = mytimestamp。我的办公桌周围没有设置informix来尝试它,所以你必须找到正确的语法。同样,不要在生产服务器上放置这样的黑客。你已被警告:D
答案 2 :(得分:0)
然后你必须在另一个你将从第一个调用的函数中扭曲CURRENT(但这是对前一个hack的攻击......)。
答案 3 :(得分:0)
我知道答案为时已晚。但是我最近遇到了同样的问题,该站点显示为第一个。因此,对其他人来说,在这里放置新的保险柜是有益的。
完美解决方案由埃里克·赫伯(Eric Herber)找到,并于2012年4月发布在这里:How to sleep (or yield) for a fixed time in a stored procedure 不幸的是,该站点已关闭。
他的解决方案是使用以下功能:
integer sysadmin:yieldn( integer nseconds )