C#中使用用户定义类型的Oracle存储过程

时间:2017-01-08 17:31:40

标签: c# oracle stored-procedures

我正在尝试使用

的存储过程
variable data refcursor;
execute MyPkg(to_date('2010-08-11','yyyy-MM-dd'), TEXT_ARRAY('tempa','tempb'), :data);

其中TEXT_ARRAYTABLE OF varchar2(255)

类型的udt

C#Code Snippet:

        var cmd = new OracleCommand("BEGIN MyPkg(:Param1, :Param2, :Param3); END;", con);
        var param1 = cmd.Parameters.Add("Param1", OracleDbType.Date);
        var param2 = cmd.Parameters.Add("Param2", OracleDbType.Varchar2);
        var param3 = cmd.Parameters.Add("Param3", OracleDbType.RefCursor);

        param1.Direction = ParameterDirection.Input;
        param2.Direction = ParameterDirection.Input;
        param3.Direction = ParameterDirection.Output;

        param1.Value = DateTime.Now;


        param2.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

        param2.Value = new[] { "tempa", “tempb”};
        param2.Size = 2;
        param2.ArrayBindSize = new[] { 20, 20 };

        cmd.ExecuteNonQuery();

我收到错误:

  

类型' Oracle.ManagedDataAccess.Client.OracleException'的例外情况   发生在Oracle.ManagedDataAccess.dll中但未在用户中处理   代码附加信息:外部组件已抛出   例外。 - ORA-06550:第1行第7列:\ nPLS-00306:错误号码   或调用' MyPkg '\ nORA-06550的参数类型:第1行,列   7:\ nPL / SQL:语句被忽略"

有关如何解决此问题的任何线索?

1 个答案:

答案 0 :(得分:0)

对于param2,您可以使用OracleDbType.Array而不是varchar2。