为了进行测试,我需要人为地创建一个缓慢的SQL语句。 我已经设法在Oracle / Java上实现了这一点(详情如下),但我很难在T-SQL / VB.Net / SQLServer中实现相同的目标。
我们的想法是拥有一个只能睡几下(比如说5秒)并返回一个虚拟值的函数。
我已尝试(作为替代方案)使用'waitfor'T-SQL,但这在FUNCTIONS中是不允许的(副作用显然);所以我在想(除了创建大量的表,或者旋转嵌套的空循环),最好的方法是通过CLR对象....
有人可以提供一些简单的步骤来实现这一目标吗?
以下是我在Oracle中遵循的步骤: 首先创建一个Java类来进行休眠:
package com.monojohnny;
public class sleepy {
public static String sleep() {
int seconds=5;
try {
Thread.sleep(seconds * 1000);
}
catch(Exception e) { ; }
return "Finished Sleeping for "+Integer.toString(seconds)+" seconds.";
}
}
其次,编译它,例如:
javac -source 1.4 -target 1.4 com/monojohnny/sleepy.java
第三,将生成的.class文件加载到Oracle DB中:
call loadjava -user %username%/%password% com\monojohnny\sleepy.class
最后,创建一个PL / SQL函数来调用类的方法:
CREATE OR REPLACE FUNCTION sleepy RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'com.monojohnny.sleepy.sleep() return java.lang.String';
/
show errors
quit;
这是测试功能的结果:
SQL> select sleepy from dual;
Finished Sleeping for 5 seconds
答案 0 :(得分:1)
CREATE FUNCTION dbo.wait()
RETURNS INT
AS
BEGIN
DECLARE @i INT = (
SELECT TOP 1 1
FROM OPENQUERY(DW, 'waitfor delay ''00:00:05.000'' select 1 as n')
);
RETURN 1;
END;
GO