【发布时间】:2021-07-24 07:38:10
【问题描述】:
我正在尝试将图像存储在数据库中。所以我创建了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”。如何实现流程自动化?
【问题讨论】:
-
当您说“在文件中”时,您的意思是“在目录中”吗?如果要处理目录中的每个文件,我会使用 SQL*Loader 而不是 PL/SQL。 oracle-base.com/articles/10g/load-lob-data-using-sql-loader 您可以将匿名块转换为存储过程,然后从
ls或dir命令的输出中编写对该过程的数千次调用。我过去使用 Java 存储过程通过查询返回目录中的每个文件。您还可以使用带有预处理器脚本的外部表。 -
Larry Ellison(Oracle 的所有者)每次看到这样的问题时都会跳一段小舞。直接从数据库 LOB 传送图像可能是最昂贵的方式。与其他数据库操作相比,Oracle 许可证需要花费真金白银,而且 LOB 检索速度不是很快。最好将图像存储在文件系统中,并将它们的文件路径存储在数据库中。说真的。
标签: oracle plsql oracle11g blob