使用SQL * Loader更新表中的列?

时间:2012-02-01 05:18:52

标签: sql oracle sql-loader

我编写了一个具有以下查询的SQL脚本。 查询工作正常。

update partner set is_seller_buyer=1 where id in (select id from partner 
where names in 
(
'A','B','C','D','E',... // around 100 names.
));

但是现在我不想在查询中编写大约100个名字,而是想从CSV文件中获取所有名称。 我在互联网上阅读了关于SQL * Loader但我对更新查询没有太多了解。 我的csv文件只包含名称。

enter image description here

我试过了

  load data
  infile 'c:\data\mydata.csv'
  into table partner set is_wholesaler_reseller=1
  where id in (select id from partner 
  where names in 
  ( 
  'A','B','C','D','E',... // around 100 names.
  ));
  fields terminated by "," optionally enclosed by '"'         
  ( names, sal, deptno )

我怎么能做到这一点? 提前谢谢。

1 个答案:

答案 0 :(得分:5)

SQL * Loader不执行更新,只插入。因此,您应该将您的名字插入一个单独的表格,例如names,并运行您的更新:

update partner set is_seller_buyer=1 where id in (select id from partner 
where names in 
(
select names from names
));

您的加载程序脚本可以更改为:

load data
  infile 'c:\data\mydata.csv'
  into table names
  fields terminated by "," optionally enclosed by '"'         
  ( names, sal, deptno )

另一种方法是使用外部表,它允许Oracle将平面文件视为表格。可以找到一个让您入门的示例here