我安装了一个共享的sftp目录
\ xx.xx.xx.xx \ SFTP_AX \ / sftp / cifs 用户,UID = 54321,GID = 54321,SUID,用户名=用户,密码=通过,工作组=应用,file_mode = 0775,dir_mode = 0775,RW 0 0
然后是一个将我的文件移动到另一个安装目录的PL / SQL 使用UTL_FILE
这是一个例子
这是我创建目录的方式
创建或替换目录 SFTP_DIR AS '/ SFTP /';
GRANT READ, WRITE ON DIRECTORY SFTP_DIR TO SCHEMA1; GRANT READ, WRITE ON DIRECTORY SFTP_DIR TO SCHEMA2;
这里是ls -l / sftp和/ ext / files(775)
drwxrwxr-x 2 oracle oinstall 4096 Mar 13 14:24 sftp
drwxrwxr-x 6 oracle oinstall 4096 Mar 13 14:40 ext/files
所以,当我执行
时DECLARE
sftp_folder VARCHAR2(50) := 'SFTP_DIR';
l_file_test CONSTANT VARCHAR2(50) := 'test.txt';
external_dir VARCHAR2(50) := 'EXTERNAL_DIR';
BEGIN
UTL_FILE.FRENAME(sftp_folder, l_file_test, external_dir, l_file_test, true);
END;
我得到了
- 00000 - “文件重命名操作失败” *原因:操作系统拒绝了文件重命名尝试 或者因为源目录或目标目录没有 存在或不可访问,或源文件无法访问, 或目标文件存在。 *操作:验证源文件,源目录和目标 目录存在且可访问,以及目标 文件尚不存在。
醇>
我已检查过所有内容,文件存在,权限是对的(IMO)等
由于我无法弄清楚,我采取了这样的方法 我在ext / files中复制我的文件(使用FCOPY,它可以工作) 然后我使用FREMOVE删除我的文件..猜猜是什么..这有用 这怎么可能?事实上,这就像复制一样,而不是删除文件..
所以FREMOVE有效,但FRENAME没有..
有什么想法吗?
谢谢
编辑**我也测试了unix ..在两个文件夹之间运行MV并且它确实有效
编辑**
CREATE OR REPLACE DIRECTORY
EXTERNAL_DIR AS
'/ext/files';
GRANT READ, WRITE ON DIRECTORY EXTERNAL_DIR TO SCHEMA1;
GRANT READ, WRITE ON DIRECTORY EXTERNAL_DIR TO SCHEMA2;
GRANT EXECUTE, READ, WRITE ON DIRECTORY EXTERNAL_DIR TO SYSTEM WITH GRANT OPTION;
编辑***我也测试了FOPEN ..它的工作原理
编辑**已安装的文件夹位于WINDOWS ..