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

わんくま同盟

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

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

■100115 / 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'をメソッドのように使用することはできません。」

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

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[1]: Oracle Package呼出時エラー PLS-00306 /KOZ →Re[3]: Oracle Package呼出時エラー PLS-00306 /KOZ
→Re[3]: Oracle Package呼出時エラー PLS-00306 /KOZ
 
上記関連ツリー

Oracle Package呼出時エラー PLS-00306 / AS702 (22/06/30(Thu) 19:15) #100051
Re[1]: Oracle Package呼出時エラー PLS-00306 / KOZ (22/06/30(Thu) 19:33) #100052
│├ Re[2]: Oracle Package呼出時エラー PLS-00306 / KOZ (22/07/01(Fri) 00:30) #100053
│└ Oracle Package呼出時エラー PLS-00306 / AS702 (22/07/04(Mon) 17:32) #100115 ←Now
│  ├ Re[3]: Oracle Package呼出時エラー PLS-00306 / KOZ (22/07/04(Mon) 18:44) #100116
│  └ Re[3]: Oracle Package呼出時エラー PLS-00306 / KOZ (22/07/04(Mon) 18:57) #100117
│    └ Re[4]: Oracle Package呼出時エラー PLS-00306 / AS702 (22/07/04(Mon) 19:17) #100118
│      └ Re[5]: Oracle Package呼出時エラー PLS-00306 / KOZ (22/07/04(Mon) 19:25) #100119
│        └ Re[6]: Oracle Package呼出時エラー PLS-00306 / AS702 (22/07/04(Mon) 20:12) #100120 解決済み
Re[1]: Oracle Package呼出時エラー PLS-00306 / radian (22/07/01(Fri) 08:58) #100055
  └ Re[2]: Oracle Package呼出時エラー PLS-00306 / KOZ (22/07/01(Fri) 09:32) #100056
    ├ Re[3]: Oracle Package呼出時エラー PLS-00306 / radian (22/07/01(Fri) 10:15) #100058
    └ Re[3]: Oracle Package呼出時エラー PLS-00306 / KOZ (22/07/02(Sat) 08:44) #100088

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信