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

XML नोड मान संशोधित करें- Oracle 12c के लिए UpdateXML समकक्ष

Oracle दस्तावेज़ एक्सएमएल को अपडेट करने के लिए XQuery का उपयोग करने की अनुशंसा करता है . तो कोशिश करना पहली बात है।

सबसे पहले, फ़ंक्शन के साथ पुराने दृष्टिकोण के साथ यह संभव है। XmlUpdate पर कॉल करने के बजाय नीचे दिए गए XQuery का उपयोग किया जा सकता है :

    XMLQuery(
      ' 
        declare function local:copy-replace($element as element()) {  
          if ($element/self::node_2) then <node_2/>
          else if ($element/self::node_3) then <node_3/>
          else if ($element/self::node_4) then <node_4/>
          else element {node-name($element)}  
                       {$element/@*, 
                        for $child in $element/node()  
                        return if ($child instance of element())  
                               then local:copy-replace($child)  
                               else $child  
                       }  
        };  
        local:copy-replace($p/*)
      '
      passing x as "p" returning content
    ) as xcol_2  

एक और, छोटा और अधिक सहज ज्ञान युक्त संस्करण:

    XMLQuery(
      '              
        copy $p2 := $p
        modify(
          replace value of node $p2/node_root/node_2 with "",
          replace value of node $p2/node_root/node_3 with "",
          replace value of node $p2/node_root/node_4 with ""
        )
        return $p2
      '
      passing x as "p" returning content
    ) as xcol_3

और इसके अलावा, संशोधित XML मान केवल तभी लौटाया जा सकता है जब शर्त मेल न खाए:

WITH xtbl AS
     (SELECT 1 AS xtbl_id,
             xmltype ('<node_root>
                    <node_1>12</node_1>
                    <node_2>233</node_2>
                    <node_3>223</node_3>
                    <node_4>234</node_4>
               </node_root>') AS x
        FROM Dual
      UNION ALL
      SELECT 2, xmltype ('<node_root>
                    <node_1></node_1>
                    <node_2>233</node_2>
                    <node_3>223</node_3>
                    <node_4>234</node_4>
               </node_root>')
        FROM Dual)
SELECT xtbl_id,
   x,
    XMLQuery(
      '   
        for $test in $p/*
        return 
          if( empty($p/node_root/node_1/text()) )             
            then $p
            else (
             copy $p2 := $p
              modify(
                replace value of node $p2/node_root/node_2 with "",
                replace value of node $p2/node_root/node_3 with "",
                replace value of node $p2/node_root/node_4 with ""
              )
              return $p2
           )   
      '
      passing x as "p" returning content
    ) as xcol_4
FROM xtbl

इसलिए XML मानों पर संचालन करने के लिए कई प्रकार हैं, लेकिन इसके लिए XQuery और XPath अपेक्षाकृत सरल XmlUpdate फ़ंक्शन की तुलना में ...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ऑरैकल में किसी तालिका से रिकॉर्ड भी कैसे चुनें?

  2. स्प्रिंग बूट 2.3.0 में नई त्रुटि। रिलीज:Oracle 12.2.0.1 jdbcdriver के लिए असंतुष्ट निर्भरता अपवाद लेकिन mysql jdbcdriver के साथ नहीं

  3. कठपुतली निर्माण विफल होने के लिए प्राप्त करें जब निहित SQL स्क्रिप्ट निष्पादन में विफल हो जाती है

  4. ओरेकल:क्या स्कीमा के लिए समानार्थी बनाना संभव है?

  5. जब हमारे पास डेटागार्ड हो तो फ्लैशबैक कैसे करें