Ja, dat kan met DBMS_SQL.TO_CURSOR_NUMBER functie. Uw procedure ziet er als volgt uit:
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);
...
Dan moet je het zo noemen:
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);
OPEN VOOR
Verklaring staat CLOB
toe als statement, dus er is geen praktische limiet qua grootte.
Aangezien je op het moment van ontwerpen niet weet welke kolommen zullen worden geselecteerd (tenminste dat neem ik aan), is er geen manier om DBMS_SQL.DESCRIBE_COLUMNS
te verwijderen. en DBMS_SQL.DEFINE_COLUMN
. Anders kunt u FETCH-instructie
gebruiken in plaats van DBMS_SQL.FETCH_ROWS(c)