Pasar una matriz a las funciones de la base de datos tiene muchas formas. Una simple es la siguiente:
Primero debes crear una TABLE
escriba su esquema de base de datos:
CREATE TYPE DATE_ARRAY AS TABLE OF DATE;
Después de eso, debes escribir una FUNCTION
con este nuevo tipo de entrada:
-- a dummy function just for presenting the usage of input array
CREATE FUNCTION Date_Array_Test_Function(p_data IN DATE_ARRAY)
RETURN INTEGER
IS
TYPE Cur IS REF CURSOR;
MyCur cur;
single_date DATE;
BEGIN
/* Inside this function you can do anything you wish
with the input parameter: p_data */
OPEN MyCur FOR SELECT * FROM table(p_data);
LOOP
FETCH MyCur INTO single_date;
EXIT WHEN MyCur%NOTFOUND;
dbms_output.put_line(to_char(single_date));
END LOOP;
RETURN 0;
END Date_Array_Test_Function;
Ahora en java
código puede usar el siguiente código para llamar a una función de este tipo con un tipo de entrada de matriz:
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
public class Main
{
public static void main(String[] args) throws SQLException
{
Connection c = DriverManager.getConnection(url, user, pass);
String query = "begin ? := date_array_test_function( ? ); end;";
// note the uppercase "DATE_ARRAY"
ArrayDescriptor arrDescriptor = ArrayDescriptor.createDescriptor("DATE_ARRAY", c);
// Test dates
Date[] inputs = new Date[] {new Date(System.currentTimeMillis()),
new Date(System.currentTimeMillis()),
new Date(System.currentTimeMillis())};
ARRAY array = new ARRAY(arrDescriptor, c, inputs);
CallableStatement cs = c.prepareCall(query);
cs.registerOutParameter(1, Types.INTEGER); // the return value
cs.setObject(2, array); // the input of the function
cs.executeUpdate();
System.out.println(cs.getInt(1));
}
}
Espero que esto sea útil.
Buena suerte