sql >> Databasteknik >  >> RDS >> Oracle

skicka array till oracle-proceduren

Här är ett exempel på hur man gör det.

Följande skript ställer upp en tabell, en typ och en lagrad procedur i databasen. Proceduren tar en parameter av arraytypen och infogar varje rad i arrayen i tabellen:

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-koden visar sedan att en array skickas till denna lagrade procedur:

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

Om du kör SQL-skriptet och sedan Java-klassen och sedan frågar tabellen strings , bör du upptäcka att all data har infogats i tabellen.

När du säger 'en array of chars', gissar jag att du menar en array av Java char s. Om jag har gissat rätt, så tror jag att det är bäst att du konverterar char s till String s och sedan använda samma tillvägagångssätt som ovan.



  1. Hur väljer man datum från kolumnen datetime?

  2. Hitta det totala antalet resultat i mySQL-frågan med offset+limit

  3. Hur man exporterar resultaten av en fråga med MySQL Workbench

  4. Vad gör Statement.setFetchSize(nSize)-metoden egentligen i SQL Server JDBC-drivrutinen?