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

Send en liste over datoer til en oracle db-funktion via java

At overføre en matrix til databasefunktioner har mange måder. En enkel er som følger:

Først skal du oprette en TABLE indtast dit DB-skema:

CREATE TYPE DATE_ARRAY AS TABLE OF DATE;

Derefter skal du skrive en FUNCTION med denne nye type input:

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

Nu i java kode kan du bruge følgende kode til at kalde en sådan funktion med en array input type:

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

Håber dette ville være nyttigt.

Held og lykke



  1. Hvordan kombinerer man samlede funktioner i MySQL?

  2. SQL-forespørgsel efter flere tabeller med flere joinforbindelser og kolonnefelt med kommasepareret liste

  3. Oracle Forms 6i går ned med 0xC0000005 ved start efter installation af patch 19

  4. Tilknytning af en SQL-visning til en dvaletilstand jpa-enhed