gpt4 book ai didi

sql - 如何在 pl/sql block 中给出本地文件系统的相对路径

转载 作者:行者123 更新时间:2023-12-04 19:23:54 25 4
gpt4 key购买 nike

我正在尝试从本地文件系统中的 xml 文件中插入一个 clob。下面是 pl/sql 块。

declare
xmlClobFile BFILE := BFILENAME(BFILE_DIR, 'clob.xml');
tempClob CLOB;
begin
EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY BFILE_DIR AS '||''''||'/home/abc/data/emp/clobs'||''''

--CLOB INSERT
DBMS_LOB.createtemporary(tempClob, TRUE);
DBMS_LOB.open(xmlClobFile, DBMS_LOB.lob_readonly);
DBMS_LOB.loadfromfile(tempClob, xmlClobFile, DBMS_LOB.lobmaxsize);


EXECUTE IMMEDIATE 'insert into emp_data (id, clob_data) values (1000, :1)' using tempClob;
end;
/

在这里,当我给出绝对路径(/home/abc/data/emp/clos)时,它可以工作。但是当我给出相对路径(比如 data/emp/clos)并从/home/abc 运行这个 sql 时,它不起作用。
  [exec] ERROR at line 1:
[exec] ORA-22285: non-existent directory or file for FILEOPEN operation
[exec] ORA-06512: at "SYS.DBMS_LOB", line 937
[exec] ORA-06512: at line 57

如何在此处提供相对路径,因为我希望它可以在任何机器上运行,而不仅仅是我的机器。

最佳答案

相对路径(如果有的话)将从运行 Oracle“start”命令的目录派生,例如/家/甲骨文。测试这个并验证相对路径是否有效(我自己没有使用它们)的一种方法是创建一个指向“.”的目录,然后运行测试以创建一个文件,然后搜索该文件。您在其中找到 find 的目录将是您的起始路径。但是,我认为这是不安全的,因为 Oracle 可以从任何文件夹(可能)启动,具体取决于它是否自动启动,或者任何 DBA 可以启动它。

关于sql - 如何在 pl/sql block 中给出本地文件系统的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25362168/

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