Mysql 在oracle中面对SELECT DML更改的问题

Mysql 在oracle中面对SELECT DML更改的问题,mysql,sql,oracle,oracle10g,Mysql,Sql,Oracle,Oracle10g,请帮助我在oracle中编写查询 我想在更新某些记录后检索这些记录,这应该在单个事务中完成。我需要在甲骨文 我使用了前面的DB2,如下面的查询 从最终的TABLEupdate查询中选择* 上面的查询会根据某些条件更新一些记录,并返回相同的结果列表,这在Oracle中是可能的 根据某些条件更新某些记录,并将返回相同的结果列表,这在Oracle中是可能的 Oracle不会自动维护受DML语句影响的行的任何跟踪。您需要实现一些机制。您可以编写触发器来维护DML更改的历史记录 比如说, CREATE

请帮助我在oracle中编写查询

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

我使用了前面的DB2,如下面的查询

从最终的TABLEupdate查询中选择*

上面的查询会根据某些条件更新一些记录,并返回相同的结果列表,这在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;
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>
或者您可以启用审核

如果在PL/SQL中执行DML,可以使用returning_子句获取受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;
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>
读一下。

你能详细说明一下吗