Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Kembalikan Pernyataan SQL dari Kursor Eksplisit

Ya, Anda dapat melakukannya dengan DBMS_SQL.TO_CURSOR_NUMBER fungsi. Prosedur Anda akan terlihat seperti ini:

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);
    ...

Maka Anda harus menyebutnya seperti ini:

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

BUKA UNTUK Pernyataan memungkinkan CLOB sebagai pernyataan, jadi tidak ada batasan praktis dalam hal ukuran.

Karena Anda tidak tahu pada waktu desain kolom mana yang akan dipilih (setidaknya saya berasumsi demikian) tidak ada cara untuk menghilangkan DBMS_SQL.DESCRIBE_COLUMNS dan DBMS_SQL.DEFINE_COLUMN . Jika tidak, Anda dapat menggunakan FETCH Statement bukannya 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. Dapatkan amplop, yaitu rentang waktu yang tumpang tindih

  2. Menginstal Formulir dan Laporan Oracle 11g Rilis 2

  3. SQL:Pengecualian untuk kumpulan hasil yang diurutkan

  4. Mencoba memahami over() dan partisi by

  5. Memotong tabel dalam prosedur tersimpan