HANA SQLScript"睡眠"命令

Ped*_*ice 5 sql hana

Sleep(1000)在HANA SQLScript中是否有相应的命令?

我在HANA SQLScript参考中没有看到任何内容,所以我想知道是否可能存在一个不会将CPU固定在100%的创造性解决方法.

Tim*_*o D 5

HANA不支持开箱即用的任何内容.如果你绝对必须拥有这个,我可以想到两种方法

忙着等待

正如SCN上已经建议的那样,您可以创建一个滞留在while循环中的过程,直到达到某个时间阈值.Amid Das先生建议这样的事情:

CREATE PROCEDURE PLEASE_SLEEP ( IN SLEEPING_TIME INTEGER, OUT WOKE_UP_AT TIME )
LANGUAGE SQLSCRIPT READS SQL DATA AS
  V_TIME TIME;
  V_TIME_TO_WAKE TIME;
BEGIN
  V_TIME := CURRENT_TIME;
  V_TIME_TO_WAKE < ADD_SECONDS ( TO_TIME( V_TIME ), SLEEPING_TIME );
  WHILE V_TIME != V_TIME_TO_WAKE DO
    V_TIME := CURRENT_TIME ;
  END WHILE;
  WOKE_UP_AT := V_TIME_TO_WAKE ;
END
Run Code Online (Sandbox Code Playgroud)

我不确定CPU的使用量会有多大,但绝对不是最好的.

使用表锁定超时

这个想法有点疯狂和复杂,但可能只是工作,而不会牺牲太多的CPU能力.

唯一可以"等待"的SQL命令是LOCK TABLE.如果无法获取表锁,此命令将在一定时间后超时.可以使用以下命令设置此超时SET TRANSACTION LOCK WAIT TIMEOUT [number of milliseconds].

现在我们只需要一个可以被过程锁定的表,但也需要一个保持该表被锁定的不同事务.这是棘手的部分.可能有用的是使用XS引擎来安排连续的XS作业,以尽可能长时间地锁定所述表.或者,您可以编写一个Python脚本来保持表的锁定.

这个想法很实验,我自己也没试过.但我相信,如果一切设置正确,它应该可行.