调用返回游标的 oracle 函数

Posted

技术标签:

【中文标题】调用返回游标的 oracle 函数【英文标题】:Call a oracle function that returns a cursor 【发布时间】:2015-07-13 23:43:03 【问题描述】:

我有一个 Oracle 函数,它接受一个输入参数并返回一个游标。 我正在使用 C# 调用 Oracle 函数,但是我无法检索光标。

我的Oracle函数调用如下:-

select TBL_POWER_VIEW.GET_POWER_ID('V') FROM DUAL;

我的 C# 代码是:

conn = new OracleConnection(OracleServer);
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.CommandText = "TBL_POWER_VIEW.GET_POWER_ID";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;


OracleParameter powerId = new OracleParameter("i_power_flg", OracleDbType.Varchar2);
powerId.Direction = ParameterDirection.Input;
powerId.Value = 'L';
cmd.Parameters.Add(powerId);

OracleParameter oraP = new OracleParameter();
oraP.ParameterName = "TEST_CURSOR";
oraP.OracleDbType = OracleDbType.RefCursor;
oraP.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(oraP);

OracleDataAdapter adapter = new OracleDataAdapter();
adapter.SelectCommand=cmd;
DataSet ds = new DataSet();
adapter.Fill(ds);

错误栈如下:-

在 Oracle.DataAccess.dll 中发生了“Oracle.DataAccess.Client.OracleException”类型的第一次机会异常 Oracle.DataAccess.Client.OracleException ORA-06550:第 1 行,第 7 列: PLS-00306:调用“TEST_CURSOR”时参数的数量或类型错误 ORA-06550:第 1 行,第 7 列: PL/SQL:语句被忽略

【问题讨论】:

google.com/… 【参考方案1】:

执行以下操作

// Use Return instead of Output in Function 
oraP.Direction = ParameterDirection.Return;

!!!除非您这样做,否则必须首先列出返回参数

cmd.BindByName = true;

这应该解决它

【讨论】:

以上是关于调用返回游标的 oracle 函数的主要内容,如果未能解决你的问题,请参考以下文章

oracle 存储过程执行动态SQL 返回结果给游标,外部程序获得dataset结果集。

oracle cursor 用法总结

oracle存储过程返回游标,取值报错

Oracle 存储过程调用返回游标的另一个存储过程。

从Oracle中的函数返回游标

Oracle调用存储过程返回游标结果