我们有一个oracle包,它返回记录类型的表。定义是:
TYPE t_daily_array_table IS TABLE OF r_daily_array_rec INDEX BY BINARY_INTEGER;
其中r_daily_array_rec
有许多字段的记录在哪里。然后,在包中就有一个函数,其定义如下:
FUNCTION f_daily_array_table
(ip_contract_code IN contract.contract_code%TYPE)
RETURN t_daily_array_table
IS ...
而这一切有效。但是我想从我的C#应用程序中调用此函数,并且我尝试使用2种不同的Oracle客户端驱动程序(.NET OracleClient和Oracle的odp.net)进行了大约100种变化,但我似乎找不到办法使它工作。
我不想记录所有尝试过的方法,但是我使用odp.net驱动程序的最新迭代是这样的:
using (OracleConnection conn = new OracleConnection("Data Source=dbname;User Id=username;Password=password"))
{
using (OracleCommand cmd = new OracleCommand("FEED_SCHEDULE_PKG.f_daily_array_table", conn))
{
cmd.BindByName = true;
cmd.Parameters.Add("ip_contract_code", 77116);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
OracleParameter p = new OracleParameter("t_daily_array_table", OracleDbType.Varchar2);
p.Direction = System.Data.ParameterDirection.ReturnValue;
cmd.Parameters.Add(p);
conn.Open();
object ob = cmd.ExecuteNonQuery();
}
}
我尝试过各种SQL语句,例如:
select * from Table(FEED_SCHEDULE_PKG.f_daily_array_table(ip_contract_code));
或者 begin FEED_SCHEDULE_PKG.f_daily_array_table(ip_contract_code); end;
我试过ExecuteNonQuery
用return参数。我已经尝试过ExecuteReader
了IDataReader
。我已经尝试使用'returnvalue'作为返回值参数名称。
我到处搜寻并尝试了所有可以找到的东西。没有一个示例函数与我们的完全相同。就像我说的那样,我尝试了很多变化。我似乎无法选择正确的设置。
我真的很感谢您的帮助。
您不能从ODP.NET绑定到PL / SQL记录。但是,您可以使用匿名PL / SQL或存储过程包装程序将其转换为另一种类型。这是解决方法的一个示例:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句