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

Ambil tipe tabel Oracle dari prosedur tersimpan menggunakan JDBC

Anda tidak dapat mengakses objek PLSQL (kasus 2 &5 =objek tingkat paket) dari java, lihat "java - melewatkan array dalam prosedur tersimpan Oracle". Namun Anda dapat mengakses tipe SQL (case 1 dan 4).

Untuk mendapatkan parameter OUT dari PL/SQL ke java, Anda dapat menggunakan metode yang dijelaskan di salah satu utas Tom Kyte menggunakan OracleCallableStatement. Kode Anda akan memiliki langkah tambahan karena Anda mengambil tabel Object alih-alih tabel VARCHAR.

Berikut demo menggunakan Table of SQL Object, pertama setup:

SQL> CREATE TYPE t_type AS OBJECT (val VARCHAR(4));
  2  /
Type created

SQL> CREATE TYPE t_table AS TABLE OF t_type;
  2  /
Type created

SQL> CREATE OR REPLACE PROCEDURE p_sql_type (p_out OUT t_table) IS
  2  BEGIN
  3     p_out := t_table(t_type('a'), t_type('b'));
  4  END;
  5  /
Procedure created

Kelas java yang sebenarnya (menggunakan dbms_output.put_line untuk login karena saya akan memanggilnya dari SQL, gunakan System.out.println jika dipanggil dari java):

SQL> CREATE OR REPLACE
  2  AND COMPILE JAVA SOURCE NAMED "ArrayDemo"
  3  as
  4  import java.sql.*;
  5  import oracle.sql.*;
  6  import oracle.jdbc.driver.*;
  7  
  8  public class ArrayDemo {
  9     
 10     private static void log(String s) throws SQLException {
 11        PreparedStatement ps =
 12           new OracleDriver().defaultConnection().prepareStatement
 13           ( "begin dbms_output.put_line(:x); end;" );
 14        ps.setString(1, s);
 15        ps.execute();
 16        ps.close();
 17     }
 18  
 19     public static void getArray() throws SQLException {
 20  
 21        Connection conn = new OracleDriver().defaultConnection();
 22  
 23        OracleCallableStatement cs =
 24           (OracleCallableStatement)conn.prepareCall
 25           ( "begin p_sql_type(?); end;" );
 26        cs.registerOutParameter(1, OracleTypes.ARRAY, "T_TABLE");
 27        cs.execute();
 28        ARRAY array_to_pass = cs.getARRAY(1);
 29  
 30        /*showing content*/
 31        Datum[] elements = array_to_pass.getOracleArray();
 32  
 33        for (int i=0;i<elements.length;i++){
 34           Object[] element = ((STRUCT) elements[i]).getAttributes();
 35           String value = (String)element[0];
 36           log("array(" + i + ").val=" + value);
 37        }
 38     }
 39  }
 40  /
Java created

Sebut saja:

SQL> CREATE OR REPLACE
  2  PROCEDURE show_java_calling_plsql
  3  AS LANGUAGE JAVA
  4  NAME 'ArrayDemo.getArray()';
  5  /

Procedure created

SQL> EXEC show_java_calling_plsql;

array(0).val=a
array(1).val=b


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengaturan Oracle per skema default pengguna (tidak mengubah sesi)

  2. Bagaimana menggambarkan masalah kinerja dalam database relasional?

  3. Cara Membuat VARRAY Sebagai Anggota Blok PL/SQL Di Database Oracle

  4. Basis data Oracle Pra-Built untuk pembelajaran dan pengujian menggunakan Oracle Developer VM

  5. Oracle 12c DIIDENTIFIKASI OLEH NILAI