Oracle中的触发器是否可以将数据保存到日志表并引发异常



伙计们:

我想知道是否有一种方法可以在Oracle中编写触发器来同时完成这两件事:将数据保存到日志表中,并引发用户定义的异常?

我正试图找出团队数据库中的一个奇怪错误,该错误会导致每个业务逻辑的数据不一致。多个团队的应用程序可以访问此数据库。所以我写了一个触发器来监视表中导致问题的某一列。如果值不正确,我想将用户ID、保存时间等数据保存到日志表中,但我也想引发异常以引起注意。然而,每当我的触发器引发用户定义的异常时,将数据保存到日志表并没有完成。有人能对此提出建议吗?提前谢谢。

您可以编写一个使用自主事务的日志记录函数

create or replace procedure log_autonomous( p_log_message in varchar2,
p_other_parameters... )
as
pragma autonomous_transaction;
begin
insert into log_table ...
commit;
end;

然后从触发调用日志记录功能

create or replace trigger my_trigger
before insert or update on some_table
for each row
declare
begin
if( some_bad_thing )
then
log_autonomous( 'Some message', ... );
raise_application_error( -20001, 'Some error' );
end if;
end;

log_table消息将被保留,因为它被插入到一个单独的(自主的)事务中。由于触发器引发异常,触发事务将被回滚。

最新更新