Skip to main content

Convert BLOB to CLOB in Oracle

Solution:

Step 1: Create plsql function blob_to_clob. It should return the CLOB.

CREATE OR REPLACE
  FUNCTION blob_to_clob(
      blob_in IN BLOB)
    RETURN CLOB
  AS
    v_clob CLOB;
    v_varchar VARCHAR2(32767);
    v_start pls_integer  := 1;
    v_buffer pls_integer := 32767;
  BEGIN
    dbms_lob.createtemporary(v_clob, TRUE);
    FOR i IN 1..ceil(dbms_lob.getlength(blob_in) / v_buffer)
    loop
      v_varchar := utl_raw.cast_to_varchar2(dbms_lob.substr(blob_in, v_buffer, v_start));
      dbms_lob.writeappend(v_clob, LENGTH(v_varchar), v_varchar);
      v_start := v_start + v_buffer;
    END loop;
    RETURN v_clob;
  END blob_to_clob;

Step 2: Call the function and test it.

Many ways to check this funtionality,

Method 1: 
  • Generate XML data from relational content
  • Convert CLOB (XML data) to BLOB
  • Convert BLOB to CLOB
  • Print the CLOB
DECLARE
  l_xml CLOB;
  l_clob_to_blob BLOB;
  l_blob_to_clob CLOB;
BEGIN
  -- Generate XML
  
  SELECT dbms_xmlgen.getxml('select * from emp') xml 
    INTO l_xml 
    FROM dual;
  
  -- Convert CLOB to BLOB
  
  l_clob_to_blob := clob_to_blob (l_xml);
  
  -- Convert BLOB to CLOB
  
  l_blob_to_clob := blob_to_clob(l_clob_to_blob);
  
  -- Print the CLOB
  print_clob_to_output (l_blob_to_clob);

END;

Method 2: 
  • Store BLOB in database
  • Convert BLOB to CLOB
  • Print the CLOB
CREATE TABLE store_blob_clob_files
  (
    ID NUMBER,
    blob_content BLOB,
    clob_content CLOB
  );

DECLARE
  l_blob BLOB;
  l_clob_to_blob BLOB;
  l_blob_to_clob CLOB;
BEGIN
  -- Get BLOB file
  
  SELECT blob_content
    INTO l_blob 
    FROM store_blob_clob_files
   WHERE id = 1;
  
    -- Convert BLOB to CLOB
  
  l_blob_to_clob := blob_to_clob(l_blob);
  
  UPDATE store_blob_clob_files 
     SET clob_content = l_blob_to_clob
   WHERE ID = 1;
  COMMIT;
  
  -- Print the CLOB
  print_clob_to_output (l_blob_to_clob);

END;

Output:


Fig 1: Empty CLOB Content


Fig 2: CLOB Loaded

Related Posts:

Comments

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...

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  ...