代码之家  ›  专栏  ›  技术社区  ›  John Siracusa

从Informix SPL过程中睡眠

  •  2
  • John Siracusa  · 技术社区  · 18 年前

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

    @RET-这个“明显的”答案对我来说并不明显!我不知道系统命令。非常感谢。(是的,我就是你想象中的那个人。)


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

    “当SPL函数启动时,EXECUTE function(或EXECUTE PROCEDURE)语句调用的SPL函数内部对CURRENT的任何调用都会返回系统时钟值。”

    — IBM Informix Guide to SQL

    4 回复  |  直到 14 年前
        1
  •  2
  •   RET    18 年前

    你不想得到明显的答案肯定有很好的理由: SYSTEM "sleep 5" . 如果您只想让SPL在检查各种值等时暂停,那么以下是一些想法(当然,所有这些都是彻底的破解):

    1. 将跟踪文件设为命名管道(假定为Unix后端),使其阻塞,直到您选择从中读取,或者
    2. 创建另一个表,让SPL从WHILE循环中轮询特定条目,并从其他地方插入所述行(效率极低)

    希望这能有所帮助(如果你是Ars和Rose::DB fame的JS,这是我至少能做的;-)

        2
  •  1
  •   robsosno    8 年前

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

    How to sleep (or yield) for a fixed time in a stored procedure 不幸的是,该网站已关闭。

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

    integer sysadmin:yieldn( integer nseconds )
    
        3
  •  0
  •   PW.    18 年前

    我假设您希望此“暂停”用于调试目的,否则请考虑一下,您的服务器总是有比睡眠更好的任务要做。。。

    建议:也许您可以获取当前值,将其添加几秒钟(让mytimestamp),然后在while循环中选择CURRENT while CURRENT<=我的时间戳。我的办公桌上没有informix安装程序来尝试它,因此您必须找到正确的语法。同样,不要在生产服务器上进行此类攻击。你已经被警告过了:D

        4
  •  0
  •   PW.    18 年前

    推荐文章