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

ओरेकल क्वेरी का उपयोग करके एक्सएमएल डेटा निकालें

मैं डेटा को चरणों में निकालूंगा:

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 प्रत्येक AuxiliaryObject . शामिल है AuxiliaryType . के अंतर्गत उदाहरण , आपके मूल XML पाठ से। इसमें विशेषताएं हैं name और id , साथ ही नेस्टेड पंक्तियों वाला एक उप-XMLType. दूसरा XMLTable, xrows , इसका विस्तार करता है ताकि तत्वों को निकाला जा सके। XML प्रकारों के जुड़ने और पास होने से वह पदानुक्रम बनता है जो आपको मनचाहा आउटपुट देता है:

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                           

यह SQL डेवलपर में 11.2.0.3 डेटाबेस के विरुद्ध काम करता है, और SQL Fiddle

इस उत्तर के पहले के सीटीई-आधारित संस्करण ने SQL डेवलपर में भी काम किया लेकिन SQL Fiddle ORA-600 त्रुटि मिली; कि प्रश्न में आपके पास जो समस्या थी, उसके साथ यह भी पता चलता है कि शायद SQL Fiddle 11gR2 के एक अनपेक्षित, या कम से कम अलग तरह से पैच किए गए संस्करण पर है, जिसमें 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. Oracle डेटाटाइप त्रुटि

  2. कई तालिकाओं पर Oracle पाठ खोज और जुड़ता है

  3. ऑरैकल 10 जी में कॉलम वैल्यू की गणना कैसे करें?

  4. Oracle में डेटाबेस सुरक्षा

  5. Oracle DB से java.sql.SQLException के रूप में त्रुटि प्राप्त करने में सक्षम नहीं:Io अपवाद:नेटवर्क एडेप्टर कनेक्शन स्थापित नहीं कर सका