आपके पहले बिंदु को ध्यान में रखते हुए, आपका आउटपुट केवल प्रदर्शन पर छोटा कर दिया गया है। आप SET LONG
. के साथ SQL*प्लस में प्रदर्शित होने वाले बाइट की संख्या को बदल सकते हैं :
SQL> SELECT XMLTYPE(bfilename('D', 'test.xml'),
2 nls_charset_id('WINDOWS-1252')) xml_data FROM dual;
XML_DATA
--------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<badges>
<row UserId="3714" Name=
SQL> SET LONG 4000
SQL> /
XML_DATA
--------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<badges>
<row UserId="3714" Name="Teacher" Date="2008-09-15T08:55:03.923"/>
<row UserId="994" Name="Teacher" Date="2008-09-15T08:55:03.957"/>
</badges>
जैसा कि आपने देखा है, आपके वर्ण सेट को आपके NLS सत्र पैरामीटर के अनुसार संशोधित किया जाएगा (यानी:फ़ाइल का अनुवाद आपके क्लाइंट के वर्ण सेट में किया जाएगा)।
दूसरे बिंदु के लिए:
- एसक्यूएल*प्लस का आप किस संस्करण का उपयोग कर रहे हैं? यह डेटाबेस से पुराना हो सकता है और सिंथैक्स को नहीं पहचान सकता
- क्या आप सटीक क्वेरी पोस्ट कर सकते हैं जैसे आपने इसे SQL*Plus में टाइप किया था (कृपया SO की CODE सुविधा का उपयोग करें)
क्योंकि मैं Oracle 10.2.0.3 के साथ पुन:पेश नहीं कर सकता:
SQL> SELECT UserId, NAME, to_timestamp(dt, 'YYYY-MM-DD"T"HH24:MI:SS.FF3') dt
2 FROM (SELECT XMLTYPE(bfilename('D', 'test.xml'),
3 nls_charset_id('WINDOWS-1252')) xml_data FROM dual),
4 XMLTable('for $i in /badges/row
5 return $i'
6 passing xml_data columns UserId NUMBER path '@UserId',
7 NAME VARCHAR2(50) path '@Name',
8 dt VARCHAR2(25) path '@Date');
USERID NAME DT
---------- --------- ----------------------------
3714 Teacher 15/09/08 08:55:03,923000000
994 Teacher 15/09/08 08:55:03,957000000
अपडेट करें: यह XMLTable सिंथैक्स 10gR2 (10.2.*) की एक नई विशेषता होनी चाहिए (पुष्टि की आवश्यकता है)
हालाँकि आप XML डेटा तक पहुँचने की दूसरी विधि का उपयोग कर सकते हैं (एक और एसओ ):
SQL> SELECT extractvalue(column_value, '/row/@UserId') "userID",
2 extractvalue(column_value, '/row/@Name') "Name",
3 extractvalue(column_value, '/row/@Date') "Date"
4 FROM TABLE(XMLSequence(XMLTYPE(bfilename('D', 'tmp.xml'),
5 nls_charset_id('WINDOWS-1252')).extract('/badges/row'))) t;
userID Name Date
------- --------- ------------------------
3718 Teacher 2008-09-15T08:55:03.923
994 Teacher 2008-09-15T08:55:03.957