テストのために、遅い 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
3 番目に、結果の .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