如何在 oracle 数据库上自动存储图像?

How to automate image storing on oracle database?

我正在尝试将图像存储在数据库中。所以我创建了 lob_table

CREATE TABLE lob_table (id NUMBER, doc BLOB);

CREATE OR REPLACE DIRECTORY my_dir AS 'C:\temp'; 

DECLARE
  src_lob  BFILE := BFILENAME('MY_DIR', 'example.jpg');
  dest_lob BLOB;
BEGIN
  INSERT INTO lob_table VALUES(1, EMPTY_BLOB())
     RETURNING doc INTO dest_lob;

  DBMS_LOB.OPEN(src_lob, DBMS_LOB.LOB_READONLY);
  DBMS_LOB.LoadFromFile( DEST_LOB => dest_lob,
                         SRC_LOB  => src_lob,
                         AMOUNT   => DBMS_LOB.GETLENGTH(src_lob) );
  DBMS_LOB.CLOSE(src_lob);

  COMMIT;
END;

但在目录中大约有 90000 张照片,每张照片都以其 ID 名称存储,如“1.jpg”。我如何使流程自动化?

您可以遍历从 1 到上限 100,000 的整数集,作为大于 900,000 的任意大于 900,000 的值,以覆盖所有这些文件,同时检查每个文件的存在以跳过如果在该间隔之间没有任何整数值的文件,例如

DECLARE
  src_lob  BFILE;
  dest_lob BLOB;
  v_exists INT;
BEGIN
  FOR i IN 1..100000
  LOOP
   BEGIN  
      src_lob  := BFILENAME('MY_DIR', i||'.jpg');
      v_exists := dbms_lob.fileexists(src_lob);
      IF v_exists = 1 THEN
        INSERT INTO lob_table VALUES(i, EMPTY_BLOB()) RETURNING doc INTO dest_lob;

        DBMS_LOB.OPEN(src_lob, DBMS_LOB.LOB_READONLY);
        DBMS_LOB.LOADFROMFILE( DEST_LOB => dest_lob,
                               SRC_LOB  => src_lob,
                               AMOUNT   => DBMS_LOB.GETLENGTH(src_lob) );
        DBMS_LOB.CLOSE(src_lob);
        IF i MOD 1000 = 0 THEN COMMIT; END IF;
      END IF;
     EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); 
    END;  
  END LOOP;
    
  COMMIT;
END;
/