2

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ているか、他のデータ型を宣言する必要があります。プロシージャの入力パラメータをテーブルとして宣言します。

4

1 に答える 1

1

2 つの問題があります。まず、SQL 定義のオブジェクト型ではなく、PL/SQL 定義のレコード型を操作します。ODAC では、SQL 定義のオブジェクト型が必要です。第 2 に、適切な SQL 定義のオブジェクト型と C# カスタム型がすべて定義されていると仮定すると、マシンの ODP.NET ソフトウェア スタックで配列バインディングを操作する C# コードの優れた例があります: %ODAC_HOME%\odp.net\ samples\4\AssocArray.

于 2013-04-03T22:37:02.363 に答える