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