我们有一个 oracle 包,它返回一个记录类型的表。定义是:
TYPE t_daily_array_table IS TABLE OF r_daily_array_rec INDEX BY BINARY_INTEGER;
wherer_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)尝试了大约一百种不同的变体,但我似乎找不到方法让它工作。
我不想记录我尝试过的所有不同方式,但我使用 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
返回参数。我试过ExecuteReader
进入IDataReader
. 我已经为返回值参数名称尝试了“returnvalue”。
我四处寻找并尝试了我能找到的一切。没有一个示例函数与我们的非常相似。就像我说的,我尝试了很多变化。我似乎无法找到正确的设置。
我真的很感激这方面的一些帮助。