C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■100115 / )  Re[2]: Oracle Package呼出時エラー PLS-00306
□投稿者/ AS702 (3回)-(2022/07/04(Mon) 17:32:07)
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'をメソッドのように使用することはできません。」

重ね重ね申し訳ございませんが、よろしくお願いいたします。

返信 編集キー/


管理者用

- Child Tree -