【发布时间】:2019-08-01 07:41:51
【问题描述】:
我有一个 Oracle 存储过程,它接受多个 RefCursor 类型的输出参数(代码如下)。
create or replace
PROCEDURE PROCEDURE1(
lookupvalues out SYS_REFCURSOR,
lookupvalues1 out SYS_REFCURSOR)
AS
BEGIN
open lookupvalues for
select attribute3 from table1 where attribute3 is not null;
open lookupvalues1 for
select attribute1 from table2 where attribute1 is not null;
END PROCEDURE1;
我只需要使用 c# 和 Entity Framework 将这些 out 参数的结果作为数据集获取。
我能够获取数据,但我认为这不是一个体面的方法。
我想使用实体框架来检索数据(如果可能的话)。
using (APWCContext dbcontext = new APWCContext())
{
using (var cmd = dbcontext.Database.Connection.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "PROCEDURE1";
var businessUnit = new OracleParameter("lookupvalues", OracleDbType.RefCursor, ParameterDirection.Output);
var currency = new OracleParameter("lookupvalues1", OracleDbType.RefCursor, ParameterDirection.Output);
cmd.Parameters.AddRange(new[] { businessUnit,currency});
cmd.Connection.Open();
var reader= cmd.ExecuteReader();
DataTable budt = new DataTable();
while (reader.Read())
{
budt.Load(reader);
}
var data = businessUnit.Value;
cmd.Connection.Close();
}
//var businessUnit = new OracleParameter("lookupvalues", OracleDbType.RefCursor, ParameterDirection.Output);
var r = dbcontext.GOODWILL_HEADER_STG.FirstOrDefault();
//var result = dbcontext.Database.ExecuteSqlCommand("BEGIN PROCEDURE1(:lookupvalues); END;", businessUnit);
}
【问题讨论】:
-
“我认为这不是一个体面的方法” 你这是什么意思?您希望我们提供什么帮助?
-
我的意思是当数据表被填充时,首先将第一个引用游标返回的值添加到数据表的第一列,然后在下一次读取之后,将值从另一个游标复制到另一列数据表,但从第一列结束的索引开始..
-
抱歉,目前还不清楚。如果您发布一些示例数据(
table1和table2的值)以及从该示例派生的所需输出,将会有所帮助。 -
好的,但是根据您的说法,访问引用光标值的方法是否正确?
-
对于“正确”的某些值。您正在以语法正确的方式调用 ref 游标。但它是否逻辑上正确取决于你想要达到的目标。
标签: c# oracle entity-framework asp.net-web-api2 odp.net