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

एक्सएमएल से ओरेकल डीबी टेबल:समस्याओं का सामना करना पड़ रहा है

आपके पहले बिंदु को ध्यान में रखते हुए, आपका आउटपुट केवल प्रदर्शन पर छोटा कर दिया गया है। आप 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


  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. ओरेकल - मैं एक विशिष्ट पंक्ति का वास्तविक आकार कैसे प्राप्त करूं?

  3. SQL में लगातार पंक्तियों को एक से अधिक स्तंभों द्वारा समूहबद्ध कैसे करें

  4. Oracle श्रोता को बाहरी रूप से सुनने के लिए कॉन्फ़िगर करना

  5. Oracle में UTF8 वर्ण सेट को कैसे कॉन्फ़िगर करें?