在oracle表中从平面文件加载数据时,如何从平面文件中删除列的值或用其他值替换列

在oracle表中从平面文件加载数据时,如何从平面文件中删除列的值或用其他值替换列,oracle,sql-loader,Oracle,Sql Loader,我有一张临时表,现在是空的。我想将该平面文件中的数据加载到oracle临时表中。在平面文件的一列col3中提到“X”,但在表中我想插入“abc”。如果可以从平面文件中的“X”中删除列值,那么如何才能做到这一点?或者将值从“X”替换为“abc” SQL*Loader允许您,因此您可以操作文件中的值 假设您有一个简单的表,如: create table your_table(col1 number, col2 number, col3 varchar2(3)); 和一个数据文件,如: 1,42,x

我有一张临时表,现在是空的。我想将该平面文件中的数据加载到oracle临时表中。在平面文件的一列col3中提到“X”,但在表中我想插入“abc”。如果可以从平面文件中的“X”中删除列值,那么如何才能做到这一点?或者将值从“X”替换为“abc

SQL*Loader允许您,因此您可以操作文件中的值

假设您有一个简单的表,如:

create table your_table(col1 number, col2 number, col3 varchar2(3));
和一个数据文件,如:

1,42,xyz
2,42,
3,42,X
然后,您可以使用大小写表达式将
col3
中的“X”值替换为固定值“abc”:

load data
replace
into table your_table
fields terminated by ',' optionally enclosed by '"'
trailing nullcols
(
  col1,
  col2,
  col3 "CASE WHEN :COL3 = 'X' THEN 'abc' ELSE :COL3 END"
)
使用该控制文件运行该文件将插入三行:

select * from your_table;

      COL1       COL2 COL
---------- ---------- ---
         1         42 xyz
         2         42    
         3         42 abc
已替换“X”,保留其他值

如果要“删除”该值,而不是替换它,则可以执行相同的操作,但将null作为固定值:

  col3 "CASE WHEN :COL3 = 'X' THEN NULL ELSE :COL3 END"
或者您可以使用:

SQL*Loader允许您,因此您可以操纵文件中的值

假设您有一个简单的表,如:

create table your_table(col1 number, col2 number, col3 varchar2(3));
和一个数据文件,如:

1,42,xyz
2,42,
3,42,X
然后,您可以使用大小写表达式将
col3
中的“X”值替换为固定值“abc”:

load data
replace
into table your_table
fields terminated by ',' optionally enclosed by '"'
trailing nullcols
(
  col1,
  col2,
  col3 "CASE WHEN :COL3 = 'X' THEN 'abc' ELSE :COL3 END"
)
使用该控制文件运行该文件将插入三行:

select * from your_table;

      COL1       COL2 COL
---------- ---------- ---
         1         42 xyz
         2         42    
         3         42 abc
已替换“X”,保留其他值

如果要“删除”该值,而不是替换它,则可以执行相同的操作,但将null作为固定值:

  col3 "CASE WHEN :COL3 = 'X' THEN NULL ELSE :COL3 END"
或者您可以使用:


解码
,对吗

SQL> create table test (id number, col3 varchar2(20));

Table created.

SQL> $type test25.ctl
load data
infile *
replace into table test
fields terminated by ',' trailing nullcols
(
id,
col3 "decode(:col3, 'x', 'abc', :col3)"
)
begindata
1,xxx
2,yyy
3,x
4,123
SQL>
SQL> $sqlldr scott/tiger@orcl control=test25.ctl log=test25.log

SQL*Loader: Release 11.2.0.2.0 - Production on ╚et O×u 29 12:57:56 2018

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

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

SQL> select * From test order by id;

        ID COL3
---------- --------------------
         1 xxx
         2 yyy
         3 abc
         4 123

SQL>

解码
,对吗

SQL> create table test (id number, col3 varchar2(20));

Table created.

SQL> $type test25.ctl
load data
infile *
replace into table test
fields terminated by ',' trailing nullcols
(
id,
col3 "decode(:col3, 'x', 'abc', :col3)"
)
begindata
1,xxx
2,yyy
3,x
4,123
SQL>
SQL> $sqlldr scott/tiger@orcl control=test25.ctl log=test25.log

SQL*Loader: Release 11.2.0.2.0 - Production on ╚et O×u 29 12:57:56 2018

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

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

SQL> select * From test order by id;

        ID COL3
---------- --------------------
         1 xxx
         2 yyy
         3 abc
         4 123

SQL>

如何加载数据-使用外部表、SQL*加载器或其他东西(因为您已经用PL/SQL标记了)?请提供更多详细信息,包括表结构和示例平面文件,并说明该文件中的记录应如何转换为表中的行。@AlexPoole在TOAD中使用SQL*Loader。临时表存在于Oracle中。在加载到oracle表中时,如何从平面文件中删除列值“X”,或将控制文件中的“X”替换为“abc”。如何加载数据-使用外部表、SQL*加载器或其他东西(因为您已使用PL/SQL标记)?请提供更多详细信息,包括表结构和示例平面文件,并说明该文件中的记录应如何转换为表中的行。@AlexPoole在TOAD中使用SQL*Loader。临时表存在于Oracle中。加载到oracle表时,如何从平面文件中删除列值“X”,或将控制文件中的“X”替换为“abc”。