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

क्या Oracle का EXTRACT फ़ंक्शन XMLELEMENT में NOENTITYESCAPING को तोड़ रहा है?

extractvalue() use का उपयोग करने का प्रयास करें फ़ंक्शन, जो extract() . के बजाय एन्कोडेड इकाइयों को हटा देता है . यहां एक उदाहरण दिया गया है:

clear screen;
column res format a20;

-- depending on a situation, NOENTITYESCAPING might be dropped

select extractvalue(
                     xmlelement(NOENTITYESCAPING e,id,'->')
                    , '//text()'
                    ) as res
  from (select level as id 
          from dual 
       connect by level < 6)

परिणाम:

RES                
--------------------
1->                  
2->                  
3->                  
4->                  
5->    

लेकिन extractvalue() . का उपयोग फ़ंक्शन इस तथ्य से सीमित हो सकता है कि यह केवल एक नोड का मान वापस कर सकता है। एकाधिक नोड्स के मान लौटाने के मामले में utl_i18n पैकेज, और unescape_reference() उस पैकेज के फ़ंक्शन का उपयोग एन्कोडेड इकाइयों से बचने के लिए किया जा सकता है:

clear screen;
column res format a20;

select utl_i18n.unescape_reference(xmlelement(root
                                             , xmlelement(node1, '>')
                                             , xmlelement(node2, '<')
                                             ).extract('//text()').getstringval()
                                   ) as res
 from dual
connect by level <= 3;

परिणाम:

RES                
--------------------
><                   
><                   
>< 

हां, utl_i18n.unescape_reference() . के रूप में फ़ंक्शन केवल varchar2 . के मान स्वीकार करता है डेटा प्रकार और प्रकार जिन्हें परोक्ष रूप से varchar2 . में परिवर्तित किया जा सकता है डेटा प्रकार, जब बड़े "स्ट्रिंग्स . को संसाधित करने की बात आती है तो आपके हाथ बंधे होते हैं ". इस स्थिति में आप dbms_xmlgen . पर जा सकते हैं पैकेज और convert() विशेष रूप से फ़ंक्शन, जिसमें एक अतिभारित संस्करण है जो CLOB . को स्वीकार करने में सक्षम है एस। यहाँ एक उदाहरण है:

select dbms_xmlgen.convert(
                           xmlagg(xmlelement(root
                                             , xmlelement(node1, '>')
                                             , xmlelement(node2, '<')
                                             )
                                  ).extract('//text()').getclobval()
                          , 1) as res
 from dual
connect by level <= 3000;   -- 1 (second parameter of the convert() function)
                            -- instructs function to decode entities  

परिणाम:

RES
------------------------------------------------------
><><><><><><><><><><><><><><><><><><><><><><><><><>
-- ... the rest of the CLOB



  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 में दशमलव के बिना संख्या को प्रारूपित करने के 4 तरीके

  2. MySQL में Oracle में लेवल जैसा कोई फंक्शन है

  3. Oracle 11g में प्रक्रिया में REFCURSOR चर को OUT पैरामीटर के रूप में प्रिंट करने में त्रुटि

  4. ओरेकल पीएल/एसक्यूएल अनुक्रम वस्तु निर्माणकर्ताओं के साथ अपेक्षित वृद्धि नहीं कर रहा है

  5. TRUNCATE और DELETE के बीच अंतर?