如何使用参数类型AnyData调用存储过程?

时间:2015-01-22 09:57:00

标签: .net oracle stored-procedures odp.net

我正在尝试使用来自.Net的anyData参数调用存储过程但是由于参数我得到错误:

ORA-06550:第1行第7列: PLS-00306:调用'SP_SE_TEST'时参数的数量或类型错误 ORA-06550:第1行第7列: PL / SQL:忽略语句

如果我将过程中的参数更改为varchar2可以正常工作,但不能使用AnyData。

我有这个程序:

Procedure Sp_Se_Test(v_Param  In anydata,
                     v_out_result      Out Sys_Refcursor);

和来自.net的电话:

using (var cw = new OracleCommand{ Connection = db, CommandType = System.Data.CommandType.StoredProcedure,
                                                   CommandText = "PackageName.Sp_Se_Test"
                })
                {
                    cw.Parameters.Add(new OracleParameter { ParameterName = "v_Param", OracleDbType = OracleDbType.Varchar2 , Value = "Testing" });
                    cw.Parameters.Add("v_out_result", OracleDbType.RefCursor,ParameterDirection.Output);

                    db.Open();
                    using (var dr = cw.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            var res = dr["Result"];
                        }
                        dr.Close();
                    }
                }

我认为这是由OracleDbType引起的,但我不知道AnyData的类型是什么。

有人知道怎么做吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

ODP.NET不支持PL / SQL ANYDATA数据类型。 (它不能从ODP.NET绑定)。您需要使用受支持的类型重写该过程,或者使用一个使用PL / SQL将该类型转换为支持的类型的新SP包装SP。

https://community.oracle.com/thread/2171107