【问题标题】:Oracle SQL*Loader WHEN Clause Raising Error 2Oracle SQL*Loader WHEN 子句引发错误 2
【发布时间】:2021-05-06 09:18:34
【问题描述】:

我正在尝试使用 SQL*Loader 使用 WHEN 子句排除数据文件的最后一行,但是当它到达该行时,它会填充坏文件和丢弃文件,并引发错误 2。

要忽略的行是最后一行,以“NOL”开头。

经过一番阅读,错误2是关于CTL文件的synatx的警告,但无法找出错误的地方。注意,如果我删除最后一行,然后运行 ​​SAME CTL 文件,不会引发 ERROR,所以问题不是 CTL 文件的语法。

为了解决这个问题,我在加载数据之前删除了最后一行,但想找出问题是什么,以便将来使用 WHEN 子句。

我试过了:

  • file_dt != 'NOL'
  • (1:1) != 'N'
  • 。 . .

但我得到相同的错误 2

还有其他人遇到过这个问题吗?或者有什么我可以尝试的?


Oracle 文档

SQL*Loader Command-Line Reference

对于 UNIX,退出代码如下:

EX_SUCC 0 EX_FAIL 1 EX_WARN 2 EX_FTL 3

数据:

文件-日期、编号
2021-05-04,24
2021-05-04,24
2021-05-04,24
2021-05-04,24
无:4

CTL 文件:

选项(READSIZE=51200001,BINDSIZE=51200000,ROWS=5000,ERRORS=0,SKIP=1)
加载数据
附加
进入表 SOME_SCHEMA.SOME_TABLE
当 (01) 'NOL'
以“;”结尾的字段
可选地由 '"' 和 '"' 包围
尾随空列
           (
    file_dt DATE "YYYY-MM-DD",
    一个号码
           )

结果:

使用的路径:常规
已达到提交点 - 逻辑记录计数 5

表 SOME_SCHEMA.SOME_TABLE: 4 行已成功加载。

检查日志文件: 加载文件.log 有关负载的更多信息。 2021-05-06 09:42:12:完成将数据加载到表中 2021-05-06 09:42:12:状态:2

【问题讨论】:

    标签: oracle unix sql-loader ctl


    【解决方案1】:

    我不在 Unix 上。尽管如此,加载应该是一样的。

    表:

    SQL> desc test
     Name                                                  Null?    Type
     ----------------------------------------------------- -------- --------------------------
     FILE_DT                                                        DATE
     A_NUMBER                                                       NUMBER
    
    SQL>
    

    控制文件(为简单起见,我在其中包含了示例数据):

    OPTIONS (READSIZE=51200001, BINDSIZE=51200000, ROWS=5000, ERRORS=0, SKIP=1)
    load data
    infile *
    replace
    into table test
    WHEN  (01) <>  'NOL'
    fields terminated by ','
    trailing nullcols
    (
        file_dt    DATE "YYYY-MM-DD",
        a_number
    )
               
    begindata
    File-Date,Number
    2021-05-04,24
    2021-05-04,24
    2021-05-04,24
    2021-05-04,24
    NOL:  4        
    

    加载会话和结果:

    SQL> $sqlldr scott/tiger@orcl control=test38.ctl log=test38.log
    
    SQL*Loader: Release 11.2.0.1.0 - Production on ╚et Svi 6 11:38:00 2021
    
    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
    
    Commit point reached - logical record count 4
    
    SQL> select * from test;
    
    FILE_DT               A_NUMBER
    ------------------- ----------
    04.05.2021 00:00:00         24
    04.05.2021 00:00:00         24
    04.05.2021 00:00:00         24
    04.05.2021 00:00:00         24
    

    似乎还可以。


    那么,我做了什么不同的事情?

    • 修改WHEN子句
    • 字段以逗号而非分号结尾
    • 删除了多余的信息

    【讨论】:

    • 您好 Littlefoot,非常感谢您的反馈。它真的很有帮助。如果你 echo 相当于 $? - 它返回什么?在 Unix 中,它是 2,而不是 1。看起来像 。 .如果我想使用这个 Oracle 功能,我需要满足 2 的退出。
    • 不客气。您在问题中链接的同一文档中提到了 MS Windows 的退出代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2012-01-01
    相关资源
    最近更新 更多