请帮我在oracle中编写查询。
我想在更新一些记录后检索记录,这些记录应该在单个事务中完成。我需要在甲骨文。
我使用过早期的DB2,如下面的查询。
SELECT * FROM FINAL TABLE(update query ).
上述查询发生的情况是根据某些条件更新一些记录,并返回相同的结果列表,是否可以使用Oracle。
答案 0 :(得分:0)
根据某些条件更新一些记录,并返回相同的结果列表,是否可以使用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。