gpt4 book ai didi

oracle - 从 ADO.NET 使用并涉及触发器时 Oracle 事务的范围?

转载 作者:行者123 更新时间:2023-12-04 02:15:34 27 4
gpt4 key购买 nike

有人告诉我,当从 ADO.net 调用 Oracle 时,当在循环中调用多个插入时,每个插入都会导致触发触发器,其中包含在其 PL-Sql 中的 Commit 语句,这是不可能停止的从实际提交事务开始提交。

即,我希望我的 ADO.Net 代码在循环开始之前开始事务,并且当循环退出时,仅当且仅当循环中的每个插入都成功时才提交所有插入。我的消息来源告诉我,Oracle 的工作方式,如果这些触发器包含 COmmit 语句,那么这是不可能的..

由于这似乎是一个非常常见的要求,而且我知道这在 SQL Server 中是可能的,所以这对我来说似乎不合适。

这是正确的吗?

最佳答案

如果你的线人谈论的是 Oracle 数据库触发器,那么他就错了:

1) 您不能将 COMMIT 放入非自治的 Oracle 触发器中:

SQL> create trigger this_wont_work
2 after insert on emp
3 begin
4 commit;
5 end;
6 /

Trigger created.

SQL> insert into emp (empno) values (123)
2 /
insert into emp (empno) values (123)
*
ERROR at line 1:
ORA-04092: cannot COMMIT in a trigger
ORA-06512: at "TONY.THIS_WONT_WORK", line 2
ORA-04088: error during execution of trigger 'TONY.THIS_WONT_WORK'

2) 如果触发器是自主的(即在其声明部分中有 PRAGMA AUTONOMOUS_TRANSACTION),那么它只能提交它(触发器)所做的任何更改。

触发器提交您在该触发器之外所做的工作不会有任何危险。

注意:除了某些情况外,在触发器中使用自治事务是危险的,因为即使回滚触发语句,自治触发器执行的操作也会被提交。如果使用不当,很容易导致数据损坏。

关于oracle - 从 ADO.NET 使用并涉及触发器时 Oracle 事务的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/269570/

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