调用返回游标的oracle函数

时间:2015-07-13 23:43:03

标签: c# oracle oracle11g

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

我的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.Client.OracleException'的第一次机会异常。发生在Oracle.DataAccess.dll中   Oracle.DataAccess.Client.OracleException ORA-06550:第1行第7列:
  PLS-00306:调用' TEST_CURSOR'中的参数数量或类型错误   ORA-06550:第1行第7栏:
  PL / SQL:忽略语句

1 个答案:

答案 0 :(得分:0)

执行以下操作

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

!!!除非您执行

,否则必须先列出返回参数
cmd.BindByName = true;

这应该照顾它