Oracle
 sql >> Base de données >  >> RDS >> Oracle

passer le tableau à la procédure oracle

Voici un exemple de la façon de procéder.

Le script suivant configure une table, un type et une procédure stockée dans la base de données. La procédure prend un paramètre de type tableau et insère chaque ligne du tableau dans le tableau :

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

Le code Java montre ensuite comment passer un tableau dans cette procédure stockée :

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

Si vous exécutez le script SQL puis la classe Java, puis interrogez la table strings , vous devriez constater que toutes les données ont été insérées dans la table.

Lorsque vous dites "un tableau de caractères", je suppose que vous voulez dire un tableau de Java char s. Si j'ai bien deviné, alors je pense que vous feriez mieux de convertir le char s en String s, puis en utilisant la même approche que ci-dessus.