About Me

My photo
Bangalore, India
I am an Oracle Certified Professional working in SAP Labs. Everything written on my blog has been tested on my local environment, Please test before implementing or running in production. You can contact me at amit.rath0708@gmail.com.

Monday, August 19, 2013

How to insert a LOB (pdf,doc,jpeg etc) in a Oracle Database.

Generally LOB( BLOBs , CLOBs) are not inserted in a table with normal insertion method. To insert a LOB object we have to move with certain steps. PFB steps to insert a LOB object in Oracle Table :-

1. Create a Table having a LOB column.

  SQL>   create table LOB_INSERT
(
        LOB_id     number(12),
        LOB_name   varchar2(80),
        file_size       number,
        LOB_file       blob
)  ;

Table created.

2. Create a directory in FS so that Oracle can access files in that directory.

SQL> create or replace directory LOB as '/home/oracle';

Directory created.

NOTE :- Directory oracle has to be physically present in FS.

3. Now copy files in oracle directory which you want to insert in LOB_INSERT table and then run the below script to insert LOB objects in LOB_INSERT table.

SQL> declare
    l_size      number;
  2    3      l_file_ptr  bfile;
  4      l_blob      blob;
  5  begin
  6      l_file_ptr := bfilename('LOB ', 'health_check.html');
  7      dbms_lob.fileopen(l_file_ptr);
  8      l_size := dbms_lob.getlength(l_file_ptr);
  9      for ctr in 1 .. 3 loop
 10          insert into LOB_INSERT
 11          (
 12               LOB_id ,
 13          LOB_name,
 14          file_size,
 15          LOB_file
 16          )
 17          values
 18          (
 19              ctr,
 20              'filenumber '||ctr,
 21              null,
 22              empty_blob()
 23          )
 24          returning LOB_file into l_blob;
 25          dbms_lob.loadfromfile(l_blob, l_file_ptr, l_size);
 26      end loop;
 27      commit;
 28      dbms_lob.close(l_file_ptr);
 29  end;
 30  /

PL/SQL procedure successfully completed.

This procedure will insert three records health_check.html file in  LOB_INSERT table.

SQL>  select * from LOB_INSERT;

    LOB_ID LOB_NAME                        FILE_SIZE LOB_FILE
---------- ------------------------------ ---------- ----------------------------------------
         1 filenumber 1                              3C68746D6C3E0A3C686561643E0A3C6D65746120
                                                     687474702D65717569763D22436F6E74656E742D
                                                     547970652220636F6E74656E743D22746578742F
                                                     68746D6C3B20636861727365743D5554462D3822

         2 filenumber 2                              3C68746D6C3E0A3C686561643E0A3C6D65746120
                                                     687474702D65717569763D22436F6E74656E742D
                                                     547970652220636F6E74656E743D22746578742F
                                                     68746D6C3B20636861727365743D5554462D3822

         3 filenumber 3                              3C68746D6C3E0A3C686561643E0A3C6D65746120

    LOB_ID LOB_NAME                        FILE_SIZE LOB_FILE
---------- ------------------------------ ---------- ----------------------------------------
                                                     687474702D65717569763D22436F6E74656E742D
                                                     547970652220636F6E74656E743D22746578742F
                                                     68746D6C3B20636861727365743D5554462D3822

This way we can insert LOB files in Oracle Table.

I hope this article helped you.

Regards,
Amit Rath

No comments:

Post a Comment