oracle kup-04040访问外部表时

9rnv2umw  于 2023-08-04  发布在  Oracle
关注(0)|答案(2)|浏览(82)

我在Oracle目录中设置了一个外部表。数据库示例为12.1.0.2.0,操作系统为Oracle Linux。
我以oracle用户的身份在/home/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将创建日志文件,其中包含:
日志文件于2017年3月21日22:41:29打开
KUP-05004:警告:由于未请求并行选择,源内并发已禁用。
KUP-04040:未找到GENCARPARTS_CSV中的bmw.csv文件
这整个事情逃脱了我,日志文件在那里,这对我来说意味着路径是正确的,oracle可以写目录。
ls -1:

[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成功运行,没有出现任何问题。
我错过了什么?
干杯
克里斯蒂安

uqxowvwt

uqxowvwt1#

好吧,我不知道为什么它的工作方式,但我重新创建的目录作为根

mkdir /g2
chwown oracle:dba /g2
chmod 777 /g2

su - oracle

cp /home/oracle/g2/bmw.csv /g2

字符串
也许这与/home/oracle是如何设置的有关。真正奇怪的是utl_file工作得很好,可以创建日志文件,等等。

csbfibhn

csbfibhn2#

我也遇到了同样的问题,这是因为一个愚蠢的错误。我连接到了一个外部数据库,所以数据库不在我自己的机器上。但目录和文件都在我的机器上。也许你也有这样的问题?所以要确保数据库下的系统可以直接访问你的外部表文件。

相关问题