Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Chuyển danh sách ngày tháng vào hàm oracle db qua java

Truyền một mảng cho các hàm cơ sở dữ liệu có nhiều cách. Một cái đơn giản như sau:

Trước tiên, bạn nên tạo một TABLE nhập vào lược đồ DB của bạn:

CREATE TYPE DATE_ARRAY AS TABLE OF DATE;

Sau đó, bạn nên viết một FUNCTION với kiểu đầu vào mới này:

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

Bây giờ trong java bạn có thể sử dụng mã sau để gọi một hàm như vậy với kiểu đầu vào mảng:

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

Hy vọng điều này sẽ hữu ích.

Chúc may mắn



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL (ORACLE):ORDER BY và LIMIT

  2. Cách gọi thủ tục lưu trữ Oracle từ nhà máy dữ liệu azure v2

  3. chuyển mảng cho thủ tục được lưu trữ

  4. ORA-00119:thông số kỹ thuật không hợp lệ ORA-00132:lỗi cú pháp

  5. Oracle - Cách tạo một khung nhìn cụ thể hóa với FAST REFRESH và JOINS