Skip to main content

Convert CLOB to BLOB using Oracle PLSQL


Solution:

Step 1: Create plsql function clob_to_blob. It should return the BLOB.

create or replace 
FUNCTION clob_to_blob(
      p_clob_in IN CLOB)
    RETURN BLOB
  IS
    v_blob BLOB;
    v_offset         INTEGER;
    v_buffer_varchar VARCHAR2(32000);
    v_buffer_raw RAW(32000);
    v_buffer_size binary_integer := 32000;
  BEGIN
    IF p_clob_in IS NULL THEN
      RETURN NULL;
    END IF;
    dbms_lob.createtemporary(v_blob, TRUE);
    v_offset := 1;
    FOR i IN 1 .. ceil(dbms_lob.getlength(p_clob_in) / v_buffer_size)
    loop
      dbms_lob.READ(p_clob_in, v_buffer_size, v_offset, v_buffer_varchar);
      v_buffer_raw := utl_raw.cast_to_raw(v_buffer_varchar);
      dbms_lob.writeappend(v_blob, utl_raw.LENGTH(v_buffer_raw), v_buffer_raw);
      v_offset := v_offset + v_buffer_size;
    END loop;
    RETURN v_blob;

  END clob_to_blob;

Step 2: Call the function and test it.

DECLARE
  l_xml CLOB;
  l_blob BLOB;
  l_clob_to_blob BLOB;
  l_file_name VARCHAR2(200);
  l_id        NUMBER;
BEGIN
 -- Generate XML

 SELECT dbms_xmlgen.getxml('select * from emp') xml 
     INTO l_xml 
    FROM dual;

  -- Print CLOB

  print_clob_to_output (l_xml);

  -- Convert CLOB to BLOB

  l_clob_to_blob := clob_to_blob (l_xml);

  -- Set File Name

  l_file_name    := 'Employee Management Report (' ||to_char(SYSDATE,'DDMMYYYYHHMISS')      ||')' ||'.xml';

  -- Send mail - Converted BLOB as attachment

  l_id := apex_mail.send( p_to => 'orclking@yyy.com', 
                          p_from => 'xxx@yyyy.com', 
                          p_subj => 'Employee Management Report', 
                          p_body => 'Please review the attachment.',
                          p_body_html => 'Please review the attachment' 
                        );
  
  apex_mail.add_attachment ( p_mail_id => l_id, 
                             p_attachment => l_clob_to_blob
                             p_filename => l_file_name, 
                             p_mime_type => 'xml' 
                           );
END;

Related Posts:

Comments

Post a Comment

Popular posts from this blog

Printing Page Numbers in RTF Template [Oracle BI Publisher]

Here I am giving an example to print the page numbers dynamically in the RTF (Rich Text Format) template. Step 1:  Go to page footer and copy and paste the below script. Page |  <?fo:page-number?>  of  <?fo:page-number-citation:xdofo:lastpage-joinseq?> <fo:page-number> :   This is the object, which is used to represent the current page-number. <?fo:page-number-citation:xdofo:lastpage-joinseq?> :  This is the syntax, which is used to represent the total number of pages. Step 2:  Load the XML and preview the result. Output: That's it. References: fo:page-number Printing Page Number Code in Oracle XMLP RTF Template

Friendly URL: Redirect to Different Page after Login in Oracle APEX 20.1

Oracle has updated apex.oracle.com to APEX 20.1 which includes among other features the new Friendly URL option. Here i am giving an example to redirect to different page after login in Oracle APEX 20.1 [Friendly URL Enabled] Step 1: Define home page for each user in emp master table as below Step 2: To enable Friendly URL Syntax, follow below steps, 1) On the Workspace home page, click the App Builder icon. 2) Select an application (The Application home page appears). 3) From Application home page, you can access the Definition page in TWO ways: Click the Edit Application Properties button. From Shared Components:              1) Click Shared Components .              2) Under Application Logic, click Application Definition Attributes . The Definition page appears. 4) Under Properties, configure the Friendly URL s attribute: Click Apply Changes to save your ch...

Open modal/inline dialog in Oracle APEX using JS

Analysis: From Oracle Apex 4.2,  Inline dialog can be opened as modal dialog/popup using JS. Open inline dialog region as modal dialog: Step 1: Create static region. Step 2:  Set Template => Inline Dialog. Step 3:  Assign the static id to the region. Fig 1: Set template and Static ID Step 4:  Create button or change one of the report column type to Link. (Action: Redirect URL). Step 5:  Put the below JS to open the region as modal dialog.                javascript:openModal('unitpricedetails');            Fig 2:  Open simple modal dialog Open inline dialog region as modal dialog and pass values to the items: Common Steps:  Step 1 to Step 4. Step 5:  To pass value to that region, create P1_UNIT_ID in the inline  dialog.       javascript:$s('P1_UNIT_ID','#UNIT_ID#');javascript:openModal('unitpricedetai...