繁体   English   中英

在C#中调用存储过程oracle并非绑定所有数据

[英]Calling stored procedure oracle in c# not all data bound

我需要在c#中使用oracle存储过程。 存储过程定义如下:

CREATE OR REPLACE PACKAGE MGRWS10.test_mp
as
type tab_assoc_array is table of varchar2(2000) index by binary_integer;
function f_loten(p_item number) return tab_assoc_array;
procedure p_loten(p_item number, o_result out tab_assoc_array);
end;
/

在C#中,我调用该过程:

using (var cmd = _connection.CreateCommand()){
    OracleParameter stringArray = new OracleParameter();
    stringArray.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
    stringArray.Direction = ParameterDirection.Output;
    stringArray.ParameterName = "o_result";
    stringArray.Size = 5;
    stringArray.ArrayBindSize = new int[5];
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.BindByName = true;
    cmd.CommandText = "test_mp.p_loten(:p_item, :o_result)";
    cmd.Parameters.Add("p_item", 12942);
    cmd.Parameters.Add(stringArray);
    _connection.Open();

    await cmd.ExecuteNonQueryAsync();
    var x = (string[]) stringArray.Value;
}

执行cmd时,出现以下错误:RA-01008:并非所有变量都受约束

试试这个:

cmd.CommandType = CommandType.Text;
cmd.CommandText = "BEGIN :o_result := test_mp.p_loten(:p_item); END;";

par = cmd.Parameters.Add("o_result", OracleDbType.Varchar2, ParameterDirection.ReturnValue)
par.CollectionType = OracleCollectionType.PLSQLAssociativeArray

cmd.Parameters.Add("p_item", OracleDbType.Int32, ParameterDirection.Input).Value = 12942;

但是,我从未使用PLSQLAssociativeArray作为返回值,所以我不知道此代码是否有效。

也许返回SYS_REFCURSOR而不是PLSQLAssociativeArray ,这肯定可以工作。

在这种情况下,您的C#代码可能如下所示:

cmd.CommandType = CommandType.Text;
cmd.CommandText = "BEGIN :o_result := test_mp.p_loten(:p_item); END;";
cmd.Parameters.Add("o_result", OracleDbType.RefCursor, ParameterDirection.ReturnValue);
cmd.Parameters.Add("p_item", OracleDbType.Int32, ParameterDirection.Input).Value = 12942;
var da = new OracleDataAdapter(cmd); // or cmd.ExecuteNonQueryAsync();
var dt = new DataTable(); 
da.Fill(dt);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM