【发布时间】:2016-10-17 13:15:48
【问题描述】:
我用“Groovy-SQL”(=Java JDBC Wrapper)编写了一个通用的 SQL 选择语句执行器。它有一个超时功能。
为了在自动化集成测试中测试超时功能,我想发出一个 SQL 选择,例如
SELECT sleep(10) from DUAL;
应该运行 10 秒然后返回。喜欢MySql的http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html#function_sleep。
Oracle 中是否也有类似的东西来模拟“长时间运行”的查询?我想要一个普通 SQL 查询,没有任何 PL/SQL 或像 Sleep function in ORACLE 讨论中那样的特殊授权。
【问题讨论】:
-
我能想到一件可怕的事情:尝试找到一个触发灾难性回溯的正则表达式并将其用于
REGEXP_LIKE。您将无法调节超时,如果您成功了,您的 DBA 会讨厌您,但它将仅是 SQL... -
非常丑陋但非常酷的想法@JeroenMostert!
-
请,请不要在生产系统上使用它。由此产生的 CPU 峰值不会很漂亮。 (我假设 Oracle 有办法解决失控线程,但我没有经验。)
-
当然,@JeroenMostert。我会在测试实例上发出它并在假设 1 秒后中止该语句。这里有趣的部分是 Oracle 是否可以在内部真正杀死(中断)缓慢的正则表达式。