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

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
4

1 に答える 1