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