5
私は4つの入力を取るPL/SQLストアドプロシージャを持っています。これらの入力の1つは、連想配列です(Oracleタイプ:PLS_INTEGERによるVARCHAR2(1)索引の表)。C#2010、ODP.net、コールストアドプロシージャの渡し配列
このストアドプロシージャを連想配列を含む適切な入力で呼び出すC#プログラムが必要です。
私は、Visual C#2010 ExpressとOracle 11gR2でODP.net 11.2を使用しています。
C#の配列をpl/sqlプロシージャに渡す方法の良い例は見つかりません。誰か私に例を教えてもらえますか? Oracleのマニュアルに従うと、間違った数または引数の型が間違っています。
私のC#コード:
OracleCommand cmd = new OracleCommand("begin sdg_test.sdg_test2(:1); end;", conn);
OracleParameter Param1 = cmd.Parameters.Add("1", OracleDbType.Varchar2);
Param1.Direction = ParameterDirection.Input;
Param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
Param1.Value = new string[22] { "Y", "Y", "N", "Y", "N", "Y", "Y", "Y", "Y", "Y", "N", "Y", "N", "Y", "Y", "Y", "Y", "Y", "N", "Y", "N", "Y" };
Param1.Size = 22;
Param1.ArrayBindSize = new int[22] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
cmd.ExecuteNonQuery();
conn.Close();
conn.Dispose();
すべての私の手順は、メッセージをログに記録されません。私はこの概念を働かせようとしています。
おかげのように、ストアドプロシージャでそれらを使用しています。私はそれを撃つだろう。 – user2316634
私はTYPE integer_listを実行しています。あなたのテーブルはYour_table.id_cloumn%TYPE INDEX BY BINARY_INTEGERです。無効なSQL文が表示されます –
'CREATE OR REPLACE TYPE inst_id_list IS TABLE OF INSTRUMENT.Inst_Id%TYPE INDEX BY BINARY_INTEGER; 'を試してください。 EvgenyLの提案された引数を、あなたのdbにすでに存在する実際のオブジェクトに置き換える必要があります。 (つまり、inst_idはテーブルINSTRUMENTのフィールドです)。 – dipdapdop