我正在使用util_file.fopen将一个.txt文件导入到数据库中。然而,我不想硬编码目录。有没有一种方法可以将当前目录保存到变量中或记录路径?这样,我就可以创建一个Oracle目录,它是当前目录,并且util_file.fopen将始终打开我从其中运行pl / sql的目录中的.txt文件。
我知道"HOST CD"会显示我的当前目录,但我无法将其保存到变量或日志中。
谢谢。
我知道"HOST CD"会显示我的当前目录,但我无法将其保存到变量或日志中。
谢谢。
CREATE DIRECTORY DIRECTORY_1 AS '/some/path';
CREATE DIRECTORY DIRECTORY_2 AS '/some/other/path';
CREATE DIRECTORY DIRECTORY_3 AS '/yet/another/path';
将目录的名称赋值给一个变量:
strDirectory_to_use := 'DIRECTORY_1';
打开文件时使用变量:
-- References /some/path/filename.txt
aFile := UTL_FILE.FOPEN(strDirectory_to_use, 'filename.txt', 'r');
将变量更改为包含不同目录对象的名称:
strDirectory_to_use := 'DIRECTORY_2';
现在当你在调用UTL_FILE.FOPEN
时使用这个变量,它将查看由目录对象DIRECTORY_2
指向的目录:
-- References /some/other/path/filename.txt
aFile := UTL_FILE.FOPEN(strDirectory_to_use, 'filename.txt', 'r');
祝你好运。
create or replace procedure (mypath varchar2) as
begin
execute immediate 'CREATE OR REPLACE DIRECTORY DIRECTORY_1 AS ' || mypath;
aFile := UTL_FILE.FOPEN(DIRECTORY_1, 'filename.txt', 'r');
end;
/
create or replace procedure (mypath varchar2) as
dirname varchar2;
begin
select DIRECTORY_NAME into dirname from dba_directories where DIRECTORY_PATH = mypath;
if (dirname is null) then
dirname := substr(replace(replace(replace(replace(dirname,'\',''),':',''),'/',''),'.',''),1,30);
execute immediate 'CREATE OR REPLACE ' || dirname || ' AS ' || mypath;
end if;
aFile := UTL_FILE.FOPEN(dirname, 'filename.txt', 'r');
end;
/