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

Tìm nạp loại bảng Oracle từ thủ tục được lưu trữ bằng JDBC

Bạn không thể truy cập các đối tượng PLSQL (trường hợp 2 &5 =đối tượng cấp gói) từ java, hãy xem "java - truyền mảng trong thủ tục được lưu trữ oracle". Tuy nhiên, bạn có thể truy cập các kiểu SQL (trường hợp 1 và 4).

Để nhận các tham số OUT từ PL / SQL sang java, bạn có thể sử dụng phương pháp được mô tả trong một trong các chuỗi của Tom Kyte bằng cách sử dụng OracleCallableStatement. Mã của bạn sẽ có một bước bổ sung vì bạn đang truy xuất bảng Đối tượng thay vì bảng VARCHAR.

Đây là bản demo sử dụng Table of SQL Object, trước tiên hãy thiết lập:

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

Lớp java thực tế (sử dụng dbms_output.put_line để ghi nhật ký vì tôi sẽ gọi nó từ SQL, hãy sử dụng System.out.println nếu được gọi từ 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

Hãy gọi nó là:

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. Đếm số hàng đã nối trong phép nối bên trái

  2. Làm cách nào để xuất kết quả sql oracle thành một tệp trong windows?

  3. ORA-00911:ký tự không hợp lệ

  4. Oracle SQL Developer:Hiển thị kết quả REFCURSOR trong Grid?

  5. ORA-20001 trong R12 Thu thập thống kê giản đồ về 11g (FND_HISTOGRAM_COLS)