Trừ khi bạn đặc biệt quan tâm đến việc sử dụng một bộ sưu tập, thì việc sử dụng con trỏ tham chiếu sẽ đơn giản hơn:
CREATE OR REPLACE PROCEDURE sample_procedure (
p_some_select_sql_result OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN p_some_select_sql_result FOR
SELECT ...
FROM ...
JOIN ...
... etc.;
END;
/
Sau đó, từ JDBC, bạn có thể làm những việc như:
cStmt = conn.prepareCall('{ call sample_procedure(?) }');
cStmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cStmt.execute();
rSet = cStmt.getCursor(1);
và sau đó bạn có thể lặp lại tập kết quả như bạn làm với bất kỳ tập hợp nào khác.
Thay vào đó, bạn cũng có thể sử dụng một hàm:
CREATE OR REPLACE FUNCTION sample_function RETURN SYS_REFCURSOR
AS
l_some_select_sql_result
BEGIN
OPEN l_some_select_sql_result FOR
SELECT ...
FROM ...
JOIN ...
... etc.;
RETURN l_some_select_sql_result;
END;
/
và
cStmt = conn.prepareCall('{ ?=call sample_function }');
cStmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cStmt.execute();
rSet = cStmt.getCursor(1);
Rõ ràng là bạn cần xử lý bất kỳ tham số nào khác mà bạn đang chuyển cho thủ tục / hàm thực của mình.