「ジャストインタイム」で 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 行ずつ) 取得する方法を知っている人はいますか?
どうもありがとう!
乾杯クリスチャン