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

ऐरे प्रतिक्रिया से Oracle 12c PLSQL SOAP EXTRACTVALUE

आपका एक्सएमएल अधूरा है; यह मानते हुए कि आपके पास वास्तव में अभी भी SOAP लिफाफा और उसके आस-पास का शरीर है, आप XMLTable का उपयोग XMLNamespaces के साथ कर सकते हैं, जैसा कि पहले दिखाया गया है (और extractvalue अभी भी बहिष्कृत है ):

select item
from XMLTable(
  XMLNamespaces (
    default 'urn:DHCPProv',
    'http://schemas.xmlsoap.org/soap/envelope/' as "soap",
    'http://schemas.xmlsoap.org/soap/encoding/' as "soapenc"
  ),
  '/soap:Envelope/soap:Body/getDhcpForPortResponse/soapenc:Array/item/item'
  passing XMLType(xml_string)
  columns item varchar2(4000) path '.'
)

तो आपके डेटा के साथ, और SOAP बिट्स जोड़े गए:

select item
from XMLTable(
  XMLNamespaces (
    default 'urn:DHCPProv',
    'http://schemas.xmlsoap.org/soap/envelope/' as "soap",
    'http://schemas.xmlsoap.org/soap/encoding/' as "soapenc"
  ),
  '/soap:Envelope/soap:Body/getDhcpForPortResponse/soapenc:Array/item/item'
  passing XMLType('<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
            <getDhcpForPortResponse
                xmlns="urn:DHCPProv">
                <soapenc:Array
                    soapenc:arrayType="soapenc:Array[2]"
                    xsi:type="soapenc:Array">
                    <item
                        soapenc:arrayType="xsd:string[5]"
                        xsi:type="soapenc:Array">
                        <item
                            xsi:type="xsd:string">
                            qbtp8482tv
                            </item>
                        <item
                            xsi:type="xsd:string">
                            111.11.111.111
                            </item>
                        <item
                            xsi:type="xsd:string">
                            bc644ba2501c
                            </item>
                        <item
                            xsi:type="xsd:string">
                            MF5601T_AMD-NDF
                            </item>
                        <item
                            xsi:type="xsd:string"/>
                        </item>
                    <item
                        soapenc:arrayType="xsd:string[5]"
                        xsi:type="soapenc:Array">
                        <item
                            xsi:type="xsd:string">
                            qbtp8482tv
                            </item>
                        <item
                            xsi:type="xsd:string">
                            222.22.222.222
                            </item>
                        <item
                            xsi:type="xsd:string">
                            704fb8f3e4e1
                            </item>
                        <item
                            xsi:type="xsd:string">
                            MF5601T_AMD-NDF
                            </item>
                        <item
                            xsi:type="xsd:string"/>
                        </item>
                    </soapenc:Array>
                </getDhcpForPortResponse>
 </soap:Body>
 </soap:Envelope>')
  columns item varchar2(4000) path '.'
)

जो मिलता है:

ITEM
--------------------------------------------------

                            qbtp8482tv
                            

                            111.11.111.111
                            

                            bc644ba2501c
                            

                            MF5601T_AMD-NDF
                            
(null)

                            qbtp8482tv
                            

                            222.22.222.222
                            

                            704fb8f3e4e1
                            

                            MF5601T_AMD-NDF
                            
(null)

db<>fiddle

जो आपके उदाहरण में न्यूलाइन और प्रमुख रिक्त स्थान के कारण थोड़ा गड़बड़ है। यदि वे वास्तव में मौजूद हैं तो आप उन्हें काट सकते हैं:

select rtrim(ltrim(item, chr(32)||chr(10)), chr(10)||chr(32)) as item
from XMLTable...

जो देता है:

ITEM
--------------------
qbtp8482tv
111.11.111.111
bc644ba2501c
MF5601T_AMD-NDF
(null)
qbtp8482tv
222.22.222.222
704fb8f3e4e1
MF5601T_AMD-NDF
(null)

और यदि आप उन्हें नहीं चाहते हैं तो आप शून्य मानों को बाहर कर सकते हैं।

यदि आपके पास SOAP आवरण नहीं है तो यह अधिक जटिल है; आप XPath में वाइल्डकार्ड का उपयोग कर सकते हैं लेकिन XML अमान्य होगा और ठीक से पार्स नहीं करेगा, इसलिए आपको नेमस्पेस उपसर्गों को हटाना होगा, या रैपर को वापस जोड़ना होगा। आपके पहले के प्रश्न के आधार पर मुझे नहीं लगता कि यह है हालांकि मामला।




  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 pl/SQL अपवादों की पूरी सूची कहां मिल सकती है?

  2. ओरा:12505:टीएनएस:श्रोता को वर्तमान में कनेक्ट डिस्क्रिप्टर में दिए गए एसआईडी के बारे में पता नहीं है (डीबीडी त्रुटि:ओसीआईएससेवर अटैच)

  3. पीएल/एसक्यूएल डेवलपर उस पंक्ति को कैसे प्राप्त करें जिसने डालने को विफल कर दिया?

  4. एप्लिकेशन बनाम डेटाबेस निवासी कनेक्शन पूल

  5. इंस्ट्रुमेंटेशन:कास्टिंग org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper to oracle.jdbc.OracleConnection