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(v_loan_recov_tbl in loan_recov_tbl);
そのため、C# ページから 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
ているか、他のデータ型を宣言する必要があります。プロシージャの入力パラメータをテーブルとして宣言します。