Oracle SQL加载器数据插入:我们可以使用默认值作为另一列值吗?
我正在尝试使用SQL*加载程序导入数据。在导入期间,如果col1值为空,我需要将其替换为col0值。像这样,我需要为多个列设置默认值 我尝试通过添加长度检查将其设置为Oracle SQL加载器数据插入:我们可以使用默认值作为另一列值吗?,oracle,sql-loader,Oracle,Sql Loader,我正在尝试使用SQL*加载程序导入数据。在导入期间,如果col1值为空,我需要将其替换为col0值。像这样,我需要为多个列设置默认值 我尝试通过添加长度检查将其设置为DEFAULTIF col1=col0。假设col1值为空,则其长度为0,并使用executedefaultif条件。但这是一个错误的说法 应为带引号的字符串或十六进制标识符,找到“col0” 有人可以帮助并解释如何将默认值设置为另一列值吗?一个简单的NVL函数调用就可以完成这项工作 下面是一个例子: SQL> create
DEFAULTIF col1=col0
。假设col1值为空,则其长度为0,并使用executedefaultif
条件。但这是一个错误的说法
应为带引号的字符串或十六进制标识符,找到“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>
嗨,Littlefoot,感谢您提供的详细信息,我尝试了建议的选项,它工作正常。我有30多列,行数为百万。我可以在@9分钟内插入所有内容。