我一直卡在这一刻没有得到我需要做的事情
我有一个名为 - employee.csv 的文件,有 4 列
EMPID,EMPNAME,EMPAGE,EMPCREATION
1,ABC,12,202190211
2,XYZ,24,202190211
3,HJK,25,202190211
我的员工表结构
create table employee
(
empid number,
empname varchar2(255),
empage varchar2(255),
empcreation date
emprole varchar2(255),
empgroup varchar2(255)
)
如您所见,我的上表有 6 列,而我的数据文件只有 4 列
当我使用 oracle external 加载文件时,我的外部表是空的
create table demo_employee
(
empid number,
empname varchar2(255),
empage varchar2(255),
empcreation date
emprole varchar2(255),
empgroup varchar2(255)
)organization external ( type oracle_loader default directory ABC access parameters
( fields terminated by ',') location ('employee.csv')reject limit unlimited;
我的外部表创建了,但里面没有记录。如果我的文件中缺少我的列,则应将数据填充为 NULL 并继续。
你检查日志文件了吗?它可能说日期格式无效。
empcreation
听起来像约会,你想把202190211
放在那里。它是什么? 2021
可能是一年;接下来的9
是什么?还是90
?
我修改了示例数据,使其实际代表有效的日期值:
1,ABC,12,20230423 --> 23rd of April 2023
2,XYZ,24,20230427
3,HJK,25,20210903
然后,创建表(为了更漂亮的输出,我修改了列长度):
SQL> CREATE TABLE employee
2 (
3 empid NUMBER,
4 empname VARCHAR2 (10),
5 empage VARCHAR2 (10),
6 empcreation DATE,
7 emprole VARCHAR2 (10),
8 empgroup VARCHAR2 (10)
9 );
Table created.
外部表;
note missing field values are null
和 empcreation
的数据类型(varchar2
,不是 date
):
SQL> CREATE TABLE demo_employee
2 (
3 empid NUMBER,
4 empname VARCHAR2 (10),
5 empage VARCHAR2 (10),
6 empcreation VARCHAR2 (10),
7 emprole VARCHAR2 (10),
8 empgroup VARCHAR2 (10)
9 )
10 ORGANIZATION EXTERNAL
11 (
12 TYPE oracle_loader
13 DEFAULT DIRECTORY dpdir
14 ACCESS PARAMETERS (RECORDS DELIMITED BY NEWLINE
15 FIELDS TERMINATED BY "," MISSING FIELD VALUES ARE NULL)
16 LOCATION ('test_so.csv'))
17 REJECT LIMIT UNLIMITED;
Table created.
里面有什么吗?是的!
SQL> SELECT * FROM demo_employee;
EMPID EMPNAME EMPAGE EMPCREATIO EMPROLE EMPGROUP
---------- ---------- ---------- ---------- ---------- ----------
1 ABC 12 20230423
2 XYZ 24 20230427
3 HJK 25 20210903
现在,将数据传输到目标表中,为
empcreation
提供格式掩码:
SQL> INSERT INTO employee (empid,
2 empname,
3 empage,
4 empcreation)
5 SELECT empid, empname, empage, TO_DATE (empcreation, 'yyyymmdd') FROM demo_employee;
3 rows created.
最终结果:
SQL> SELECT * FROM employee;
EMPID EMPNAME EMPAGE EMPCREATIO EMPROLE EMPGROUP
---------- ---------- ---------- ---------- ---------- ----------
1 ABC 12 23.04.2023
2 XYZ 24 27.04.2023
3 HJK 25 03.09.2021
SQL>