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

Trả về câu lệnh SQL của con trỏ rõ ràng

Có, bạn có thể làm điều đó với DBMS_SQL.TO_CURSOR_NUMBER hàm số. Thủ tục của bạn sẽ giống như sau:

PROCEDURE run_query(p_cur IN OUT SYS_REFCURSOR) IS
    ...
BEGIN

    c := DBMS_SQL.TO_CURSOR_NUMBER(p_cur);

    -- get a description of the returned columns
    DBMS_SQL.DESCRIBE_COLUMNS(c, col_cnt, rec_tab);
    ...

Sau đó, bạn phải gọi nó như thế này:

declare

    l_cur SYS_REFCURSOR;

BEGIN

    OPEN l_cur FOR
       select  *
       from    table_a
       where   employee_number     = nvl(p_emp_no, employee_number)
       and     payroll_id          = nvl(p_payroll_id, payroll_id);
       and     business_group_id   = p_bg_id
       ...;

    tabletoexcel.run_query(l_cur);

MỞ CHO Câu lệnh cho phép CLOB như tuyên bố, vì vậy không có giới hạn thực tế về kích thước.

Vì bạn không biết tại thời điểm thiết kế cột nào sẽ được chọn (ít nhất là tôi giả sử như vậy) nên không có cách nào để loại bỏ DBMS_SQL.DESCRIBE_COLUMNSDBMS_SQL.DEFINE_COLUMN . Nếu không, bạn có thể sử dụng Tuyên bố FETCH thay vì DBMS_SQL.FETCH_ROWS(c)




  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ách kết nối với Oracle khi di chuyển

  2. Cách ghi vào tệp văn bản từ Pl / SQL, PLS lỗi 00363

  3. Có thể truy vấn cột được phân tách bằng dấu phẩy cho một giá trị cụ thể không?

  4. Nối các hàng thành CLOB

  5. Cách khôi phục hoặc thay đổi mật khẩu Oracle sysdba