gpt4 book ai didi

oracle - 如何使用存储过程将文件读入 oracle 数据库

转载 作者:行者123 更新时间:2023-12-01 23:03:04 24 4
gpt4 key购买 nike

我正在尝试将文件作为 blob 读入我的 oracle 表中。该文件是 *.gz 数据。我环顾了'网络并找到了一些例子,这就是我想出的:

创建或替换 PROCEDURE upload_supp_data

src_file BFILE;
dst_file BLOB;
lgh_file BINARY_INTEGER;
数据目录 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
来自警报_补充
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;

然后代替 /tmp/在你的代码中,你会输入 brian_tmp . DBA 可能不想让您访问所有 /tmp (因为您的用户现在可以伪装成运行 Oracle 的 Unix 用户在该目录中做任何事情)在这种情况下,您需要一个子目录。

关于oracle - 如何使用存储过程将文件读入 oracle 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6669603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com