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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.100115 の関連記事表示

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

    重ね重ね申し訳ございませんが、よろしくお願いいたします。
記事No.100051 のレス /過去ログ174より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -