タイプ「SYS_REFCURSOR」の OUT パラメータを介して結果セットを返す Oracle のストアド プロシージャがあります。
この結果セットの列情報を ADO.NET 経由で取得する必要があります。パラメータ (OracleParameter.OracleDbType = OracleDbType.ReCursor など) を作成し、「OracleCommand.ExecuteReader」(CommandBehavior.SchemaOnly) を呼び出して、ストアド プロシージャを実行します。次に、結果のリーダーで「reader.GetSchemaTable」を呼び出して、結果セットのスキーマを記述する DataTable を取得します。
OracleCommand command = oracleConnection.CreateCommand();
command.CommandText = "ProcedureName";
command.CommandType = System.Data.CommandType.StoredProcedure;
OracleParameter refParameter = command.CreateParameter();
refParameter.Name = "refCursorParam";
refParameter.Direction = System.Data.ParameterDirection.Output;
refParameter.OracleDbType = OracleDbType.ReCursor;
command.Parameters.Add(dbParameter);
var reader = command.ExecuteReader(System.Data.CommandBehavior.SchemaOnly);
var dataTable = reader.GetSchemaTable();
私の問題は、結果セットの各列の情報が不完全なことです。列のOracleデータ型に関する情報はありません(列名、null可能性、長さなどはわかります)。取得する型情報のみが、列をマップできる CLR 型です。
OUT参照カーソルを介して返された結果セットの列情報を取得するためのより良い方法がありますか?