我在 Oracle 中有一个存储过程,它通过“SYS_REFCURSOR”类型的 OUT 参数返回结果集。
我需要通过 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 数据类型的信息(我确实得到了列名、可空性、长度等)。我得到的唯一类型信息是列可以映射到的 CLR 类型。
我做错了什么还是有更好的方法来获取通过 OUT ref 游标返回的结果集的列信息?