Tuesday, June 4, 2013

Inserting an image in oracle database


Create database directory from windows directory which has images
-------------------------------------------------------------------------

create directory images as 'c:\temp\photo\';

grant all on images to public;

--------------------------------------------------------------

CREATE OR REPLACE PROCEDURE insert_image_file (p_id NUMBER, p_image_name IN VARCHAR2)
IS
   src_file   BFILE;
   dst_file   BLOB;
   lgh_file   BINARY_INTEGER;
BEGIN
   src_file := BFILENAME ('IMAGES', p_image_name);

   -- insert a NULL record to lock
   INSERT INTO temp_image
               (ID, image_name, image
               )
        VALUES (p_id, p_image_name, EMPTY_BLOB ()
               )
     RETURNING image
          INTO dst_file;

   -- lock record
   SELECT     image
         INTO dst_file
         FROM temp_image
        WHERE ID = p_id AND image_name = p_image_name
   FOR UPDATE;

   -- open the file
   DBMS_LOB.fileopen (src_file, DBMS_LOB.file_readonly);
   -- determine length
   lgh_file := DBMS_LOB.getlength (src_file);
   -- read the file
   DBMS_LOB.loadfromfile (dst_file, src_file, lgh_file);

   -- update the blob field
   UPDATE temp_image
      SET image = dst_file
    WHERE ID = p_id AND image_name = p_image_name;

   -- close file
   DBMS_LOB.fileclose (src_file);
END insert_image_file;






#####################

EXECUTE insert_image_file(2,'2.jpg');

####################

Method 2

declare
l_blob blob;
l_bfile bfile;
begin
insert into temp_image values (1,'ONE', EMPTY_BLOB() )
returning image into l_blob;
l_bfile := bfilename('IMAGES','1.jpg');
dbms_lob.fileopen(l_bfile);
dbms_lob.loadfromfile( l_blob, l_bfile, dbms_lob.getlength( l_bfile ) );
dbms_lob.fileclose(l_bfile);
END;

No comments:

Post a Comment