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

如何在pl/sql块中给出本地文件系统的相对路径,sql,oracle,plsql,relative-path,Sql,Oracle,Plsql,Relative Path,我试图从本地文件系统中的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 D

我试图从本地文件系统中的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

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

它必须像这样:

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

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

它不起作用。绝对路径使用上述代码。但我需要用相对路径来代替