插入临时表并在一个SQL查询中更新另一个表(Oracle)

Dir*_*irk 1 sql oracle

这是我正在尝试做的事情:

1)从原始表中插入一些值的临时表

INSERT INTO temp_table SELECT id FROM original WHERE status='t'
Run Code Online (Sandbox Code Playgroud)

2)更新原始表

UPDATE original SET valid='t' WHERE status='t'
Run Code Online (Sandbox Code Playgroud)

3)根据两个表之间的连接进行选择

SELECT * FROM original WHERE temp_table.id = original.id
Run Code Online (Sandbox Code Playgroud)

有没有办法结合步骤1和2?

Jef*_*emp 5

您可以通过在PL/SQL中执行更新并使用RETURNING子句将更新的ID导入PL/SQL表来组合这些步骤.

编辑:

如果仍然需要进行最终查询,仍然可以使用此方法插入temp_table; 虽然取决于最后一个查询的用途,但可能还有其他方法可以实现您的目标.为了显示:

DECLARE
  id_table_t IS TABLE OF original.id%TYPE INDEX BY PLS_INTEGER;
  id_table id_table_t;
BEGIN
  UPDATE original SET valid='t' WHERE status='t'
  RETURNING id INTO id_table;
  FORALL i IN 1..id_table.COUNT
    INSERT INTO temp_table
    VALUES (id_table(i));
END;
/

SELECT * FROM original WHERE temp_table.id = original.id;
Run Code Online (Sandbox Code Playgroud)