0

为了测试,我需要人为地创建一个慢速 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
4

1 回答 1

1

查看此链接: http ://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/e8f32710-9424-48a8-8de1-523457ea291f

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
于 2013-06-07T21:40:12.150 回答