将图像添加到 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);

根据 docs for BFILENAME:

The directory argument is case sensitive. You must ensure that you specify the
directory object name exactly as it exists in the data dictionary.