Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

bảng xml to oracle DB:gặp sự cố

Xem xét điểm đầu tiên của bạn, đầu ra của bạn chỉ bị cắt ngắn trên màn hình. Bạn có thể thay đổi số byte được hiển thị trong SQL * Plus bằng 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>

Như bạn đã nhận thấy, bộ ký tự của bạn sẽ được sửa đổi theo thông số phiên NLS của bạn (i-e:tệp sẽ được dịch sang bộ ký tự của ứng dụng khách của bạn).

Đối với điểm thứ hai:

  • Bạn đang sử dụng phiên bản SQL * Plus nào? Nó có thể cũ hơn cơ sở dữ liệu và không nhận dạng được cú pháp
  • bạn có thể đăng truy vấn chính xác khi bạn nhập nó trong SQL * Plus không (Vui lòng sử dụng tính năng CODE của SO)

bởi vì tôi không thể tái tạo với 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

Cập nhật: Cú pháp XMLTable này phải là một tính năng mới của 10gR2 (10.2. *) (Cần xác nhận)

Tuy nhiên, bạn có thể sử dụng một phương pháp khác để truy cập Dữ liệu XML (được mô tả trong SO khác ):

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. Làm cách nào để triển khai ứng dụng .NET sử dụng ODAC mà không cần cài đặt toàn bộ thành phần cho người dùng?

  2. SQL:AVG với giá trị NULL

  3. Cách tiếp cận lỗi Đã bị trừ do lỗi cuộc gọi đọc khi kết nối với phiên bản Amazon RDS Oracle

  4. Tại sao lại sử dụng mệnh đề JOIN thay vì điều kiện WHERE?

  5. Mối quan hệ bị cấm Học viện Oracle