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

配列をoracleプロシージャに渡します

    これがその方法の例です。

    次のスクリプトは、データベースにテーブル、タイプ、およびストアドプロシージャを設定します。このプロシージャは、配列型のパラメータを受け取り、配列の各行をテーブルに挿入します。

    CREATE TABLE strings (s VARCHAR(4000));
    
    CREATE TYPE t_varchar2_array AS TABLE OF VARCHAR2(4000);
    /
    
    CREATE OR REPLACE PROCEDURE p_array_test(
        p_strings      t_varchar2_array
    )
    AS
    BEGIN
      FOR i IN 1..p_strings.COUNT
      LOOP
        INSERT INTO strings (s) VALUES (p_strings(i));
      END LOOP;
    END;
    /
    

    次に、Javaコードは、このストアドプロシージャに配列を渡す方法を示します。

    import java.sql.*;
    import oracle.jdbc.*;
    import oracle.sql.*;
    
    public class ArrayTest {
        public static void main(String[] args) throws Exception {
            DriverManager.registerDriver(new OracleDriver());
            Connection conn = DriverManager.getConnection(
                "jdbc:oracle:thin:@localhost:1521:xe", "user", "pass");
    
            CallableStatement stmt = conn.prepareCall("BEGIN p_array_test(?); END;");
    
            // The first parameter here should be the name of the array type.
            // It's been capitalised here since I created it without using
            // double quotes.
            ArrayDescriptor arrDesc =
                ArrayDescriptor.createDescriptor("T_VARCHAR2_ARRAY", conn);
    
            String[] data = { "one", "two", "three" };
            Array array = new ARRAY(arrDesc, conn, data);
            stmt.setArray(1, array);
            stmt.execute();
    
            conn.commit();
            conn.close();
        }
    }
    

    SQLスクリプトを実行してからJavaクラスを実行し、テーブルのstringsをクエリする場合 、すべてのデータがテーブルに挿入されていることがわかります。

    「文字の配列」と言うときは、Javaのcharの配列を意味していると思います。 s。私が正しく推測した場合、charを変換するのが最善だと思います sからString s次に、上記と同じアプローチを使用します。



    1. PowerShellを知る必要があるため

    2. SQLServerで列名またはテーブル名の名前を変更する方法-SQLServer/T-SQLチュートリアルパート36

    3. PERFMONを介したパフォーマンスカウンターの監視| SQLServerのパフォーマンスのトラブルシューティング-3

    4. データベースバックアップ-MariaDBMariabackupとPerconaXtrabackupの比較