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

时间:2018-08-17 18:37:40

标签: oracle sql-loader

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

我尝试通过添加长度检查将其设置为DEFAULTIF col1=col0。假设col1值为空白,则其长度将为0,并将使用execute defaultif条件。但是它给出错误提示

  

期望带引号的字符串或十六进制标识符,找到“ col0”。

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

1 个答案:

答案 0 :(得分:3)

一个简单的NVL函数调用即可完成工作。

这是一个例子:

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

Table created.

控制文件:注意col2 "nvl(:col2, :col0)",如果col0不存在,它将把col2的值放入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>