| 2022/07/04(Mon) 17:37:42 編集(投稿者) ■No100052 (KOZ さん) に返信 > 2022/06/30(Thu) 19:49:23 編集(投稿者) > > ■No100051 (AS702 さん) に返信 > > 連想配列を使うには、OracleParameter の CollectionType プロパティを OracleCollectionType.PLSQLAssociativeArray にする必要があります。 > また、配列サイズを OracleParameter.Size にセットします。 > > 「PL/SQL連想配列の使用」 > https://www.oracle.com/jp/database/technologies/oramag/o17odp.html > > 配列を受け取るときは ArrayBindSize を設定する必要があったと思います。 > cmd.Parameters("O_顧客検索").ArrayBindSize = Enumerable.Repeat<int>(60, 160).ToArray();
お忙しい中、ご回答ありがとうございます。 以下のように修正してみました。 そこで、3つ質問させてください。
OracleConnection conn = new OracleConnection(P.Default.conn_string); conn.Open();
OracleCommand cmd = conn.CreateCommand(); cmd.CommandText = "Begin P_顧客DB.検索(:int_更新有無,:I_顧客検索,:O_顧客検索);END;"; cmd.CommandType = CommandType.Text;
OracleParameter p_更新有無 = new OracleParameter(); OracleParameter p_In_入力項目 = new OracleParameter(); OracleParameter p_In_出力項目 = new OracleParameter();
p_更新有無.OracleDbType = OracleDbType.Decimal; p_In_入力項目.OracleDbType = OracleDbType.Varchar2; p_In_出力項目.OracleDbType = OracleDbType.Varchar2;
p_In_入力項目.CollectionType = OracleCollectionType.PLSQLAssociativeArray; p_In_出力項目.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
p_In_入力項目.Value = new string[2] {"1", "123456"}; p_更新有無.Value = 0;
p_In_入力項目.Size = 2; p_In_出力項目.Size = 160;
cmd.Parameter.Add("int_更新有無", p_更新有無.Value); cmd.Parameter.Add("I_顧客検索", p_In_入力項目.Value); @ cmd.Parameter.Add("O_顧客検索", p_In_出力項目.Value);
cmd.ExecuteNonQuery();
質問1 上記@の部分でNullReferenceExceptionエラーとなってしまいます。 配列の値の入れ方が間違っているのでしょうか。
質問2 「ParameterDirection.ReturnValue」のような指定がどこにも見受けられないのですが、どこで行うのでしょうか。
質問3 ご指摘いただきました下記コーディングを入れたところ、コンパイルエラーとなりました。 「cmd.Parameters("O_顧客検索").ArrayBindSize = Enumerable.Repeat<int>(60, 160).ToArray();」 エラー内容「実行不可能なメンバー'Oracle.DataAccess.Client.OracleCommand.Parameters'をメソッドのように使用することはできません。」
重ね重ね申し訳ございませんが、よろしくお願いいたします。
|