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

Cách trả lại tập hợp tùy chỉnh trong quy trình lưu trữ PL / SQL

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;
/

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các lựa chọn thay thế cho CASE trong Oracle 8i

  2. N giá trị khác biệt hàng đầu của một cột trong Oracle

  3. Khung thực thể &Oracle:Không thể chèn VARCHAR2> 1.999 ký tự

  4. bắt ngoại lệ DB trong ứng dụng JSF + EJB

  5. Cách chuyển tham số DateTime trong truy vấn SQL cho Oracle DB