1

「ジャストインタイム」で C# のパイプライン関数からデータを選択したい。つまり、関数は (ステータス レポートのように) 毎秒行をパイプ処理し、C# でデータをすぐに取得したいと考えています。

これまでのところ、次のものがあります。

        Oracle.DataAccess.Client.OracleConnection con = new Oracle.DataAccess.Client.OracleConnection("my_connection_string");

        con.Open();

        Oracle.DataAccess.Client.OracleCommand cmd = new Oracle.DataAccess.Client.OracleCommand("SELECT * FROM TABLE(MYPACKAGE.TEST_PIPELINE(10))", con);
        cmd.CommandType = CommandType.Text;

        Oracle.DataAccess.Client.OracleDataReader reader = cmd.ExecuteReader();

        reader.FetchSize = 244;  //record-size in Bytes

        while (reader.Read())
        {
            System.Diagnostics.Debug.WriteLine("Now: " + DateTime.Now.ToString("HH:mm:ss.ffff"));
            System.Diagnostics.Debug.WriteLine("ID: " + reader.GetValue(0));
            System.Diagnostics.Debug.WriteLine("Text: " + reader.GetValue(1));
        }

私のサンプル関数は、PIPE ROW の前に 1 秒のスリープで n 行 (唯一の Function-Parameter) 行を返します。このコードを実行すると、一度に 10 行を取得するまで 10 秒待たなければなりません。

しかし、もう一度実行すると、完全に機能し、毎秒 1 行 (合計で 10 行) が取得されます。行を追加すると、ステートメントキャッシングが原因かもしれません

cmd.AddToStatementCache = false; 

2回目の実行でも10行のブロックが得られます。

質問は次のとおりです。コードを初めて実行するときに、10 行を「ジャスト イン タイム」(1 秒ごとに 1 行ずつ) 取得する方法を知っている人はいますか?

どうもありがとう!

乾杯クリスチャン

4

1 に答える 1