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>
我正在尝试使用 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>