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

मैं एक संग्रहीत प्रक्रिया कैसे लिखूं जो किसी अन्य संग्रहीत प्रक्रिया से रेफ कर्सर में कॉलम जोड़ता है?

एक संभावित समाधान (जिसे अंततः सरल बनाया जा सकता है) कर्सर को संसाधित करने और फ़ंक्शन मान जोड़ने के लिए तालिका फ़ंक्शन का उपयोग करना है।

मान लें कि sys_refcursor लौटाने वाले फ़ंक्शन को get_cur कहा जाता है और यह कि कर्सर में कॉलम ID, NAME . होता है (यह महत्वपूर्ण है, क्योंकि टेबल फंक्शन को टाइप डेफिनिशन की आवश्यकता होती है)।

आप पंक्ति (अतिरिक्त पथ कॉलम सहित) और परिणामी तालिका के लिए TYPE घोषित करते हैं।

create type t_row is object
 ( id             number(10),
   name varchar2(10),
   path varchar2(10)
);
/

create type t_rows is table of t_row;
/

और टेबल फंक्शन को परिभाषित करें जो कर्सर ला रहा है और फंक्शन कॉल जोड़ रहा है।

create or replace function get_cur2  return 
t_rows
PIPELINED
as
   cv_out     sys_refcursor;
   id   number;
   name   varchar2(100);    
begin
      cv_out := get_cur; 
      loop 
        FETCH cv_out INTO id, name;
        exit when cv_out%NOTFOUND;
        pipe row(t_row(id,name, GetRegionPath(id)));
      end loop;
      close    cv_out;
      return;
end;
/

अब आप टेबल फ़ंक्शन से डेटा का चयन कर सकते हैं

select * from  table(get_cur2); 

        ID NAME       PATH     
---------- ---------- ----------
         1 one        path 1     
         2 two        path 2 

और निश्चित रूप से आप इस क्वेरी का उपयोग तीसरे फ़ंक्शन में एक कर्सर खोलने के लिए कर सकते हैं जो अतिरिक्त पथ कॉलम के साथ SYS_REFCURSOR लौटाएगा।



  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 पर संख्या के रूप में स्ट्रिंग का चयन करें

  2. ओरेकल पीएल/एसक्यूएल प्रक्रिया को डीडीएल के साथ तत्काल निष्पादित करने के लिए AUTHID CURRENT_USER की आवश्यकता है

  3. ओरेकल ट्रेस फ़ाइल से गतिरोध त्रुटि का कारण ढूँढना

  4. SQL प्लस से संग्रहीत कार्यविधि कैसे निष्पादित करें?

  5. Oracle 12c के साथ CLOB के रूप में संग्रहीत JSON सरणी में तत्वों की संख्या कैसे प्राप्त करें?