如何在 c# 中调用带有参数和 return 记录的 Oracle 函数?

How do I call Oracle function in c# which takes parameters and return records?

我有一个 Oracle 函数,它有 3 个参数和 return 个有四列的记录。

但我遇到了一个例外情况

ORA-06550: line 1, column 7:
PLS-00221: 'get_receipts' is not a procedure or is undefined

这是我的代码:

OracleConnection con = new OracleConnection(oracleDB);
con.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = con;

cmd.CommandText = "get_receipts";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new OracleParameter("p_store_num", store_num));
cmd.Parameters.Add(new OracleParameter("p_create_dt", create_date));
cmd.Parameters.Add(new OracleParameter("p_cc_last4", cc_last4));

OracleDataReader dr = cmd.ExecuteReader();

while (dr.Read())
{
    ResponseModel sample = new ResponseModel();

    sample.Field1 = dr.GetString(0);
    sample.Field2 = dr.GetString(1);
    sample.Field3 = dr.GetString(2);
    sample.Field4 = dr.GetString(3);

    response.Add(sample);
}

对于 Oracle,它有点棘手

您必须 return 将结果集设置为您过程中的 ref_cursor 类型

看看这个

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/oracle-ref-cursors

如果这是关于表格函数的,我会尝试编写一个查询,将函数用作唯一数据源并检索查询结果。

编辑: 它会是这样的(未经测试):

SELECT *
  FROM TABLE(get_receipts(:p_store_num, :p_create_dt, :p_cc_last4))