Skip to Main Content

Breadcrumb

Question and Answer

Chris Saxon

Thanks for the question.

Asked: January 15, 2020 - 9:10 pm UTC

Last updated: January 16, 2020 - 2:41 pm UTC

Version: 19.1

Viewed 1000+ times

You Asked

I have a package and need to output the XML data through the cursor. I never worked on Xml.

create or replace PACKAGE BODY  PK_FCP_EXTRACT is

PROCEDURE sp_fcp_extract is

     cursor Rev_cur is select * from t_uar_reviews where CREATED_DATE=trunc(sysdate) ;
       r Rev_cur%rowtype;
      cursor case_cur( c_revid IN t_uar_reviews.uar_review_id%type )
          is select *
               from t_uar_cases where uar_review_id= c_revid ;
     c case_cur%rowtype;
   begin
    open Rev_cur;
    loop
       fetch Rev_cur into r;
       exit when Rev_cur%notfound;
       open case_cur( r.uar_review_id );
       loop
         fetch case_cur into c;
         exit when case_cur%notfound;
         dbms_output.put_line(c.UAR_CASE_ID||','||c.UAR_REVIEW_ID||','||c.CASE_TYPE||','||c.CASE_NMBR||','||c.ACTIVE_FLAG||','|| c.CREATED_DATE);

---dbms_output.put_line (XML string) ; #please tel me how to use 

       end loop;
       close case_cur;
     end loop;
     close Rev_cur;
  end;

END PK_FCP_EXTRACT;


the XML string I have is
vXML_Msg := to_clob('<BUSINESS_INDICATOR_ID>1</BUSINESS_INDICATOR_ID > ' ||
                 '<RECEIVED_DATE>' ||to_char(sysdate,'yyyy-mm-ddTmm:ss:00')|| '</RECEIVED_DATE>' ||
                 '<ZONE_ID>1</ZONE_ID>' ||
                 '<ORIGINATOR_LAN_ID>' || t_uar_reviews.REVIEWED_BY || '</ORIGINATOR_LAN_ID> ' ||
                 '<ORIGINATOR_AU>0070705</ORIGINATOR_AU>' ||
                 '<EVENT_DESCRIPTION>' || t_uar_reviews.SUMMARY_NOTE || '</EVENT_DESCRIPTION> ' ||
                 '<FRAUD_POTENTIAL_LOSS_AMOUNT>' ||sum(t_uar_cases.exposure_amt) || '</FRAUD_POTENTIAL_LOSS_AMOUNT> '||
                 '<ALERT_ID>' ||t_uar_reviews.UAR_REVIEW_ID || '</ALERT_ID>' ||
                 '<CUSTOMER_TYPE_ID>' || wells.t_hogan_acct_cust_month.ssn_taxid_ind || '</CUSTOMER_TYPE_ID> ' ||
                 '<ENTERPRISE_CUSTOMER_NUMBER>' || t_uar_cases.ecn ||'</ENTERPRISE_CUSTOMER_NUMBER> '||
                 '<TAX_ID_NUMBER>' || t_uar_cases.tax_id ||'</TAX_ID_NUMBER> ' ||
                 '<ACCOUNT_NUMBER>' || t_uar_cases.acct_nmbr ||'</ACCOUNT_NUMBER>' ||
                 '<ACCOUNT_COMPANY_NUMBER>' || wells.t_hogan_acct_cust_xref.coid || '</ACCOUNT_COMPANY_NUMBER>' ||
                 '<ACCOUNT_PRODUCT_CODE>' || wells.t_hogan_acct_cust_xref.cis_prod ||'</ACCOUNT_PRODUCT_CODE>' ||
                 '<EVENT_UAR_FRAUD_ATTACHMENT>' || wells.t_file_attachment ||'</EVENT_UAR_FRAUD_ATTACHMENT>' ||
                 '<FILE_NAME>' ||wells.t_file_attachment||'</FILE_NAME>' ||
                 '<DISPOSITON_STATUS_NAME>' || uar.t_disposition.disposition_desc || '</DISPOSITON_STATUS_NAME>' ||
                 '<CASE_TYPE_NAME>' || t_uar_cases.case_type ||'</CASE_TYPE_NAME>' ||
                 '<CASE_NUMBER>' || t_uar_cases.case_nmbr||'</CASE_NUMBER>' ||
                 '<FRAUD_POTENTIAL_LOSS_AMOUNT>' || t_uar_cases.exposure_amt ||'</FRAUD_POTENTIAL_LOSS_AMOUNT>' ||
                 '<LAST_COMPANY_NAME>' || t_uar_cases.full_name||'</LAST_COMPANY_NAME>' ||
                 '<CASE_OPEN_DATE>' || t_uar_cases.created_date ||'</CASE_OPEN_DATE>' ||
                 '<CASE_CLOSE_DATE>' || t_uar_cases.close_date ||'</CASE_CLOSE_DATE>' ||
                 '<CRIME_RING_ID>' || t_uar_cases.ring_id ||'</CRIME_RING_ID>' ||
                 '<CRIME_RING_NAME>' || t_uar_cases.ring_name ||'</CRIME_RING_NAME>' ||
                 '<SOR_PARENT_CASE_ID>' || t_uar_cases.uar_case_id ||'</SOR_PARENT_CASE_ID>' )


this should be used in dbms_output.put_line in the above procedure.

Thanks in advance.

and Chris said...

It's best to use the various XML functions to generate it when your query runs. For example:

select xmlelement (
         "DEPT",
         xmlelement (
           "EMPS",
           xmlagg ( xmlforest ( employee_id, first_name ) )
         )
       ) 
from   hr.employees h
group  by department_id;

XMLELEMENT("DEPT",XMLELEMENT("EMPS",XMLAGG(XMLFOREST(EMPLOYEE_ID,FIRST_NAME))))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
<DEPT><EMPS><EMPLOYEE_ID>200</EMPLOYEE_ID><FIRST_NAME>Jennifer</FIRST_NAME></EMPS></DEPT>
<DEPT><EMPS><EMPLOYEE_ID>178</EMPLOYEE_ID><FIRST_NAME>Kimberely</FIRST_NAME></EMPS></DEPT>
...


Read more about this at:

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/adxdb/generation-of-XML-data-from-relational-data.html#GUID-C14202BB-4D31-4983-B39E-2C1471CC0B9F

Is this answer out of date? If it is, please let us know via a Comment

More to Explore

SQL

The Oracle documentation contains a complete SQL reference.