हां, आप DBMS_SQL.TO_CURSOR_NUMBER के साथ ऐसा कर सकते हैं समारोह। आप प्रक्रिया इस तरह दिखेगी:
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);
...
फिर आपको इसे इस तरह कॉल करना होगा:
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);
के लिए खोलें
स्टेटमेंट CLOB
. की अनुमति देता है बयान के रूप में, इसलिए आकार के मामले में कोई व्यावहारिक सीमा नहीं है।
चूंकि आप डिज़ाइन समय पर नहीं जानते हैं कि कौन से कॉलम चुने जाएंगे (कम से कम मुझे ऐसा लगता है) DBMS_SQL.DESCRIBE_COLUMNS
से छुटकारा पाने का कोई तरीका नहीं है। और DBMS_SQL.DEFINE_COLUMN
. अन्यथा आप FETCH Statement
का उपयोग कर सकते हैं के बजाय DBMS_SQL.FETCH_ROWS(c)