Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Übergeben Sie das Array an die Orakelprozedur

Hier ist ein Beispiel dafür.

Das folgende Skript richtet eine Tabelle, einen Typ und eine gespeicherte Prozedur in der Datenbank ein. Die Prozedur nimmt einen Parameter vom Typ Array und fügt jede Zeile des Arrays in die Tabelle ein:

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;
/

Der Java-Code demonstriert dann die Übergabe eines Arrays an diese gespeicherte Prozedur:

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();
    }
}

Wenn Sie das SQL-Skript und dann die Java-Klasse ausführen und dann die Tabelle strings abfragen , sollten Sie feststellen, dass alle Daten in die Tabelle eingefügt wurden.

Wenn Sie "ein Array von Zeichen" sagen, meinen Sie vermutlich ein Array von Java char s. Wenn ich richtig geraten habe, sollten Sie am besten das char konvertieren s zu String s und verwenden Sie dann den gleichen Ansatz wie oben.