sql >> Database >  >> RDS >> Oracle

geef array door aan orakelprocedure

Hier is een voorbeeld van hoe je het moet doen.

Het volgende script stelt een tabel, een type en een opgeslagen procedure in de database in. De procedure neemt een parameter van het array-type en voegt elke rij van de array in de tabel in:

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

De Java-code demonstreert vervolgens het doorgeven van een array in deze opgeslagen procedure:

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

Als u het SQL-script uitvoert en vervolgens de Java-klasse, en vervolgens de tabel strings . opvraagt , zou u moeten zien dat alle gegevens in de tabel zijn ingevoegd.

Als je 'een reeks tekens' zegt, vermoed ik dat je een reeks Java char bedoelt s. Als ik het goed heb geraden, denk ik dat je het beste de char . kunt converteren s naar String s en gebruik dan dezelfde benadering als hierboven.



  1. Een scheidingsteken toevoegen aan een aaneengeschakelde tekenreeks in SQL Server - CONCAT_WS()

  2. Wat is de tekenreeksaaneenschakelingsoperator in Oracle?

  3. Oracle:SQL-query die rijen retourneert met alleen numerieke waarden

  4. Filter op uitvoerclausule sql