Oracle10g 带有日期列和跳过标题的oracle外部表

Oracle10g 带有日期列和跳过标题的oracle外部表,oracle10g,Oracle10g,我有一份档案 ID,DNS,R_D,R_A 1,123456,2014/11/17,10 2,987654,2016/05/20,30 3,434343,2017/08/01,20 我正试图使用外部表将其加载到oracle我必须跳过标题行并加载日期列。 这是我的疑问: DECLARE FILENAME VARCHAR2(400); BEGIN FILENAME := 'actual_data.txt'; EXECUTE IMMEDIATE 'CREATE TABLE EXT_TMP ( I

我有一份档案

ID,DNS,R_D,R_A
1,123456,2014/11/17,10
2,987654,2016/05/20,30
3,434343,2017/08/01,20
我正试图使用外部表将其加载到oracle我必须跳过标题行并加载日期列。

这是我的疑问:

DECLARE
FILENAME VARCHAR2(400);
BEGIN
FILENAME := 'actual_data.txt';
EXECUTE IMMEDIATE 'CREATE TABLE EXT_TMP (
  ID      NUMBER(25),
  DNS  VARCHAR2(20),
  R_D DATE,
  R_A  NUMBER(25)
)
ORGANIZATION EXTERNAL (
  TYPE ORACLE_LOADER
  DEFAULT DIRECTORY USER_DIR
  ACCESS PARAMETERS (
    RECORDS DELIMITED BY NEWLINE
    FIELDS TERMINATED BY '',''
    MISSING FIELD VALUES ARE NULL
    SKIP 1
    (
  "ID",      
  "DNS",
  "R_D" date "dd-mon-yy",
  "RECHARGE_AMOUNT"
    )
  )
  LOCATION (''' || FILENAME || ''')
)
PARALLEL 5
REJECT LIMIT UNLIMITED';
END;
我得到以下例外:

ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-00554: error encountered while parsing access parameters
KUP-01005: syntax error: found "skip": expecting one of: "column, exit, (,
reject"
KUP-01007: at line 4 column 5
ORA-06512: at "SYS.ORACLE_LOADER", line 19
我正在使用sqlplus


请一些甲骨文的老手帮我一下,告诉我我做错了什么?我对oracle非常陌生。

您不想在PL/SQL中创建任何类型的表(包括外部表);这并不是说不可能,而是与最佳实践相反

看看我的尝试,根据你提供的信息-工作正常

SQL> alter session set nls_date_format = 'dd.mm.yyyy';

Session altered.

SQL> create table ext_tmp
  2  (
  3    id      number,
  4    dns     varchar2(20),
  5    r_d     date,
  6    r_a     number
  7  )
  8  organization external
  9  (
 10    type oracle_loader
 11    default directory kcdba_dpdir
 12    access parameters
 13    (
 14      records delimited by newline
 15      skip 1
 16      fields terminated by ',' lrtrim
 17      missing field values are null
 18      (
 19       id,
 20       dns,
 21       r_d date 'yyyy/mm/dd',
 22       r_a
 23      )
 24    )
 25    location ('actual_data.txt')
 26  )
 27  parallel 5
 28  reject limit unlimited;

Table created.

SQL> select * from ext_tmp;

        ID DNS                  R_D               R_A
---------- -------------------- ---------- ----------
         1 123456               17.11.2014         10
         2 987654               20.05.2016         30
         3 434343               01.08.2017         20

SQL>

在我的例子中,
skip 1
即使将它放在由换行符分隔的
记录和以“,”lrtim
结尾的
字段之间也不起作用,直到我使用了
load when
。现在
skip 1
使用以下访问参数:

access parameters (
    records delimited by newline 
    load when (someField != BLANK)
    skip 1 
    fields terminated by '','' lrtrim
    missing field values are null
    reject rows with all null fields
)

作品谢谢似乎问题在于
skip
和添加
lrtim
的位置。非常感谢,这对我也很有帮助!虽然我正在用SQL创建外部表,但也有同样的问题。似乎“跳过1”必须介于“由换行符分隔的记录”和“字段”之间。最初我省略了“由换行符分隔的记录”,因为我知道它是隐式值。如果它有帮助,我很高兴,@eby。感谢这一提示-当
解决我的错误时,
加载。