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

Oracle Application Express Views (APEX)

Application Express Views Search SELECT * FROM apex_dictionary WHERE column_id = 0; View Comment Parent View APEX_APPLICATIONS Applications defined in the current workspace or database user. APEX_WORKSPACES APEX_APPLICATION_ALL_AUTH All authorization schemes for all components by Application APEX_APPLICATIONS ...

Save Selected Interactive Grid Records into a Collection - Oracle APEX

Here I am giving an example to save selected interactive grid records into a oracle apex collection. Step 1: Create a new blank page. Note: Mine was page 20. You will need to update reference to " P20 " with your page number if it's different. Step 2: Create a new interactive grid report region to the page using below query. Set Static Id "EmpDetails" to the region. SELECT  *     FROM   ( SELECT  emp . empno ,                emp . ename ,                emp . JOB ,                dept . dname department ,                dept . loc  LOCATION ,                mgr . ename  ...