更新列

时间:2017-08-15 08:27:00

标签: oracle plsql plsqldeveloper toad

我有一个包含82行的列(来自table1),我想用其他表(table2)中的不同值更新其中的76行。避免6个特定行(1,10,38,39,46,77)。保留这些行为空值。

我用光标保存了table2中的所有76行

Cursor my_cur
 Is
  Select * from table2

然后我尝试更新我的table1

Begin
 For x in  my_cur loop
   Update table1
   Set my_col = x.acct_num
   Where rnum not in ('1', '10', '38', '39', '46', '77');
end loop;
End;

但我最终用相同的值更新这些行(对所有76行只有1个acct_num)。

我想输入不同的acct_num到76行,并且与我的table2中的顺序相同

我在其中添加了rownum,至少要确定要跳过哪些行。有什么想法怎么做?谢谢。

1 个答案:

答案 0 :(得分:0)

在更新查询中,因为它是for循环,因此table1循环中acct_num的最后一个值更新为table2中的所有行。

table1和table2之间必须有一个公共列才能在where条件中使用它。

Begin
 For x in  my_cur loop
   Update table1
   Set my_col = x.acct_num
   Where table1.common_column = x.common_column and
rnum not in ('1', '10', '38', '39', '46', '77');
end loop;
End;

where子句中的这个附加过滤器可以解决你的查询。