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

时间:2014-08-18 11:23:48

标签: sql oracle plsql relative

我正在尝试从我本地文件系统中的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 / clobs)时,它可以工作。但是当我给出相对路径(比如data / emp / clobs)并从/ 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

如何在这里提供相对路径,因为我希望它可以在任何机器上运行,而不仅仅是我的机器。任何帮助都非常感谢。

由于

2 个答案:

答案 0 :(得分:1)

相对路径,如果有什么东西将来自Oracle" start"命令运行,例如/家庭/甲骨文。一种测试方法,并验证相对路径是否有效(我自己不使用)的方法是创建一个指向"。"的目录,然后运行测试来创建一个文件,然后搜索文件。您找到的目录将是您的起始路径。但是,我认为这是不安全的,因为Oracle可以从任何文件夹(可能)启动,具体取决于它是否自动启动,或者无论是哪个DBA都可以启动它。

答案 1 :(得分:0)

必须像这样:

xmlClobFile BFILE := BFILENAME('BFILE_DIR', 'clob.xml');