首页 > 解决方案 > Oracle 外部表中记录和字段的多个分隔符问题

问题描述

给定一个 .CSV 格式的文件;

!!"9999"!@!""!@!""!@!""!!
!!"100"!@!""!@!""!@!"INP"!!
!!"700"!@!""!@!""!@!""!!
!!"800"!@!""!@!""!@!""!!

开始和结束分隔符= !! 字段分隔符 = !@! 用双引号括起来的所有字段

以下外部语法无法正常工作;

CREATE TABLE caunit_ext 
(
 ID                 VARCHAR2(4), 
 MILL_FAC_ID        VARCHAR2(200), 
 MILL_LOC_ID        VARCHAR2(200), 
 MILL_ENC_TYP_ID    VARCHAR2(200)
)
ORGANIZATION EXTERNAL (
  TYPE ORACLE_LOADER
  DEFAULT DIRECTORY PWSTAGING
  ACCESS PARAMETERS (
    RECORDS DELIMITED BY '!!'
    FIELDS TERMINATED BY '!@!'
    MISSING FIELD VALUES ARE NULL
    (
         ID                 CHAR(4), 
         MILL_FAC_ID        CHAR(200), 
         MILL_LOC_ID        CHAR(200), 
         MILL_ENC_TYP_ID    CHAR(20)   
    )
  )
  LOCATION ('CAUNIT.csv')
)
PARALLEL 5
REJECT LIMIT UNLIMITED;
/

select * from caunit_ext;
  1. 我可以使用多个字符作为分隔符吗?我看到的医生不要说你不能,但也不要说你可以!
  2. 由于我的开始记录和结束记录分隔符相同,如何处理?

标签: oraclecsvoracle11gexternal-tables

解决方案


我的解决方案是使用 FILLER 参数来扔掉垃圾;

喜欢

create table REFRESHTABLE(C1 varchar2(200), C2 varchar2(200), C3 varchar2(200), C4 varchar2(200),C5 varchar2(200), C6 varchar2(200), C7 varchar2(200), C8 varchar2(200)) 
                ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY PWSTAGING ACCESS PARAMETERS (FIELDS TERMINATED BY ''"'' MISSING FIELD VALUES ARE NULL
                    (
                         FILLER,
                         C1      CHAR(200), 
                         FILLER,
                         C2      CHAR(200), 
                         FILLER,
                         C3      CHAR(200), 
                         FILLER,
                         C4      CHAR(200),   
                         FILLER,
                         C5      CHAR(200), 
                         FILLER,
                         C6      CHAR(200), 
                         FILLER,
                         C7      CHAR(200), 
                         FILLER,
                         C8      CHAR(200)   
                    )
                  )
                  LOCATION (''' || V_CURRENTTABLE || '.csv''))';

推荐阅读