Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL加载程序ctl文件-如何跳过列_Sql_Oracle_Sql Loader_Ctl - Fatal编程技术网

SQL加载程序ctl文件-如何跳过列

SQL加载程序ctl文件-如何跳过列,sql,oracle,sql-loader,ctl,Sql,Oracle,Sql Loader,Ctl,假设在我的数据库中有4列: Column1, Column2, Column3, Column4 我的数据文件是CSV文件(逗号分隔,列长度未知): CTL将是: LOAD DATA INTO TABLE "TABLE" FIELDS TERMINATED BY ',' TRAILING NULLCOLS ( Column1, Column2, Column3, Column4 ) 我想跳过第三栏,我该怎么做?我知道FILLER,但它不适用于旧

假设在我的数据库中有4列:

Column1, Column2, Column3, Column4 
我的数据文件是CSV文件(逗号分隔,列长度未知):

CTL将是:

LOAD DATA
INTO TABLE "TABLE" 
FIELDS TERMINATED BY ',' TRAILING NULLCOLS 
(
    Column1,
    Column2,
    Column3,
    Column4     
)

我想跳过第三栏,我该怎么做?我知道FILLER,但它不适用于旧的oracle版本。

一种方法是使用中间表或加载表,如下所示:

LOAD DATA
INTO TABLE "LOADTABLE" 
FIELDS TERMINATED BY ',' TRAILING NULLCOLS 
(
    Column1,
    Column2,
    Column3,
    Column4     
)
然后调用一个存储过程来处理主表的填充,如下所示:

CREATE PROCEDURE pop_table
IS
   CURSOR cur_load_table
   IS
              SELECT column1
                   , column2
                   , column4
                FROM loadtable;
BEGIN
   FOR rec IN cur_load_table
   LOOP
      INSERT INTO table( column1
                       , column2
                       , column4 )
      VALUES ( rec.column1
             , rec.column2
             , rec.column4 );
   END LOOP;
END pop_table;

一种方法是使用中间表或加载表,如下所示:

LOAD DATA
INTO TABLE "LOADTABLE" 
FIELDS TERMINATED BY ',' TRAILING NULLCOLS 
(
    Column1,
    Column2,
    Column3,
    Column4     
)
然后调用一个存储过程来处理主表的填充,如下所示:

CREATE PROCEDURE pop_table
IS
   CURSOR cur_load_table
   IS
              SELECT column1
                   , column2
                   , column4
                FROM loadtable;
BEGIN
   FOR rec IN cur_load_table
   LOOP
      INSERT INTO table( column1
                       , column2
                       , column4 )
      VALUES ( rec.column1
             , rec.column2
             , rec.column4 );
   END LOOP;
END pop_table;

我真的不知道早期版本是否支持此功能,但在以后的版本中,您可以使用:


。。。它会将
Column3
设置为null,无论它在数据文件中是否有值。

我真的不知道早期版本是否支持此功能,但在以后的版本中,您可以使用:


。。。无论数据文件中是否有值,它都会将
Column3
设置为null。

如果是选项,只需使用shell工具删除第三列即可。那只是工作

例如,使用
awk

awk 'BEGIN { FS="," } { print $1 FS $2 FS $4 }' INFILE > TMPOUTFILE
或使用
sed

sed 's/^\([^,]\+,[^,]\+,\)[^,]\+,/\1/' INFILE > TMPOUTFILE

(您可以选择其他几种工具(例如,
cut
..)

如果可以选择,只需使用shell工具删除第三列即可。这很有效

例如,使用
awk

awk 'BEGIN { FS="," } { print $1 FS $2 FS $4 }' INFILE > TMPOUTFILE
或使用
sed

sed 's/^\([^,]\+,[^,]\+,\)[^,]\+,/\1/' INFILE > TMPOUTFILE

(您可以选择其他几种工具(例如,
cut
…)

您使用的Oracle版本是什么?不同的版本包括<8您使用的Oracle版本是什么?不同的版本包括<8