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

Gọi thủ tục thành viên PL / SQL hướng đối tượng Oracle từ JDBC

Trong jdbc bạn có thể phân tích cú pháp và thực thi các khối PL / SQL với out biến. Bạn có thể chuẩn bị một câu lệnh có thể gọi được chẳng hạn như:

declare
    x foo_type;
begin
    x := foo_type(5);
    x.proc(10);
    ? := x.func(2);
end;

Sau đó, bạn có thể sử dụng CallableStatement.registerOutParameter và sau khi câu lệnh đã được thực thi, hãy sử dụng get thích hợp hàm để truy xuất giá trị.

Bạn có thể truy cập trực tiếp vào FOO_TYPE gõ trực tiếp vào java, nhưng bạn có thực sự muốn làm điều này không? Xem bên dưới để biết ví dụ hoạt động:

SQL> create or replace and compile java source named "TestOutParam" as
  2  import java.sql.*;
  3  import oracle.sql.*;
  4  import oracle.jdbc.driver.*;
  5  
  6  public class TestOutParam {
  7  
  8     public static int get() throws SQLException {
  9  
 10        Connection conn =
 11           new OracleDriver().defaultConnection();
 12  
 13        StructDescriptor itemDescriptor =
 14           StructDescriptor.createDescriptor("FOO_TYPE",conn);
 15  
 16        OracleCallableStatement call =
 17           (OracleCallableStatement) conn.prepareCall("declare\n"
 18              + "    x foo_type;\n"
 19              + "begin\n"
 20              + "    x := foo_type(5);\n"
 21              + "    x.proc(10);\n"
 22              + "    ? := x;\n"
 23              + "end;\n");
 24  
 25        call.registerOutParameter(1, OracleTypes.STRUCT, "FOO_TYPE");
 26  
 27        call.execute();
 28  
 29        STRUCT myObj = call.getSTRUCT(1);
 30  
 31        Datum[] myData = myObj.getOracleAttributes();
 32  
 33        return myData[0].intValue();
 34  
 35     }
 36  }
 37  /

Đây là một lớp thử nghiệm để chỉ ra cách bạn có thể sử dụng phương thức registerOutParameter trên một đối tượng SQL, hãy gọi nó là:

SQL> CREATE OR REPLACE
  2  FUNCTION show_TestOutParam RETURN NUMBER
  3  AS LANGUAGE JAVA
  4  NAME 'TestOutParam.get() return java.lang.int';
  5  /

Function created

SQL> select show_testoutparam from dual;

SHOW_TESTOUTPARAM
-----------------
               20



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thực thi thủ tục trong một trình kích hoạt

  2. trình tự tiên tri ngủ đông tạo ra khoảng cách lớn

  3. Khóa ngoại tham chiếu đến một khung nhìn trong Oracle

  4. GROUP BY không có chức năng tổng hợp

  5. ORA-01821:lỗi không nhận dạng được định dạng ngày cho ngày ISO 8601 với giờ địa phương