Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

एक स्पष्ट कर्सर का SQL कथन लौटाएँ

हां, आप 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)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Solaris 11 पर GCC इंस्टाल करना

  2. केवल एक आईडी नंबर प्रदर्शित करने के लिए विशिष्ट फ़ील्ड और पंक्ति संख्या का चयन करने से डुप्लिकेट डेटा मिलता है

  3. Oci8 लोड नहीं कर सकता -> घातक त्रुटि:अपरिभाषित फ़ंक्शन पर कॉल करें oci_connect ()

  4. स्तंभ मान में एक मान खोजें जो अल्पविराम से अलग किए गए मानों को संग्रहीत करता है

  5. Oracle- बाएँ बाहरी कई तालिकाओं में शामिल हों जो वांछित शून्य मान वापस नहीं कर रहे हैं