Laz*_*man 3 oracle stored-procedures blob ora-06512
我正在尝试将文件作为 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记录进行锁定
INSERT INTO alarms_supplemental
(alarm_id, resource_id, 补充数据
)
值 (13794740, 1, EMPTY_BLOB ()
)
返回补充数据
进入 dst_file;
-- 锁定记录
选择补充数据
进入 dst_file
FROM alarms_supplemental
WHERE 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 字段
更新 ALARMS_SUPPLEMENTAL
SET 补充数据 = dst_file
WHERE ALARM_ID = 13794740;
-- 关闭文件
DBMS_LOB.fileclose (src_file);
ENDupload_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。
您需要 DBA 执行以下操作:
CREATE DIRECTORY brian_tmp AS '/tmp';
GRANT READ, WRITE ON DIRECTORY brian_tmp TO brian;
Run Code Online (Sandbox Code Playgroud)
然后代替/tmp/您的代码,您将放置brian_tmp. DBA 可能不想让您访问所有内容/tmp(因为您的用户现在可以伪装成 Oracle 正在运行的 Unix 用户身份在该目录中执行任何操作),在这种情况下您需要一个子目录。
| 归档时间: |
|
| 查看次数: |
9848 次 |
| 最近记录: |