gpt4 book ai didi

oracle - Oracle中的触发器以及回滚后如何保留记录

转载 作者:行者123 更新时间:2023-12-02 06:42:53 25 4
gpt4 key购买 nike

我需要创建一个触发器来将更改写入影子表中。我知道如何创建触发器,但我的挑战是,即使在回滚之后,我也需要新表中的记录仍然存在。

这是输出的示例

INSERT INTO department VALUES (95, 'PURCHASING', 'CHICAGO');<br>
ROLLBACK;

1 rows inserted.
rollback complete.

SELECT * FROM department_log;

DEPARTMENT_ID DEPARTMENT_NAME ADDRESS OPERATION_TIME
---------------------- -------------------- -------------------- ------------------
90 HR CHICAGO 03-NOV-11
95 PURCHASING CHICAGO 03-NOV-11

SELECT * from department WHERE department_id >= 90;

DEPARTMENT_ID DEPARTMENT_NAME ADDRESS
---------------------- -------------------- --------------------
90 HR CHICAGO

最佳答案

您需要使用自主事务。

SQL> create table t (col1 number);

Table created.

SQL> create table t_shadow( col1 number, dt date );

Table created.

SQL> create trigger trg_t
2 before insert on t
3 for each row
4 declare
5 pragma autonomous_transaction;
6 begin
7 insert into t_shadow( col1, dt )
8 values( :new.col1, sysdate );
9 commit;
10 end;
11 /

Trigger created.

SQL> insert into t values( 1 );

1 row created.

SQL> rollback;

Rollback complete.

SQL> select * from t;

no rows selected

SQL> select * from t_shadow;

COL1 DT
---------- ---------
1 09-NOV-11

请注意,如果您发现自己将自主事务用于持久日志记录以外的任何用途,那么您几乎肯定做错了什么。自主交易是一项非常危险且经常被滥用的功能。

关于oracle - Oracle中的触发器以及回滚后如何保留记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8069022/

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