SQL Loader 数据插入:我们可以使用默认值作为另一个列值吗?

SQL Loader data insert: can we use default value as another column value?

我正在尝试使用 SQL*Loader 导入数据。在导入过程中,如果 col1 值为空,我需要将其替换为 col0 值。像这些一样,我需要为多列设置默认值。

我尝试通过添加长度检查将其设置为 DEFAULTIF col1=col0。假设如果 col1 值为空,它的长度将为 0,它将使用 execute defaultif 条件。但它给出错误说

Expecting quoted string or hex identifier, found "col0".

有人可以帮忙解释一下如何将默认值设置为另一个列值吗?

一个简单的 NVL 函数调用就可以完成这项工作。

这是一个例子:

SQL> create table test (col0 number, col1 varchar2(10), col2 number);

Table created.

控制文件:注意 col2 "nvl(:col2, :col0)" 如果 col2 不存在,它将把 col0 值放入 col2。在我的示例中,第二行 2,yyy, 不包含 col2 的值,因此它将填充 col0 值,即 2.

load data 
infile *
replace
into table test
fields terminated by ","
trailing nullcols
(
col0,
col1,
col2 "nvl(:col2, :col0)"
)

begindata
1,xxx,111
2,yyy,
3,zzz,333

正在加载会话和结果:

SQL> $sqlldr scott/tiger@xe control=test02.ctl log=test02.log

SQL*Loader: Release 11.2.0.2.0 - Production on Pet Kol 17 21:48:59 2018

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 2
Commit point reached - logical record count 3

SQL> select * From test;

      COL0 COL1             COL2
---------- ---------- ----------
         1 xxx               111
         2 yyy                 2
         3 zzz               333

SQL>