问题描述
嗨,汤姆,
我想将数据从固定长度文件加载到oracle外部表。
我在创建外部表时为每列指定了长度,因此大多数记录的数据都正确加载。但是,如果记录长度不匹配,则数据将转移到另一列。想跳过那些记录。
例如。
我的文件有类似的数据。
EMPNO 1-5,
名字6-15
姓氏16-25
EMPNO名字姓氏
12345 MANOJ JADHAV-(预计总记录长度为25,如果列的数据较少,则该记录将被加载,并用空白填充)
23456 ABCDEFGHIJK ABCDEFGHIJ-(但对于第二个记录,我们得到额外的2个字符 (总共27个),所以最后两个字符将无法正确加载)
如果总记录长度与指定长度匹配,我需要跳过记录。
在上述情况下,我想加载第一条记录,因为它具有所需的长度,即25和跳过第二条记录,因为它的长度为27。
我们能跳过这样的记录吗?
谢谢,
Manoj
我想将数据从固定长度文件加载到oracle外部表。
我在创建外部表时为每列指定了长度,因此大多数记录的数据都正确加载。但是,如果记录长度不匹配,则数据将转移到另一列。想跳过那些记录。
例如。
我的文件有类似的数据。
EMPNO 1-5,
名字6-15
姓氏16-25
EMPNO名字姓氏
12345 MANOJ JADHAV-(预计总记录长度为25,如果列的数据较少,则该记录将被加载,并用空白填充)
23456 ABCDEFGHIJK ABCDEFGHIJ-(但对于第二个记录,我们得到额外的2个字符 (总共27个),所以最后两个字符将无法正确加载)
如果总记录长度与指定长度匹配,我需要跳过记录。
在上述情况下,我想加载第一条记录,因为它具有所需的长度,即25和跳过第二条记录,因为它的长度为27。
我们能跳过这样的记录吗?
谢谢,
Manoj
专家解答
“但是,如果记录长度不匹配,则数据将转移到另一列”
听起来你需要换场终结者?
如果您的文件内容是:
然后你可以让 “” (空格) 的字段分隔符:
如果您确实需要限制总长度,则有两种选择:
1.保持外部表不变加载时添加where子句以绕过不需要的行:
2.更新外部表,以便拒绝过长的记录。您可以通过添加最大长度为25的计算列来做到这一点。使用 “column transforms” 子句将其定义为字段的串联:
听起来你需要换场终结者?
如果您的文件内容是:
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




