将图像添加到 Oracle 数据库
Add images to Oracle Database
您好,我正在尝试将图像添加到 table。
我做了 table:
CREATE TABLE program_images
(
image_id NUMBER,
image_filename VARCHAR2(50),
image BLOB
);
然后制作所有图片所在的目录:
最后制作程序,插入图片到table:
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 program_images
(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 program_images
WHERE image_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 program_images
SET image = dst_file
WHERE image_id = p_id AND image_filename = p_image_name;
-- close file
DBMS_LOB.fileclose (src_file);
END insert_image_file;
当我调用程序时:EXECUTE insert_image_file(1,'audi_logo.png');
它告诉我程序中的 "non-existent directory or file for FILEOPEN operation" 是什么“ DBMS_LOB.fileopen (src_file, DBMS_LOB.file_readonly); “这条线。
这是我第一次使用目录,所以也许我忘了做些什么?
图片目录名全部为UPPER_CASE,即
src_file := BFILENAME ('IMAGE_DIR', p_image_name);
The directory argument is case sensitive. You must ensure that you specify the
directory object name exactly as it exists in the data dictionary.
您好,我正在尝试将图像添加到 table。 我做了 table:
CREATE TABLE program_images
(
image_id NUMBER,
image_filename VARCHAR2(50),
image BLOB
);
然后制作所有图片所在的目录:
最后制作程序,插入图片到table:
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 program_images
(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 program_images
WHERE image_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 program_images
SET image = dst_file
WHERE image_id = p_id AND image_filename = p_image_name;
-- close file
DBMS_LOB.fileclose (src_file);
END insert_image_file;
当我调用程序时:EXECUTE insert_image_file(1,'audi_logo.png');
它告诉我程序中的 "non-existent directory or file for FILEOPEN operation" 是什么“ DBMS_LOB.fileopen (src_file, DBMS_LOB.file_readonly); “这条线。
这是我第一次使用目录,所以也许我忘了做些什么?
图片目录名全部为UPPER_CASE,即
src_file := BFILENAME ('IMAGE_DIR', p_image_name);
The directory argument is case sensitive. You must ensure that you specify the
directory object name exactly as it exists in the data dictionary.