create directory image_dir as 'C:\image_DIR'; select * from all_directories commit drop directory image_dir CREATE TABLE temp_image ( ID NUMBER, image_filename VARCHAR2(50), image BLOB ); 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 ('IMAGE_DIR', p_image_name); -- insert a NULL record to lock INSERT INTO temp_image (ID, image_filename, 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_filename = 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_filename = p_image_name; -- close file DBMS_LOB.fileclose (src_file); END insert_image_file; select * from user_errors h where h.name = 'insert_image_file' begin insert_image_file (1, 'AT.jpg' ); end; commit