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。感谢这一提示-当
解决我的错误时,加载。