sql >> Database teknologi >  >> RDS >> Oracle

videregive array til oracle procedure

Her er et eksempel på, hvordan man gør det.

Følgende script opsætter en tabel, en type og en lagret procedure i databasen. Proceduren tager en parameter af array-typen og indsætter hver række i arrayet 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 demonstrerer derefter, at et array overføres til denne lagrede 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();
    }
}

Hvis du kører SQL-scriptet og derefter Java-klassen, og derefter forespørger tabellen strings , bør du opdage, at alle data er blevet indsat i tabellen.

Når du siger 'en række tegn', gætter jeg på, at du mener en række Java char s. Hvis jeg har gættet rigtigt, så tror jeg, at du ville være bedst i at konvertere char s til String s og derefter bruge samme fremgangsmåde som ovenfor.



  1. Hvordan kan jeg oprette forbindelse til SQL Server fra en Mac med PHP PDO?

  2. SQL Server Transactional Replication Configuration

  3. Dupliker rækker i en primær nøgletabel.

  4. Ugyldigt kolonnenavn sql-fejl