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

ADO.NET/C#を介してOracle(ODP.NET 10g)に配列/テーブルパラメータを使用するにはどうすればよいですか?

    これはODP.NET(odac)で機能します:

    Oracleパッケージは次のように設定されます:

    CREATE OR REPLACE package SOME_PACKAGE as
      ...
      type t_number_tab is table of number index by pls_integer;
      ...
      procedure ins_test(i_id_tab in t_number_tab, o_inserted out number);
    
    end SOME_PACKAGE;
    
    
    CREATE OR REPLACE package body SOME_PACKAGE as
    
        procedure ins_test(i_id_tab in t_number_tab, o_inserted out number) is
        begin
            -- inserts all records to test table based on incoming table of ids
            forall i in i_id_tab.first .. i_id_tab.last
                insert into TEST_TAB
                (id, val1, val2)
                select id,val1,val2
                from main_tab
                where id = i_id_tab(i);
    
            o_inserted := SQL%ROWCOUNT;
    
            commit;
        exception
            when others then
                rollback;
                raise;
        end ins_test;
    ...
    end SOME_PACKAGE;
    

    この場合、C#コードは次のようになります。

    string connStr = "User Id=xxx;Password=xxxx;Data Source=xxxxx;";
    OracleConnection _conn = new OracleConnection(connStr);
    _conn.Open();
    
    OracleCommand cmd = _conn.CreateCommand();
    cmd.CommandText = "some_package.ins_test";
    cmd.CommandType = CommandType.StoredProcedure;
    
    OracleParameter p1 = new OracleParameter();
    OracleParameter p2 = new OracleParameter();
    
    p1.OracleDbType = OracleDbType.Decimal;
    p1.Direction = ParameterDirection.Input;
    p2.OracleDbType = OracleDbType.Decimal;
    p2.Direction = ParameterDirection.Output;
    
    p1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
    p1.Value = new int[3] { 1, 2, 3 };
    p1.Size = 3;
    
    cmd.Parameters.Add(p1);
    cmd.Parameters.Add(p2);
    
    cmd.ExecuteNonQuery();
    



    1. MySQLmy.iniの場所

    2. SQLですべてのグループの最初の行を選択します

    3. Oracleエイリアシングを理解する-2番目のクエリでラップされない限り、エイリアスがクエリで認識されないのはなぜですか?

    4. VirtualBoxを使用してMacにSQLServerをインストールする方法