oracle 如何为外部表中缺少的列填充null|甲骨文|PLSQL

hvvq6cgz  于 2023-04-29  发布在  Oracle
关注(0)|答案(1)|浏览(154)

我一直被困在这一刻没有得到我需要做的事情
我有一个文件叫做-雇员。4列的csv

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并继续。

hof1towb

hof1towb1#

你查过日志文件了吗?它可能表示日期格式无效。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 nullempcreation的数据类型(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>

相关问题