gpt4 book ai didi

mysql - 面临 Oracle 中 SELECT DML 更改的问题

转载 作者:行者123 更新时间:2023-11-30 22:49:12 25 4
gpt4 key购买 nike

请帮我在 oracle 中编写查询。

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

我以前使用过 DB2,比如下面的查询。

SELECT * FROM FINAL TABLE(更新查询)。

上面的查询会根据某些条件更新一些记录,并返回相同的结果列表,Oracle 是否可行。

最佳答案

update some records based on some condition and will return same list of results, is it possible with 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 .

关于mysql - 面临 Oracle 中 SELECT DML 更改的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28623816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com