我在Oracle目录中设置了一个外部表 . 数据库实例为12.1.0.2.0,操作系统为Oracle Linux .
我在/ home / oracle下创建了物理目录作为oracle用户 . 我创建了Oracle目录作为sys,并将该目录的所有内容授予模式用户 . 然后我将文件“bmw.csv”复制到该目录,该文件由oracle用户拥有 .
表的代码:
create table ext_csv_arlista (
Parts_number varchar2(50),
New_Parts_number varchar2(50),
Description varchar2(100),
DE_List_price number(8,2),
Discount_Group varchar2(10),
Purchase_price number(8,2),
BE_sales_price number(8,2)
)
organization external
(
default directory GENCARPARTS_CSV
access parameters
(
records delimited by newline
BADFILE 'ext_csv_arlista.bad'
DISCARDFILE 'ext_csv_arlista.discard'
LOGFILE 'ext_csv_arlista.log'
skip 1
fields terminated by ';' )
location ('bmw.csv')
);
当我尝试从表中选择时:
select * from ext_csv_arlista
我明白了
ORA-29913:执行ODCIEXTTABLEOPEN标注ORA-29400时出错:数据盒式磁带错误KUP-04040:找不到GENCARPARTS_CSV中的文件bmw.csv
如果我“触摸”一个文件并尝试从空文件中读取,我会得到相同的结果 .
Oracle创建日志文件,其中包含:
日志文件于03/21/17 22:41:29开放
KUP-05004:警告:禁用内部源并发,因为未请求并行选择 .
KUP-04040:找不到GENCARPARTS_CSV中的文件bmw.csv
这一切都让我感到厌烦,日志文件对我来说意味着路径是正确的,oracle可以编写目录 .
ls -l:
[oracle@csuka g2]$ ls -l
total 25884
-rw-r--r--. 1 oracle oinstall 26499791 Mar 21 16:17 bmw.csv
-rw-r--r--. 1 oracle dba 1940 Mar 21 22:41 ext_csv_arlista.log
[oracle@csuka g2]$
要验证我尝试使用utl_file>访问该文件
declare
v_h utl_file.file_type;
v_l varchar2(600);
begin
v_h:=utl_file.fopen(LOCATION => 'GENCARPARTS_CSV', FILENAME => 'bmw.csv', OPEN_MODE => 'r');
for v_i in 1..5
loop
utl_file.get_line (v_h,v_l);
dbms_output.put_line (v_l);
end loop;
utl_file.fclose(v_h);
end;
utl_file成功没有问题 .
我错过了什么?
干杯
克里斯蒂安
1 回答
好吧,我不知道它为什么这样工作,但我以root身份重新创建了目录
也许它与如何设置/ home / oracle有关 . 使这真的很奇怪的是utl_file工作得很好,可以创建日志文件等等....