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

Gọi thủ tục Oracle PL / SQL với kiểu trả về Đối tượng tùy chỉnh từ trình điều khiển JDBCthin 0jdbc6

Cuối cùng tôi (với một chút giúp đỡ từ những người khác) đã tìm ra câu trả lời cho điều này. Nó gồm ba phần:

Đầu tiên là tôi cần sử dụng:

OracleCallableStatement stmt = (OracleCallableStatement) conn.prepareCall(query);

thay vì JDBC CallableStatement đơn giản mà tôi đã cố gắng sử dụng.

Phần thứ hai là tôi phải đăng ký tham số "out" của mình như sau:

stmt.registerOutParameter(2, OracleTypes.STRUCT, "DATA_SUMMARY_TAB");

Phần thứ ba, và ẩn ý trong phần 2 ở trên, là "DATA_SUMMARY_TAB" phải nằm trong TRƯỜNG HỢP LÊN LỚP. Nếu bạn đặt nó ở dạng chữ thường, thì bạn sẽ nhận được một thông báo lỗi khó hiểu như sau:

java.sql.SQLException: invalid name pattern: MYTEST.data_summary_tab

tại oracle.jdbc.oracore.OracleTypeADT.initMetadata (OracleTypeADT.java:553) tại oracle.jdbc.oracore.OracleTypeADT.init (OracleTypeADT.java:469) tại oracle.sql.StructDescriptor.init oracle.sql.StructDescriptor. (StructDescriptor.java:320)

Vậy là xong.

Ngoài ra, xin lưu ý rằng loại đối tượng tùy chỉnh của chúng tôi không có trong bất kỳ gói nào. Nếu đúng như vậy, bạn có thể cần phải hack tham số thứ ba một chút.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao OCI8 / Oracle oci_bind_array_by_name của PHP không hoạt động với tôi?

  2. Chuyển giá trị được lưu trữ trong biến PL / SQL vào mệnh đề IN

  3. Oracle Truy cập các bản ghi đã cập nhật trong cùng một giao dịch

  4. Cách xử lý ORA-02014:không thể chọn CẬP NHẬT từ chế độ xem với DISTINCT, GROUP BY, v.v.

  5. Làm cách nào để tạo chỉ mục văn bản cho tìm kiếm '% abc%'?