0

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

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

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

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

我努力了:

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

但是我得到了同样的错误2

.

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


甲骨文文档

SQL*Loader 命令行参考

对于 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

4

1 回答 1

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从句
  • 字段以逗号结尾,而不是分号
  • 删除了多余的信息
于 2021-05-06T09:40:43.430 回答