Oracle
 sql >> база данни >  >> RDS >> Oracle

xml към таблица на Oracle DB:срещам проблеми

Като се има предвид първата ви точка, изходът ви е съкратен само на дисплея. Можете да промените колко байта се показват в SQL*Plus с SET LONG :

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 използвате? Може да е по-стара от базата данни и да не разпознава синтаксиса
  • можете ли да публикувате точната заявка, както сте я въвели в SQL*Plus (Моля, използвайте функцията CODE на SO)

защото не мога да възпроизвеждам с 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 данни (описан в още едно SO ):

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. Как да тествате дали низът за формат на дата е валиден низ за формат на дата в Oracle

  3. Генерирайте XML файл с персонализирани XML тагове от таблицата на базата данни на oracle

  4. Изпращане на имейл с прикачени файлове в Oracle D2k, Oracle Forms 10g, Oracle Forms 6i

  5. Oracle Database12c ORA 01918 и грешка при свързване