HANA SQLScript中是否有等效的Sleep(1000)
命令?
我在HANA SQLScript参考中没有看到任何内容,因此我想知道是否可能存在一个创造性的解决方法,它不会使CPU达到100%。
答案 0 :(得分: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
我不确定CPU的使用量有多大,但绝对不是最好的。
这个想法有点疯狂和复杂但可能会起作用,而不会牺牲太多的CPU能力。
唯一可以&#34;等待&#34;的SQL命令是LOCK TABLE
。如果无法获取表锁,此命令将在一定时间后超时。可以使用SET TRANSACTION LOCK WAIT TIMEOUT [number of milliseconds]
设置此超时。
现在我们只需要一个可以被程序锁定的表,但也需要一个不同的事务来保持该表被锁定。这是棘手的部分。可能有用的是使用XS引擎来安排连续的XS作业,以尽可能长时间地锁定所述表。或者,您可以编写一个Python脚本来保持表的锁定。
这个想法很实验,我自己也没试过。但我相信,如果一切设置正确,它应该可行。
答案 1 :(得分:0)
您可以尝试使用库SYNCLIB中的SLEEP_SECONDS过程。 我正在使用SAP HANA Platform 2.0 SPS 02及其工作。
使用示例:
BEGIN:
USING SQLSCRIPT_SYNC AS SYNCLIB;
CALL SYNCLIB:SLEEP_SECONDS(<TIME_IN_SECONDS>);
END;