Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Query Dipisahkan Koma untuk Beberapa Paramete di PLSQL

Gunakan koleksi:

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

Kemudian Anda dapat memanggilnya di Jawa seperti ini:

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. Bagaimana cara membuat tabel dengan batasan saat menarik data dari tabel lain?

  2. Apakah ada jenis cap waktu modifikasi otomatis untuk kolom Oracle?

  3. SQL memilih baris berdasarkan tanggal terbaru dengan dua kolom unik

  4. Cara mendapatkan nilai UTC untuk SYSDATE di Oracle

  5. ADDM di SearchOracle.com