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

Trích xuất dữ liệu xml bằng truy vấn oracle

Tôi sẽ trích xuất dữ liệu theo từng giai đoạn:

SELECT xobjects.id, xobjects.name, xrows.index_id,
  xrows.provider_id_description, xrows.provider_id
FROM XMLTABLE(
    '/AuxiliaryType/AuxiliaryObject'
    PASSING xmltype(
               '<AuxiliaryType>
                 <AuxiliaryObject id="1" NAME="Provider_P107">
                         <Row>
                              <Index_id>1</Index_id>
                              <Provider_ID_description>GNRCN</Provider_ID_description>
                              <Provider_ID>GNRCN</Provider_ID>
                         </Row>

                          <Row>
                              <Index_id>2</Index_id>
                              <Provider_ID_description>EGUT12</Provider_ID_description>
                              <Provider_ID>EGUT12 </Provider_ID>
                         </Row>
                 </AuxiliaryObject>
                 <AuxiliaryObject id="2" NAME="Provider_P108">
                         <Row>
                              <Index_id>1</Index_id>
                              <Provider_ID_description>GNRCN</Provider_ID_description>
                              <Provider_ID>GNRCN</Provider_ID>
                         </Row>

                          <Row>
                              <Index_id>2</Index_id>
                              <Provider_ID_description>EGUT</Provider_ID_description>
                              <Provider_ID>EGUT </Provider_ID>
                         </Row>
                 </AuxiliaryObject>

                </AuxiliaryType>'
    )
    COLUMNS 
    name VARCHAR2(30) PATH '@NAME',
    id VARCHAR2(10) PATH '@id',
    xrows XMLTYPE PATH 'Row') xobjects,
  XMLTABLE(
    '/Row'
    PASSING xobjects.xrows
    COLUMNS
    index_id VARCHAR2(10) PATH 'Index_id', 
    provider_id_description VARCHAR2(30) PATH 'Provider_ID_description',
    provider_id  VARCHAR2(30) PATH 'Provider_ID') xrows;

XMLTable xobjects chứa mỗi AuxiliaryObject các phiên bản trong AuxiliaryType , từ văn bản XML ban đầu của bạn. Nó có các thuộc tính nameid , cộng với một XMLType con chứa các hàng lồng nhau. XMLTable thứ hai, xrows , mở rộng để các phần tử có thể được trích xuất. Việc kết hợp và chuyển các kiểu XML tạo ra hệ thống phân cấp cung cấp kết quả đầu ra bạn muốn:

ID         NAME                           INDEX_ID   PROVIDER_ID_DESCRIPTION        PROVIDER_ID                  
---------- ------------------------------ ---------- ------------------------------ ------------------------------
1          Provider_P107                  1          GNRCN                          GNRCN                          
1          Provider_P107                  2          EGUT12                         EGUT12                         
2          Provider_P108                  1          GNRCN                          GNRCN                          
2          Provider_P108                  2          EGUT                           EGUT                           

Điều này hoạt động trong SQL Developer dựa trên cơ sở dữ liệu 11.2.0.3 và trong SQL Fiddle .

Phiên bản dựa trên CTE trước đó của câu trả lời này cũng hoạt động trong SQL Developer nhưng SQL Fiddle gặp lỗi ORA-600; cùng với vấn đề bạn gặp phải trong câu hỏi cho thấy có thể SQL Fiddle đang ở trên phiên bản 11gR2 chưa được vá hoặc ít nhất đã được vá khác, có lỗi trong xử lý XML.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 24 câu hỏi phỏng vấn người quản lý đồng thời tuyệt vời

  2. Ngăn câu lệnh trừ Oracle xóa các bản sao

  3. chuỗi kết nối java để hỗ trợ tính năng TAF oracle

  4. Cách thêm một vào chuỗi trong oracle

  5. Oracle 12c XML nhận giá trị từ phản hồi