请帮助我在oracle中编写查询。

更新某些记录后,我想检索记录,这些记录应该在单个事务中完成。我需要在甲骨文。

我使用了较早的DB2,例如下面的查询。

SELECT * FROM FINAL TABLE(update query ).

上面的查询发生的事情是根据某些条件更新某些记录,并返回相同的结果列表,这在Oracle中是可能的。

最佳答案

使用Oracle可以根据某些条件更新某些记录并返回相同的结果列表。


Oracle不会自动维护受DML语句影响的行的任何跟踪。您需要实现一些机制。您可以编写触发器来维护DML更改的历史记录。

例如,

CREATE
OR
replace TRIGGER trigger_name AFTER
UPDATE
ON table_name FOR EACH ROW BEGIN IF( Updating( 'COLUMN1' ) ) THEN
INSERT INTO log_table
            (
                        column_name,
                        column_value
            )
            VALUES
            (
                        'COLUMN1',
                        :new.column1
            );

END IF;
IF( Updating( 'COLUMN2' ) ) THEN
  INSERT INTO log_table
              (
                          column_name,
                          column_value
              )
              VALUES
              (
                          'COLUMN2',
                          :new.column2
              );

END IF;
END;


或者,您可以启用审核。

如果在PL / SQL中执行DML,则可以使用returning_clause来获取受DML影响的行。

例如,

SET SERVEROUTPUT ON
DECLARE
  TYPE t_tab IS TABLE OF t1.id%TYPE;
  l_tab t_tab;
BEGIN
  UPDATE t1
  SET    description = description
  RETURNING id BULK COLLECT INTO l_tab;

  FOR i IN l_tab.first .. l_tab.last LOOP
    DBMS_OUTPUT.put_line('UPDATE ID=' || l_tab(i));
  END LOOP;

  COMMIT;
END;
/
UPDATE ID=1
UPDATE ID=2
UPDATE ID=3

PL/SQL procedure successfully completed.

SQL>


阅读此article

10-04 13:26