暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如果在oracle外部表中加载数据时长度与所需长度不匹配,希望跳过记录

askTom 2016-06-23
565

问题描述

嗨,汤姆,

我想将数据从固定长度文件加载到oracle外部表。
我在创建外部表时为每列指定了长度,因此大多数记录的数据都正确加载。但是,如果记录长度不匹配,则数据将转移到另一列。想跳过那些记录。

例如。
我的文件有类似的数据。
EMPNO 1-5,
名字6-15
姓氏16-25

EMPNO名字姓氏
12345 MANOJ JADHAV-(预计总记录长度为25,如果列的数据较少,则该记录将被加载,并用空白填充)
23456 ABCDEFGHIJK ABCDEFGHIJ-(但对于第二个记录,我们得到额外的2个字符 (总共27个),所以最后两个字符将无法正确加载)

如果总记录长度与指定长度匹配,我需要跳过记录。

在上述情况下,我想加载第一条记录,因为它具有所需的长度,即25和跳过第二条记录,因为它的长度为27。

我们能跳过这样的记录吗?


谢谢,
Manoj

专家解答

“但是,如果记录长度不匹配,则数据将转移到另一列”

听起来你需要换场终结者?

如果您的文件内容是:

12345 MANOJ JADHAV
23456 ABCDEFGHIJK ABCDEFGHIJ


然后你可以让 “” (空格) 的字段分隔符:

create table t (
  x int,
  y varchar2(20),
  z varchar2(20)
) organization external (
  type oracle_loader
  default directory tmp
  access parameters (
    records delimited by newline
    fields terminated by " " 
  )
  location ('emps.dat')
) reject limit unlimited;

select * from t;

         X Y                    Z                  
---------- -------------------- --------------------
     12345 MANOJ                JADHAV              
     23456 ABCDEFGHIJK          ABCDEFGHIJ  


如果您确实需要限制总长度,则有两种选择:

1.保持外部表不变加载时添加where子句以绕过不需要的行:

select * from t
where  length(to_char(x) || y || z) <= 25;

         X Y                    Z                  
---------- -------------------- --------------------
     12345 MANOJ                JADHAV


2.更新外部表,以便拒绝过长的记录。您可以通过添加最大长度为25的计算列来做到这一点。使用 “column transforms” 子句将其定义为字段的串联:

drop table t purge;

create table t (
  x int,
  y varchar2(20),
  z varchar2(20),
  cols varchar2(25)
) organization external (
  type oracle_loader
  default directory tmp
  access parameters (
    records delimited by newline
    fields terminated by " " (
      x char(27), 
      y char(27), 
      z char(27)
    )
    column transforms (
      cols from concat(x, y, z)
    )
  )
  location ('emps.dat')
) reject limit unlimited;

select * from t;

         X Y                    Z                    COLS                    
---------- -------------------- -------------------- -------------------------
     12345 MANOJ                JADHAV               12345MANOJJADHAV         

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论