相关疑难解决方法(0)

如何使用Ref Cursor作为C#的Out-parameter调用Oracle函数?

我正在使用一个提供基于Oracle函数的数据库API的产品,我能够通过ODP.NET调用函数.但是,我无法弄清楚,如何调用包含Ref Cursor作为Out-parameter的函数.到目前为止我找到的所有样本都调用带有Out参数的过程或带有Ref Cursor的函数作为返回值.我试图类似地定义参数,但不断得到提供错误数量或类型参数的错误.

这是函数头(显然是混淆的):

FUNCTION GetXYZ(
   uniqueId       IN   somepackage.Number_Type,
   resultItems    OUT  somepackage.Ref_Type)
   RETURN somepackage.Error_Type;
Run Code Online (Sandbox Code Playgroud)

这些是"somepackage"中的类型定义:

SUBTYPE Number_Type IS NUMBER(13);
TYPE Ref_Type IS REF CURSOR;
SUBTYPE Error_Type IS NUMBER;
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的代码:

string sql = "otherpackage.GetXYZ";
var getXYZCmd = OracleCommand oracleConnection.CreateCommand(sql);
getXYZCmd.CommandType = CommandType.StoredProcedure;

getXYZCmd.Parameters.Add("uniqueId", OracleDbType.Int32).Value = uniqueExplosionId;
getXYZCmd.Parameters.Add("resultItems", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
getXYZCmd.Parameters.Add("return_value", OracleDbType.Int32).Direction = ParameterDirection.ReturnValue;
Run Code Online (Sandbox Code Playgroud)

我尝试了以下不同的方法来调用函数(当然一次只能调用一个函数):

var result = getXYZCmd.ExecuteNonQuery();
var reader = getXYZCmd.ExecuteReader();
var scalarResult = getXYZCmd.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)

但是每个都失败并显示错误消息:

Oracle.DataAccess.Client.OracleException: ORA-06550: line 1, column 15:
PLS-00306: wrong number or types of arguments …
Run Code Online (Sandbox Code Playgroud)

oracle function odp.net sys-refcursor ref-cursor

6
推荐指数
1
解决办法
3万
查看次数

标签 统计

function ×1

odp.net ×1

oracle ×1

ref-cursor ×1

sys-refcursor ×1