我已经在PLSQL规范中声明了一个集合表和记录。
type loan_recov_rec is record(v_prncpl_ed_cd number(3),v_prncpl_recov number (7),v_int_ed_cd number(3), v_int_recov,number(5)); type loan_recov_tbl is table of loan_recov_rec index by binary_integer;
程序pr_final_settlement(loan_recov_tbl中的v_loan_recov_tbl);
所以,我从C#page
传递Array参数 cmd.ArrayBindCount = v_loan_recov_tbl.Length;
Oracle.DataAccess.Client.OracleParameter P_loan_recov = new Oracle.DataAccess.Client.OracleParameter("v_loan_recov_tbl", Oracle.DataAccess.Client.OracleDbType.Int32);
P_loan_recov.Direction = ParameterDirection.Input;
P_loan_recov.CollectionType = Oracle.DataAccess.Client.OracleCollectionType.PLSQLAssociativeArray;
P_loan_recov.Value = v_loan_recov_tbl;
cmd.Parameters.Add(P_loan_recov);
使用上面的代码它不起作用它得到错误Unable to cast object of type 'System.Int32' to type 'System.Array'. v_loan_recov_tbl is an Array Parameter.
听到,我使用数据类型为OracleDbType.Int32
是正确的还是我必须解析其他数据类型。我在过程中声明输入参数如表
答案 0 :(得分:1)
我看到两个问题。首先,您使用的是PL / SQL定义的记录类型,而不是SQL定义的对象类型。 ODAC想要SQL定义的对象类型。其次,假设您已经定义了所有正确的SQL定义的对象类型和C#自定义类型,那么在您的机器上的ODP.NET软件堆栈中使用c#代码就可以使用数组绑定:%ODAC_HOME%\ odp.net \样品\ 4 \ AssocArray。