我在包
中有这个sys_refcursor函数function frcBaanCompanies return SYS_REFCURSOR is
x sys_refcursor;
begin
open x for select t$comp, t$cpnm from baan.tttaad100000 order by t$comp;
return x;
end;
和一个调用它的网络方法
listBox1.DataSource = lO.fRefCursor("priceWorx.frcBaanCompanies", null, false).Tables[0];
以下是我如何调用该函数:
public DataSet fRefCursor(String refCursorName, IDictionary<string, string> prms, bool leaveConnectionOpen = true)
{
try
{
using (OracleCommand cmd = new OracleCommand("", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = refCursorName;
if (prms!=null) SetupParams(refCursorName, cmd, prms);
using (OracleDataAdapter da = new OracleDataAdapter(cmd))
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
cmd.Connection = conn;
}
using (DataSet ds = new DataSet())
{
da.Fill(ds);
return ds;
}
}
}
}
catch (Exception ex)
{
Debugger.Break();
Debug.WriteLine(ex);
return null;
}
finally
{
if (!leaveConnectionOpen) conn.Close();
}
}
使用参数调用时,同样的方法工作正常(其他一些游标函数,但是
失败)ORA-06550:第1行第7栏: PLS-00221:'FRCBAANCOMPANIES'不是程序或未定义 ORA-06550:第1行第7列: PL / SQL:忽略语句
在(Oracle)sql开发人员中执行时也能正常工作..
我做错了什么?
答案 0 :(得分:0)
这是因为您无法在没有参数的情况下调用函数,但可以使用null参数调用它。当您不输入任何参数时,您当前正在调用的是:
FRCBAANCOMPANIES;
这与
不同variable := FRCBAANCOMPANIES;
在第一种情况下,oracle正在寻找一个没有任何返回的程序,在第二种情况下,你会调用你的函数。因此,如果您不需要,还必须设置返回参数。