想在oracle中实现对文件的操作,将目录A下的文件复制到目录B下,而且每次目录A的名称是变动的。
create or replace procedure copyFile(fileUrl in varchar2, filePath in varchar2) is
fileName varchar2(120):='555.txt';--文件的真实名称
--fileUrl varchar2(120);--表中保存的文件路径
--filePath varchar2(200):='D:work/zjgp_proj_temp/web-app/pub_res';--保存附件的根目录:此路径在不同的服务器可能设置不同,需要修改
filePath2 varchar2(100);
fileFullPath varchar2(250);--文件保存的全路径
f1 utl_file.file_type;
begin
--execute immediate 'connect sys/sys@system as sysdba';
--execute immediate 'grant create any directory to zjgpv3';
execute immediate 'create or replace directory ecjjattchdir as '||''''||'D:\tupian\'||'''';
--execute immediate 'Grant read on directory ecjjattchdir to zjgpv3';这句执行会报错,不能给自己赋权限,我用zjgpv3,但我不可能用sysdba登陆再去赋权限,因为我这个存储过程是放到一个循环中执行的。本来“'D:\tupian\”是作为参数传近来的,每次都不一样的。
execute immediate 'create or replace directory ecjjattchdir2 as '||''''||'D:\tupian\20090101\'||'''';
--execute immediate 'Grant read write on directory ecjjattchdir2 to zjgpv3';
f1 := utl_file.fopen('ECJJATTCHDIR','555.txt','r');--获取文件句柄 utl_file.fcopy('ECJJATTCHDIR',fileName,'ECJJATTCHDIR2',fileName);
utl_file.fclose(f1);
--end
end copyFile;
问题:f1 := utl_file.fopen('ECJJATTCHDIR','555.txt','r');--执行到这里就报错,文件操作失败,不知道为什么。
有谁知道不。网上没一个说的是有道理的。郁闷啊
create or replace procedure copyFile(fileUrl in varchar2, filePath in varchar2) is
fileName varchar2(120):='555.txt';--文件的真实名称
--fileUrl varchar2(120);--表中保存的文件路径
--filePath varchar2(200):='D:work/zjgp_proj_temp/web-app/pub_res';--保存附件的根目录:此路径在不同的服务器可能设置不同,需要修改
filePath2 varchar2(100);
fileFullPath varchar2(250);--文件保存的全路径
f1 utl_file.file_type;
begin
--execute immediate 'connect sys/sys@system as sysdba';
--execute immediate 'grant create any directory to zjgpv3';
execute immediate 'create or replace directory ecjjattchdir as '||''''||'D:\tupian\'||'''';
--execute immediate 'Grant read on directory ecjjattchdir to zjgpv3';这句执行会报错,不能给自己赋权限,我用zjgpv3,但我不可能用sysdba登陆再去赋权限,因为我这个存储过程是放到一个循环中执行的。本来“'D:\tupian\”是作为参数传近来的,每次都不一样的。
execute immediate 'create or replace directory ecjjattchdir2 as '||''''||'D:\tupian\20090101\'||'''';
--execute immediate 'Grant read write on directory ecjjattchdir2 to zjgpv3';
f1 := utl_file.fopen('ECJJATTCHDIR','555.txt','r');--获取文件句柄 utl_file.fcopy('ECJJATTCHDIR',fileName,'ECJJATTCHDIR2',fileName);
utl_file.fclose(f1);
--end
end copyFile;
问题:f1 := utl_file.fopen('ECJJATTCHDIR','555.txt','r');--执行到这里就报错,文件操作失败,不知道为什么。
有谁知道不。网上没一个说的是有道理的。郁闷啊
GRANT READ[,WRITE] ON DIRECTORY directory TO username;--如:
create or replace directory test_dir as '/ECJJATTCHDIR';
grant read, write on directory test_dir to Your_user;
先创建好所有的文件夹,然后赋予权限给使用用户。
grant read,write on directory xxx to u_user ;
再执行打开文件的语句
在sql server里面我是会操作的,但在oracle里面还不会什么操作?
你的这个问题,我这里不存在。是不是目录下没有 555.txt 这个文件?
2 f1 utl_file.file_type;
3 begin
4 f1 := utl_file.fopen('TEST','a.txt','r');
5 utl_file.fclose(f1);
6 end;
7 /PL/SQL 过程已成功完成。scott@ORA1> declare
2 f1 utl_file.file_type;
3 begin
4 f1 := utl_file.fopen('TEST','a_none_exists.txt','r');
5 utl_file.fclose(f1);
6 end;
7 /
declare
*
第 1 行出现错误:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 475
ORA-29283: invalid file operation
ORA-06512: at line 4