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

Truy vấn được phân tách bằng dấu phẩy cho nhiều tham số trong PLSQL

Sử dụng một bộ sưu tập:

CREATE OR REPLACE PROCEDURE RQUERY1
(
 I_PRODUCT IN  SYS.ODCIVARCHAR2LIST,
 I_MODEL   IN  SYS.ODCIVARCHAR2LIST,
 I_TYPE    IN  SYS.ODCIVARCHAR2LIST,
 O_Cursor  OUT SYS_REFCURSOR
)
AS
BEGIN
  OPEN O_Cursor FOR
  SELECT t.*
  FROM   table1 t
         INNER JOIN TABLE( I_PRODUCT ) p ON t.PRODUCT = p.COLUMN_VALUE
         INNER JOIN TABLE( I_MODEL   ) m ON t.MODEL   = m.COLUMN_VALUE
         INNER JOIN TABLE( I_TYPE    ) y ON t.TYPE    = y.COLUMN_VALUE;
END RQUERY1;
/

Sau đó, bạn có thể gọi nó bằng Java như sau:

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.internal.OracleTypes;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor; 

public class TestDatabase {
    public static void main(String args[]){
        try{

            Class.forName("oracle.jdbc.OracleDriver");

            Connection con = DriverManager.getConnection("jdbc:oracle:thin:@url:port:sid","UserName","Password");

            String[] products = { "Product1", "Product2", "Product3" };
            String[] models   = { "Model1", "Model2", "Model3" };
            String[] types    = { "Type1", "Type2", "Type3" };

            ArrayDescriptor des = ArrayDescriptor.createDescriptor("SYS.ODCIVARCHAR2LIST", con);

            CallableStatement st = con.prepareCall("call TEST.RQUERY1(?,?,?,?)");

            st.setArray( 1, new ARRAY( des, con, products ) );
            st.setArray( 2, new ARRAY( des, con, models ) );
            st.setArray( 3, new ARRAY( des, con, types ) );
            st.registerOutParameter( 4, OracleTypes.CURSOR );
            st.execute();
            ResultSet cursor = ((OracleCallableStatement)st).getCursor(4);

            while ( cursor.next() )
            {
                int id = cursor.getInt(1);
                String product = cursor.getString(2);
                String model   = cursor.getString(3);
                String type    = cursor.getString(4);

                System.out.println( String.format( "Id: %5d", id ) );
                System.out.println( String.format( "  Product: %s\t", product ) );
                System.out.println( String.format( "  Model:   %s", model ) );
                System.out.println( String.format( "  Type:    %s", type ) );
            }
        } catch(ClassNotFoundException | SQLException e) {
            System.out.println(e);
        }
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chỉ định con trỏ hàm

  2. Ý nghĩa chính xác của việc có một điều kiện như trong đó 0 =0 là gì?

  3. Oracle 10g chấp nhận năm chữ số trong một ngày

  4. Kết hợp Oracle SQL MIN và MAX từ cùng một bảng

  5. Cách lấy hàng cuối cùng của bảng Oracle