【问题标题】:Oracle Stored Procedure with User Defined Type in C#在 C# 中具有用户定义类型的 Oracle 存储过程
【发布时间】:2017-05-22 23:34:20
【问题描述】:

我正在尝试使用存储过程

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# 代码片段:

        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 行,第 1 列 7:\nPL/SQL: 语句被忽略”

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

【问题讨论】:

    标签: c# oracle stored-procedures


    【解决方案1】:

    您可以使用 OracleDbType.Array 代替 varchar2 作为 param2。

    【讨论】:

    • 我收到错误 - OracleDbType 不包含数组的定义(我正在使用版本 12.1.24160719)
    • 我指的是 Oracle.DataAccess.Client(v2.112.1.0)。您使用的是哪个版本?
    • 我正在使用 Oracle.DataAccess.Client(v4.112.1.0)
    猜你喜欢
    • 2010-11-02
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 2011-04-07
    • 2011-05-05
    • 1970-01-01
    • 2010-11-24
    相关资源
    最近更新 更多