我正在尝试将文件作为 blob 读入我的 oracle 表中。该文件是 *.gz 数据。我环顾了“网络”并找到了一些示例,这就是我想出的:
创建或替换 PROCEDURE upload_supp_data 是 src_file BFILE; dst_file BLOB; lgh_file BINARY_INTEGER; data_dir varchar2(20) := '/tmp/'; 文件名 varchar2(50) := '200912020200.rep-ids-top50-sip.txt.gz'; 开始 src_file := BFILENAME (data_dir, file_name); -- 插入 NULL 记录以锁定 插入警报_补充 (alarm_id、resource_id、补充数据 ) 值 (13794740, 1, EMPTY_BLOB () ) 返回补充数据 进入 dst_file; -- 锁定记录 选择补充数据 INTO dst_file 来自警报_补充 其中alarm_id = 13794740 更新; -- 打开文件 DBMS_LOB.fileopen (src_file, DBMS_LOB.file_readonly); -- 确定长度 lgh_file := DBMS_LOB.getlength (src_file); -- 读取文件 DBMS_LOB.loadfromfile (dst_file, src_file, lgh_file); -- 更新 blob 字段 更新警报_补充 SET 补充数据 = dst_file 其中 ALARM_ID = 13794740; -- 关闭文件 DBMS_LOB.fileclose (src_file); 结束upload_supp_data;
当我运行它时,我收到以下错误:
ORA-22285: 用于 FILEOPEN 操作的目录或文件不存在 ORA-06512:在“SYS.DBMS_LOB”,第 635 行 ORA-06512:在“AIP_DBA.UPLOAD_SUPP_DATA”,第 29 行 ORA-06512: 在第 2 行 进程退出。
我已经以各种方式玩弄了路径,即'/tmp/'、'tmp'、'/tmp'。文件名是正确的,所以我不知道出了什么问题。这实际上是我写过的第一个存储过程,所以这可能是一件非常简单的事情。我希望有人可以帮助我。顺便说一句,我正在使用 Oracle SQL Developer。