输出 refcursor、varchar2 和数字的存储过程的语法是什么?
除了 sys_refcursor 输出之外,我想在结果中输出所有三个,以便显示计数,以及一条指示成功查询的消息,但我似乎找不到一个很好的例子。
我当前的 C# 代码如下所示:
using Oracle.DataAccess.Client;
//...
OracleCommand myCmd = new OracleCommand();
myCmd.Connection = myConnection;
myCmd.CommandText = "mypackage.myprocedure"
myCmd.CommandType = CommandType.StoredProcedure;
OracleParameter param0 = myCmd.Parameters.Add("myinput", OracleDbType.Varchar2, myinput, ParameterDirection.Input);
OracleParameter param1 = myCmd.Parameters.Add("myretcursor", OracleDbType.RefCursor, ParameterDirection.Output);
myConnection.Open();
OracleDataReader resultReader = myCmd.ExecuteReader();
mydatatable.Load(resultReader, LoadOption.OverwriteChanges);
Oracle 存储过程如下所示:
PROCEDURE myprocedure (myinput IN Varchar2, myretcursor OUT sys_refcursor)
IS
BEGIN
OPEN myretcursor FOR
SELECT * FROM MYTABLE
END myprocedure
我想我想将param2,param3作为附加输出参数添加到c#中,然后还以某种方式在存储过程中输出它们?我不知道如何做到这一点,并不断遇到错误。例如,理想情况下,我会将选择计数 (*) 作为输出传递给 c# 应用程序,以及像“查询成功”这样的 varchar2 字符串消息。
谢谢你。
更新:文森特的解决方案在下面工作......关于后面的 C# 代码,他提供的链接的答案建议将 reader = executereader 包含在 USING( ) 中以加载表,并在加载其他变量之前关闭阅读器。
https://stackoverflow.com/q/6882690/613799
根据来自 oracle 的字符串的大小,调用 c# 代码可能需要在字符串消息的输出参数定义中指定 varchar2 的大小。最后,以下链接有助于将计数从 OracleDecimal 类型转换为 C# int:
您的过程缺少两个
OUT
参数:您还需要修改
C#
代码以相应地注册新OUT
参数。