我正在尝试使用SQL * Loader导入数据。导入期间,如果col1值为空白,则需要将其替换为col0值。像这些一样,我需要为多个列设置默认值。
我尝试通过添加长度检查将其设置为DEFAULTIF col1=col0
。假设col1值为空白,则其长度将为0,并将使用execute defaultif
条件。但是它给出错误提示
期望带引号的字符串或十六进制标识符,找到“ col0”。
有人可以帮忙解释一下如何将默认值设置为另一个列值吗?
答案 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>