循环运行oracle更新查询

时间:2019-02-20 22:27:51

标签: sql oracle loops

我的桌子上有很多行。我需要使用另一个(非常复杂的)查询来更新表中所有行中的特定列。

这是我的桌子:

   col1    col2
    A        null 
    B        null 
    C        null

我有一个查询,用于分别更新每一行,它看起来像这样:

update table1 set col2='
... some query that uses other tables and the A value ...' 
where col1='A'

我想更新一个查询中的所有行(否则,我将不得不为每一行运行查询并更改变量)。

我需要有col1中的值可用于我运行的内部查询中。我该怎么办?

谢谢!

2 个答案:

答案 0 :(得分:1)

不需要循环。您可以使用相关子查询:

UPDATE table1
SET col2 = (SELECT colX FROM tableA WHERE table1.some_col = tableA.some_col)
WHERE col1='A';
-- subquery has to return single value(1 row and 1 column)
  

Using subqueries

     

当嵌套的子查询引用表中的列时,Oracle会执行相关的子查询,该表引用了子查询上一级的父语句。父语句可以是子查询嵌套在其中的SELECT,UPDATE或DELETE语句。从概念上讲,对关联的子查询对父语句处理的每一行都进行一次评估。

答案 1 :(得分:0)

您似乎想要一个相关的子查询:

update table1 t1
    set col2 = (select . . .
                from . .  .
                where . . .
                      ? = t1.col1  -- your condition goes here
                . . .
               );