sql >> データベース >  >> RDS >> Oracle

Oracle.DataAccess(ODP.NET)の配列バインディング値が期待される範囲内にありません

    配列バインドをマージしようとしていると思います {配列をパラメータにバインドして複数回実行するだけです。これは、提供したリンクの例で}連想配列を使用した場合です。 {re:TABLEOFのINPUTパラメーターを持つPLSQLAssociativeArray}。

    実行しているパッケージ/プロシージャを投稿しなかったので、私はあなたがこのようなことをしていると仮定しています(仮定を検証するためにこれを置くだけです)

    procedure insertdata(P_JOB_TITLE IN VARCHAR2) as
    begin
    insert into myTable(x) value (P_JOB_TITLE);
    end  insertdata;
    

    記事の作成者のようにこれを実行するには、 ArrayBindCount(このリンクをチェックしてください。例もあります) 。これは、複数のパラメーターがある場合、それぞれにARRAYが必要であることも示しています。

    これで、渡したすべてのP_JOB_TITLE()に対してこれを実行します

    //this was missing in your example and MUST be there to tell ODP how many array elements to expect
    cmd.ArrayBindCount = 2;
    
     string[] jobTitleArray = {"name1", "name1"};
    
    OracleParameter paramNames= new OracleParameter("P_JOB_TITLE", OracleDbType.Varchar2);
    
       //paramNames.CollectionType = OracleCollectionType.PLSQLAssociativeArray;/*once again, you are passing in an array of values to be executed and not a pl-sql table*/
    
        //paramNames.Size = 2; /* this is unnecessary since it is for a plsql-associative array*/
        paramNames.Value =  jobTitleArray ;
        cmd.Parameters.Add(paramNames);
    

    plSQLAssociativeArrayの例については、ODP @%ORA_HOME%\ odp.net \ samples \ 2.x \ AssocArray

    をインストールしたときに提供されたサンプルを参照してください。

    配列バインドの例(指定したリンクから)@%ORA_HOME%\ odp.net \ samples \ 2.x \ ArrayBind




    1. 空のフィールドの可能性があるMYSQLINNERJOIN

    2. mysqlを使用して必要な数量を満たす

    3. MySQL:クエリ間の最適なインデックス

    4. MySQL:フラット/会話メッセージテーブルの最後のメッセージのみを返します