我有一个需求,我需要使用SQL加载器将数据从数据文件加载到表中。然而,对于类似的通道,数据将以单行提供。ROW_ID是主键,使用序列生成。IDENTIFY是内部通道标识符。IDENTIFY不能作为主键,因为它将违反第一范式。下面是数据文件:
IDENTIFY|CHANNEL_NAME|CHANNEL_PARTNERS |LOAD_DATE
1-ED |WEBSITE |"redbus","abhibus","amazon travel","irctc" |02-FEB-2022
1-LP |WALKIN |"physical reservation","printed reservation","current reservation"|04-FEB-2022
但是,要加载到数据库中的数据是这样使用SQLLDR的。
IDENTIFY CHANNEL_NAME CHANNEL_PARTNERS LOAD_DATE
1-ED WEBSITE redbus 02-FEB-2022
1-ED WEBSITE abhibus 02-FEB-2022
1-ED WEBSITE amazon travel 02-FEB-2022
1-ED WEBSITE irctc 02-FEB-2022
1-LP WALKIN physical reservation 04-FEB-2022
1-LP WALKIN printed reservation 04-FEB-2022
1-LP WALKIN current reservation 04-FEB-2022
下面是CTL文件。
load data
infile 'mchannel.txt'
append into table master_channel
fields terminated by "|"
(
row_id "chan_seq.nextval",
identify,
channel_name,
channel_partners,
load_date
)
如何使用SQLLDR实现这一点?
2条答案
按热度按时间von4xj4u1#
首先可以创建辅助表
并通过以下方式将数据加载到其中
它的内容是
.ctl文件是
然后使用以下查询
在应用所需的转换时插入到主表中,其中假定该表创建为
ykejflvf2#
正如Paul W所建议的,一个简单的AWK完成了准备文件的工作,您可以借此机会删除双引号(和/或更改分隔符,如您所愿):