【问题标题】:how can i validate the data in the control file?如何验证控制文件中的数据?
【发布时间】:2011-01-24 09:37:20
【问题描述】:

考虑 SQLLoader 从路径读取输入数据文件,并根据控制文件中指定的描述将数据加载到表中。 首先,创建要填充的表:

create table sql_loader_1 ( load_time date, field_1 Numeric, field_2 varchar2(10) 

样本控制文件: load_1.ctl

load data 
infile 'load_1.dat' "str '\r\n'" 
insert into table sql_loader_1 
( 
 load_time sysdate, 
 field_2 position( 1:10),
 field_1 position(11:20)
) 

请注意,位置 11 到 20 加载到 field_1 中,位置 1 到 10 加载到 field_2 中。字段 load_time 填充了负载的当前时间 (sysdate)。

这是数据。文件名 (load_1.dat) 已通过控制文件中的 infile 语句指定。

load_1.dat

0123456789abcdefghij
**********##########
foo         bar
here comes a very long line 
and the next is 
short 

这里我想验证 field_1(数字数据类型),因为数据文件包含字符值(即)abcdefghij

【问题讨论】:

    标签: oracle sql-loader


    【解决方案1】:

    您说您要验证 field_1,但不清楚如果验证失败您期望什么操作?

    另外两个想法:

    1. 您是否考虑过在控制文件中使用 BADFILE 选项来处理被拒绝的行?

    2. 不是在 SQL-Loader 中处理数字转换,而是将数据加载为文本并将其转换为数字/在数据库中处理一次。这可能更容易。

    【讨论】:

    • 我将 field_1 声明为 Numeric 数据类型,但输入数据文件包含数据“abcdefghij”(位置 11 : 20),因此 sql 加载器不会将记录添加到数据库,而是将记录写入错误文件。但我想验证“(位置 11:20)中的数据是否为数字。如何在控制文件本身中验证这一点?如果不可能,我如何在数据库中验证它?给我有一个示例代码来解释这一点。
    • 但是如果验证失败,您希望采取什么行动?要拒绝的行?整个导入失败?我了解您要执行的操作,但您需要说明如果验证不成功要采取什么措施。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2017-12-06
    相关资源
    最近更新 更多