से डेटा निकालना XMLTABLE और XQuery का उपयोग करते हुए मैं एक्सएमएल का निम्न भाग है:एक्सएमएल
<per:Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.something.com/2014/11/bla/webservice.xsd"
xmlns:per="http://www.something.com/2014/11/bla/person">
<per:Initials>E.C.</per:Initials>
<per:FirstName>Erik</per:FirstName>
<per:LastName>Flipsen</per:LastName>
<per:BirthDate>1980-07-01</per:BirthDate>
<per:Gender>Male</per:Gender>
</per:Person>
इस एक्सएमएल मैं PL/SQL में कुछ डेटा निकालना चाहते हैं से। मैं XMLTABLE का उपयोग करना चाहता हूं, क्योंकि EXTRACT और EXTRACTVALUE फ़ंक्शंस को बहिष्कृत किया गया है।
मैं इस क्वेरी का उपयोग कर डेटा निकालने में सक्षम हूँ: के बाद से मैं वास्तव में परवाह नहीं है क्या संक्षिप्ताक्षर भेजने पार्टी नाम स्थान के लिए उपयोग कर रहा है, मुझे पता है
select pers.Initials,
pers.Firstname
into lsInitials,
lsFirstname
from
XMLTABLE ('*:Person' passing pxRequest
columns Initials PATH '*:Initials',
Firstname PATH '*:FirstName'
) pers;
मैं नामस्थान के लिए वाइल्डकार्ड का उपयोग कर रहा वैसे भी सही डेटा जहां मेरा डेटा प्राप्त करना है। तथापि http://docs.oracle.com/database/121/SQLRF/functions268.htm#SQLRF06232 पथ पर दस्तावेज़ीकरण वैकल्पिक किया जाना चाहिए के अनुसार
- , जैसे ही मैं कॉलम अनुभाग से पथ को हटाने के रूप में, मैं नहीं: इस कोड के साथ
मैं दो चीजें हैं जो मुझे पहेली है अब कोई परिणाम प्राप्त करें।
संपादित करें:
मुझे पता चला कि जब मैं तत्वों के लिए नामस्थान निकालने के लिए, और उन्हें अपरकेस बनाया है, यह काम करता है। तो ऐसा लगता है कि कॉलम नामों को इसे काम करने के लिए एक्सएमएल तत्वों के नामों से मेल खाना चाहिए। मैंने अभी तक यह पता नहीं लगाया कि इसे नामांकित एक्सएमएल के साथ कैसे काम करना है।
- प्रलेखन यह भी नोट करता है कि "ऑर्डिनेलिटी कॉलम को छोड़कर प्रत्येक परिणामी कॉलम के लिए, आपको कॉलम डेटा प्रकार निर्दिष्ट करना होगा", हालांकि, ऐसा लगता है कि यह ठीक काम करता है। यह कॉलम के लिए निर्दिष्ट करने के लिए थोड़ा अनावश्यक लगता है और वे चर के लिए जो मैं डेटा ला रहा हूं। यदि कोई डेटा प्रकार निर्दिष्ट नहीं करता है तो मुझे कोई समस्या हो सकती है?
Runnable कोड नमूना:
SET SERVEROUTPUT ON;
DECLARE
pxRequest xmltype := xmltype('<per:Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.something.com/2014/11/bla/webservice.xsd"
xmlns:per="http://www.something.com/2014/11/bla/person">
<per:Initials>E.C.</per:Initials>
<per:FirstName>Erik</per:FirstName>
<per:LastName>Flipsen</per:LastName>
<per:BirthDate>1980-01-01</per:BirthDate>
<per:Gender>Male</per:Gender>
</per:Person>');
lsInitials varchar2(100);
lsFirstname varchar2(100);
begin
select pers.Initials,
pers.Firstname
into lsInitials,
lsFirstname
from
XMLTABLE ('*:Person' passing pxRequest
columns Initials PATH '*:Initials',
Firstname PATH '*:FirstName'
) pers;
dbms_output.put_line(lsInitials);
dbms_output.put_line(lsFirstname);
end;