Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zwróć instrukcję SQL wyraźnego kursora

Tak, możesz to zrobić za pomocą DBMS_SQL.TO_CURSOR_NUMBER funkcjonować. Twoja procedura będzie wyglądać tak:

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

Następnie musisz to nazwać tak:

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

OTWÓRZ DLA Instrukcja zezwala na CLOB jako oświadczenie, więc nie ma praktycznego ograniczenia pod względem rozmiaru.

Ponieważ nie wiesz w czasie projektowania, które kolumny zostaną wybrane (przynajmniej tak zakładam), nie ma sposobu na pozbycie się DBMS_SQL.DESCRIBE_COLUMNS i DBMS_SQL.DEFINE_COLUMN . W przeciwnym razie możesz użyć Oświadczenie FETCH zamiast 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. Wyrażenie regularne (RegEx) dla IPv6 Oddzielone od IPv4

  2. Losowy ciąg SQL z listy

  3. Jaki jest limit rozmiaru argumentu podprogramu varchar2 PL/SQL w Oracle?

  4. Konwertuj interwał na minuty

  5. Pobierz liczbę zaktualizowanych wierszy