【问题标题】:Oracle 10G external table errorOracle 10G 外表错误
【发布时间】:2013-02-18 08:15:37
【问题描述】:

我在 Oracle 10G 上创建了以下外部表。

 connect system/password as SYSDBA
 create or replace directory ext_tab as 'C:\Suman\External_Tables';
 CREATE TABLE emp_ext_3( 
    empno NUMBER(4), first_name CHAR(20), last_name CHAR(20), dob     CHAR(10))
    ORGANIZATION EXTERNAL( 
    TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab
    ACCESS PARAMETERS
    ( 
    RECORDS DELIMITED BY NEWLINE 
    NOBADFILE
    NOLOGFILE
    SKIP 1    
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'  LRTRIM  
    MISSING FIELD VALUES ARE NULL  
    REJECT ROWS WITH ALL NULL FIELDS 
    (empno INTEGER EXTERNAL (4),
    first_name CHAR(20),
    last_name CHAR(20),
    dob CHAR(10) DATE_FORMAT DATE MASK "dd/mm/yyyy") 
    ) 
    LOCATION ('employee1.dat')
    )
    PARALLEL 
    REJECT LIMIT 0;  

现在如果我尝试执行 select 命令,我会收到以下错误。

SQL> select * from "SYSTEM"."EMP_EXT_3";
select * from "SYSTEM"."EMP_EXT_3"
*
ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-04040: file employee1.dat in EXT_TAB not found
ORA-06512: at "SYS.ORACLE_LOADER", line 19

但我在“C:\Suman\External_Tables”中有文件“employee1.dat”。有人可以帮助我了解为什么会出现此错误吗?

【问题讨论】:

  • 在 Windows 中发生:您能否验证文件名不是 employee1.dat.txt 并且 Windows 隐藏了扩展名?
  • 注意:只需要使用用户 sys/system 创建目录。外部表及其查询应由普通用户完成。
  • 我已验证。文件名是employee1.dat 而不是employee1.dat.txt
  • "注意:只需要使用用户 sys/system 创建目录。外部表和对它的查询应该使用普通用户完成。"你能详细说明一下吗?普通用户是什么意思?
  • sys 和 system 仅用于管理目的。创建一个用户,创建一个表空间并将其用于应用程序/测试/家庭作业 :)

标签: oracle external-tables


【解决方案1】:

Oracle 服务器正在以下位置查找文件:“C:\Suman\External_Tables”。该目录位于 Oracle 服务器计算机上,而不是本地 Windows 客户端计算机上。

【讨论】:

  • 我已经在我的本地机器上安装了 Oracle 服务器。所以这应该不是问题吧?
  • @user2032118 - 可能; Oracle需要能够在O/S级别访问该文件,您是否可以自己访问它是无关紧要的。这是围绕directories 的安全模型的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 2011-03-28
相关资源
最近更新 更多