How to convert data in table to XML in Oracle SQL? And using XMLTYPE and extractvalue

 Use the below SQL to convert data in table to XML (XMLTYPE)

DECLARE
l_xmltype XMLTYPE;
BEGIN
SELECT XMLELEMENT("REQUEST",
XMLELEMENT("REQUEST_ID",req.REQUEST_ID),
XMLELEMENT("ORG_ID",req.ORG_ID),
XMLELEMENT("REQUEST_NUMBER",req.REQUEST_NUMBER),
XMLELEMENT("LINES_COUNT",(   SELECT count(*) from xxaas_request_lines req_line 
                            where req.request_id=req_line.request_id 
                        )
),
XMLELEMENT("LINES", 
( 
SELECT   
   XMLAGG(
     XMLELEMENT("LINE",
       /* another way using XMLFOREST
           XMLFOREST(
             req_line.request_id AS "REQUEST_ID",
             req_line.request_line_id AS "REQUEST_LINE_ID"

           )
       */
       XMLELEMENT("REQUEST_LINE_ID",req_line.REQUEST_LINE_ID),
       XMLELEMENT("REQUEST_ID",req_line.REQUEST_ID),
       XMLELEMENT("LINE_DESC",req_line.LINE_DESC),
       XMLELEMENT("LINE_AMOUNT",req_line.LINE_AMOUNT),
       XMLELEMENT("DISTRIBUTIONS_COUNT",(   SELECT count(*) 
       from xxaas_request_budget_lines dist_line 
       where req_line.request_line_id = dist_line. request_line_id 
       and req_line.request_id=dist_line.request_id
       )
       ),
       XMLELEMENT("DISTRIBUTIONS",
            (
            SELECT
            XMLAGG(
                XMLELEMENT("DISTRIBUTION",
                XMLELEMENT("DISTRIBUTION_LINE_ID",dist_line.BUDGET_LINE_ID),
                XMLELEMENT("REQUEST_ID",dist_line.REQUEST_ID),
                XMLELEMENT("REQUEST_LINE_ID",dist_line.REQUEST_LINE_ID),
                XMLELEMENT("DISTRIBUTION_AMOUNT",dist_line.FUND_AMOUNT)
                )
            )
            FROM    xxaas_request_budget_lines dist_line
            WHERE   req_line.request_line_id = dist_line. request_line_id 
            and req_line.request_id=dist_line.request_id
            )
            
       )
     )
   ) 
FROM     xxaas_request_lines req_line
WHERE    req.request_id=req_line.request_id
)
)
)
INTO   l_xmltype
FROM   
xxaas_requests req 
where req.request_id=1;  --to get single row

--XML TEST table containing one column of type "XMLTYPE"
INSERT INTO xml_test VALUES (l_xmltype);  
COMMIT;
END;

 

Below is the sample XML generated


<REQUEST>
  <REQUEST_ID>1</REQUEST_ID>
  <ORG_ID>100</ORG_ID>
  <REQUEST_NUMBER>Request1</REQUEST_NUMBER>
  <LINES_COUNT>2</LINES_COUNT>
  <LINES>
    <LINE>
      <REQUEST_LINE_ID>101</REQUEST_LINE_ID>
      <REQUEST_ID>1</REQUEST_ID>
      <LINE_DESC>Line 1</LINE_DESC>
      <LINE_AMOUNT>5000</LINE_AMOUNT>
      <DISTRIBUTIONS_COUNT>2</DISTRIBUTIONS_COUNT>
      <DISTRIBUTIONS>
        <DISTRIBUTION>
          <DISTRIBUTION_LINE_ID>1001</DISTRIBUTION_LINE_ID>
          <REQUEST_ID>1</REQUEST_ID>
          <REQUEST_LINE_ID>101</REQUEST_LINE_ID>
          <DISTRIBUTION_AMOUNT>2500</DISTRIBUTION_AMOUNT>
        </DISTRIBUTION>
        <DISTRIBUTION>
          <DISTRIBUTION_LINE_ID>1002</DISTRIBUTION_LINE_ID>
          <REQUEST_ID>1</REQUEST_ID>
          <REQUEST_LINE_ID>101</REQUEST_LINE_ID>
          <DISTRIBUTION_AMOUNT>2500</DISTRIBUTION_AMOUNT>
        </DISTRIBUTION>
      </DISTRIBUTIONS>
    </LINE>
    <LINE>
      <REQUEST_LINE_ID>102</REQUEST_LINE_ID>
      <REQUEST_ID>1</REQUEST_ID>
      <LINE_DESC>Line 2</LINE_DESC>
      <LINE_AMOUNT>10000</LINE_AMOUNT>
      <DISTRIBUTIONS_COUNT>1</DISTRIBUTIONS_COUNT>
      <DISTRIBUTIONS>
        <DISTRIBUTION>
          <DISTRIBUTION_LINE_ID>1003</DISTRIBUTION_LINE_ID>
          <REQUEST_ID>1</REQUEST_ID>
          <REQUEST_LINE_ID>102</REQUEST_LINE_ID>
          <DISTRIBUTION_AMOUNT>10000</DISTRIBUTION_AMOUNT>
        </DISTRIBUTION>
      </DISTRIBUTIONS>
    </LINE>
  </LINES>
</REQUEST>



------------------------------------------------------------------------------------------------------


SELECT
    a.country_code,
    a.country_name
FROM
    country a
WHERE
    ROWNUM = 1;



--Fetch XMLTYPE
SELECT 
    XMLELEMENT("COUNTRIES",
        XMLELEMENT("COUNTRY_CODE",a.COUNTRY_CODE),
        XMLELEMENT("COUNTRY_NAME",a.COUNTRY_NAME)
    ) xml_data
FROM     country a
WHERE    rownum=1;






--Insert into CLOB column
insert into test_clob 
SELECT 
    XMLELEMENT("COUNTRIES",
        XMLELEMENT("COUNTRY_CODE",a.COUNTRY_CODE),
        XMLELEMENT("COUNTRY_NAME",a.COUNTRY_NAME)
    ).getClobVal() xml_data
FROM     country a
WHERE    rownum=1;



--convert CLOB to XMLTYPE
SELECT xmltype(xml_data) from test_clob;



--Fetch XML node value by converting CLOB to XMLTYPE 
--and then using extractvalue
SELECT extractvalue(xmltype(xml_data),'/COUNTRIES/COUNTRY_NAME') country_name
from test_clob;






Comments

All Categories

Call Fusion BIP Report2 Change Password1 Code Combinations2 Compute Instance2 CTE1 Custom Images1 Customer1 Data Aggregation2 Database5 Date Conversion1 DB Adapter2 Decryption1 Development1 EBS4 Encryption1 ESS Jobs3 Examine1 FBDI3 Fusion APIs1 Fusion BIP7 GIT2 GL3 GL Journals1 GL_DAILY_CONVERSION_TYPES1 GL_DAILY_RATES1 ICS1 Identity Domain1 Integrations1 Java1 Journal Import1 Keys1 Legal Entity1 LookupTypeLOV1 LOV1 LOVs1 MultiPartAPIs1 Networking1 NVL2 NVL in OIC2 OCI13 OCI Billing1 OCI Compute6 OCI Cost Management1 OCI Events Service1 OCI Free Tier3 oci networking1 OCI Notifification Service1 OCI Security3 OIC4 OIC Mapper2 Oracle26 Oracle ADF17 Oracle APEX1 Oracle Apps59 Oracle Apps R126 Oracle ATP1 Oracle BIP8 Oracle Cloud13 Oracle Cloud Free Tier1 Oracle cloud Infrastructure10 Oracle Cloud Security2 Oracle Cloud VM1 Oracle DB4 oracle ebs5 Oracle ERP4 Oracle ERP Adapter2 Oracle ERP Cloud7 Oracle financials2 Oracle Forms1 Oracle Fusion57 Oracle Fusion BIP4 Oracle Fusion ERP17 Oracle Fusion Financials18 Oracle Integration Cloud3 Oracle OAF17 Oracle OCI14 Oracle OIC22 Oracle SOA 12c10 Oracle SQL17 Oracle VBCS1 Oracle VBS2 Oracle Visual Builder Cloud Service1 Oracle Visual Builder Studio2 Oracle Workflow Notifications1 OracleCloudTutorial1 Others10 Payables2 Payables Import1 Properties1 R121 Register BIP as ESS Job1 Reset Password1 Responsibility1 REST4 Security List1 Site Map1 SOAP2 SOAP API2 SOAP UI3 SQL16 SQL Functions3 SQL Queries14 SQL Query8 SQL Tips3 SSH1 TCA1 Value Sets1 VBCS1 vcn1 Virtual Machine2 Virtual Machines1 XML1 XSLT1
Show more