Oracle
 sql >> Baza danych >  >> RDS >> Oracle

przekazać tablicę do procedury oracle

Oto przykład, jak to zrobić.

Poniższy skrypt konfiguruje tabelę, typ i procedurę składowaną w bazie danych. Procedura pobiera parametr typu tablica i wstawia każdy wiersz tablicy do tabeli:

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

Następnie kod Java demonstruje przekazywanie tablicy do tej procedury składowanej:

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

Jeśli uruchomisz skrypt SQL, a następnie klasę Java, a następnie wyślesz zapytanie do tabeli strings , powinieneś zauważyć, że wszystkie dane zostały wstawione do tabeli.

Kiedy mówisz „tablica znaków”, zgaduję, że masz na myśli tablicę char Javy s. Jeśli dobrze odgadłem, myślę, że najlepiej będzie przekonwertować char s do String s, a następnie stosując to samo podejście, co powyżej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Porównanie dostawców zgodnych z Entity Framework dla Oracle?

  2. Jak zmienić format daty z MM/DD/RRRR na RRRR-MM-DD w PL/SQL?

  3. Przestaw Oracle z podzapytaniem

  4. Gdzie jest baza danych błędów Oracle?

  5. JDBC ResultSet:potrzebuję getDateTime, ale są tylko getDate i getTimeStamp