暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 使用sqlloader在单独的行中加载记录

askTom 2018-01-17
289

问题描述

嗨,
首先,非常感谢您回答我以前的问题,这对我有很大帮助。现在,我提出了有关SQL loader的新问题。

所以,基本上我有一个包含如下记录的文件

A | B | C | D |

现在,我有一个要求,将记录插入到表TEMP_TABLE中,就像分配了行号的单独行一样。
表应该是这样的。

Acc Col1 Col2 Col3
A B null null
null C null
null null D

请对此提供帮助,是否可以通过SQL loader实现,我真的不想在数据库中创建任何对象。

专家解答

这是一种方法:

-对要成为行的每一列重复into table子句
-对于每个,为您不想加载的列指定一个填充物
-对于第二,第三等负载,为第一列指定位置 (1) 以将位置重置为行的开始
-您可以使用sequence设置行号; 我不清楚您到底要怎么做

SQL> create table t (
  2    id int,
  3    c1 varchar2(1),
  4    c2 varchar2(1),
  5    c3 varchar2(1),
  6    c4 varchar2(1)
  7  );

Table created.

SQL> ho type sqlldr.ctl
LOAD DATA
INFILE *
APPEND
INTO TABLE "T"
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS
  (id sequence(1,1),
   c1, c2, f3 filler, f4 filler
  )
INTO TABLE "T"
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS
  (id sequence(3,1),
   c1 position(1), f2 filler, c3, f4 filler
  )INTO TABLE "T"
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS
  (id sequence(5,1),
   c1 position(1), f2 filler, f3 filler, c4
  )
BEGINDATA
A|B|C|D|
A|E|F|G|

SQL> ho sqlldr userid=chris/xxxxx@db control=sqlldr.ctl

SQL*Loader: Release 12.2.0.1.0 - Production on Fri Jan 19 10:43:27 2018

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

Path used:      Conventional
Commit point reached - logical record count 2

Table "T":
  2 Rows successfully loaded.

Table "T":
  2 Rows successfully loaded.

Table "T":
  2 Rows successfully loaded.

Check the log file:
  sqlldr.log
for more information about the load.

SQL> select * from t;

        ID C C C C
---------- - - - -
         1 A B
         2 A E
         3 A   C
         4 A   F
         5 A     D
         6 A     G
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论