Oracle:同时选择和更新

时间:2017-07-15 15:11:32

标签: sql oracle select

我有三张桌子:

Table-1: Column1 | Column2 | Column 3 
Table-2: Column4 | Column5 | ColumnUpdate
Table-3: Column7 | Column8 

我需要根据Table-1的某些条件将表-2中的一些行复制到表-3中:

我的insert语句如下所示:

INSERT INTO Table-3 (
   Column7, 
   Column8)
SELECT Table-2.COLUMN4, Table-2.COLUMN5 
FROM Table-2 INNER JOIN Table-1
ON Table-2.COLUMN4 = TABLE-1.Column1;

但是我想要将选择行的列“ColumnUpdate”(表-2)更新为“1”。

所以我选择了一些行,并立即想要将该行中的进程列更新为“1”。

我不知道该怎么做。我看到了一些带有“OUTPUT”子句或“UPDATE FOR”的例子,但我并不完全知道如何在我的陈述中使用它们。

1 个答案:

答案 0 :(得分:1)

MERGE 
   INTO target_table t1
   USING (SELECT col1, col2
               FROM source_table 
               WHERE //conditions here) s1
   ON (t1.id = s1.id)
   WHEN MATCHED THEN 
     UPDATE SET column_update = '1'
   WHEN NOT MATCHED THEN 
     INSERT (col1, col2)
     VALUES (s1.col1, s1.col2)
     WHERE (// condition here);

更新

BEGIN
   FOR temp_var IN (
     SELECT * from table_a
     WHERE table_a.col1 = table_b.col1)
   LOOP
       // INSERTING INTO TARGET TABLE
       INSERT INTO table_b
       VALUES(temp_var.col1, temp_var.col2);
       // UPDATING SOURCE TABLE
       UPDATE table_a
       SET status = 'COPIED'
       WHERE col1 = temp_var.col1;
   END LOOP;
END;