oracle - Oracle / Plsql 我是否需要检查文件是否已保存?
问题描述
ORA-29280:ORA-06512:“SYS.UTL_FILE”,第 270 行 ORA-06512:“SYS.UTL_FILE”,第 1243 行 ORA-06512:第 9 行
declare
fhandle UTL_FILE.FILE_TYPE;
begin
/*********************************************/
-- if statement ( file1.txt check ???? )
utl_file.fcopy(src_location => 'location1',
src_filename => 'file1.txt',
dest_location => 'location2',
dest_filename => 'file1_backup.txt');
/*********************************************/
fhandle := UTL_FILE.FOPEN('location1', 'file1.txt', 'W');
utl_file.put_line(fhandle, 'some text');
UTL_FILE.FCLOSE(fhandle);
end;
解决方案
您必须以大写形式写入目录名称。
例如
select * from dba_directories
where directory_name='DIR_VIKS'
-------------------------------------------------
SYS DIR_VIKS /home/trs/viks/00001/XML/03_KRW
declare
fhandle UTL_FILE.FILE_TYPE;
begin
/*********************************************/
-- if statement ( file1.txt check ???? )
utl_file.fcopy(src_location => 'DIR_VIKS',
src_filename => '120910X-001.xml',
dest_location => 'DIR_VIKS',
dest_filename => '120910X-001.xml.bak');
/*********************************************/
/*fhandle := UTL_FILE.FOPEN('location1', 'file1.txt', 'W');
utl_file.put_line(fhandle, 'some text');
UTL_FILE.FCLOSE(fhandle);
*/
end;
before run script
oracle@esmd:/home/trs/viks/00001/XML/03_KRW> ls -l
total 64
-rw-r--r-- 1 viks00001 users 29425 2012-09-11 12:43 120910X-001.xml
-rw-r--r-- 1 viks00001 users 29337 2012-11-08 08:26 120910X-002.xml
after run script
esmd:/home/trs/viks/00001/XML/03_KRW # ls -l
total 96
-rw-r--r-- 1 viks00001 users 29425 Sep 11 2012 120910X-001.xml
-rw-r--r-- 1 oracle oinstall 29425 Jun 21 10:17 120910X-001.xml.bak
-rw-r--r-- 1 viks00001 users 29337 Nov 8 2012 120910X-002.xml
如果目录名是小写的,我们会得到一个错误。
begin
/*********************************************/
-- if statement ( file1.txt check ???? )
utl_file.fcopy(src_location => 'dir_viks',
src_filename => '120910X-001.xml',
dest_location => 'dir_viks',
dest_filename => '120910X-001.xml.bak');
/*********************************************/
/*fhandle := UTL_FILE.FOPEN('location1', 'file1.txt', 'W');
utl_file.put_line(fhandle, 'some text');
UTL_FILE.FCLOSE(fhandle);
*/
end;
10:13:01 line 1: ORA-29280: invalid directory path
10:13:01 ORA-06512: at "SYS.UTL_FILE", line 270
10:13:01 ORA-06512: at "SYS.UTL_FILE", line 1243
10:13:01 ORA-06512: at line 9
文件名必须与操作系统在同一个寄存器中。如果过程中的名称与操作系统不匹配,则会出现错误。
declare
fhandle UTL_FILE.FILE_TYPE;
begin
/*********************************************/
-- if statement ( file1.txt check ???? )
utl_file.fcopy(src_location => 'DIR_VIKS',
src_filename => '120910X-001.XML',
dest_location => 'DIR_VIKS',
dest_filename => '120910X-001.xml.bak2');
/*********************************************/
end;
10:36:13 line 1: ORA-29283: invalid file operation
10:36:13 ORA-06512: at "SYS.UTL_FILE", line 270
10:36:13 ORA-06512: at "SYS.UTL_FILE", line 1243
10:36:13 ORA-06512: at line 9
推荐阅读
- android - 如何在 Fragment 中实现 recyclerview onClick?
- c# - C# 应用 app.config 转换不能从父级到子级
- java - Null 在反编译的 java 类文件中被强制转换
- c# - 如何从 C# 中的 Object[] 中删除特定类型的变量
- django - 如何限制用户访问某些特定的 url?
- c# - IComparable.CompareTo 正确实现考虑继承
- javascript - 根据第一个下拉框值预填充第二个下拉框
- visual-studio - Visual Studio 2017 中应用程序的自定义安装程序
- javascript - ES6 可以在 webpack.config.js 中原生使用吗?
- javascript - 在 Electron 中使用 AWS Cognito 的持久用户会话