【发布时间】:2010-09-21 03:20:15
【问题描述】:
有人告诉我,当从 ADO.net 调用 Oracle 时,当在一个循环中调用多个插入时,每个插入都会触发一个触发器,其中包括它的 PL-Sql 一个 Commit 语句,这是不可能停止的该提交来自实际提交事务。
即,我希望我的 ADO.Net 代码在循环开始之前开始一个事务,并且当循环退出时,仅当且仅当循环中的每个插入都成功时才提交所有插入。我的消息来源告诉我 Oracle 的工作方式,如果这些触发器包括 COMmit 语句,那么这是不可能的..
因为这似乎是一个非常普遍的要求,而且我知道在 SQL Server 中这是可能的,所以这对我来说似乎不合适。
这是正确的吗?
【问题讨论】:
-
等等,在 SQL Server 中究竟有什么可能?自主Txns?在触发器中提交?
-
在 SQL Server 中,每个 Begin Transaction 都会增加一个计数器,可以使用名为 @@TranCount 的内置事务范围变量来访问该计数器。然后每个 Commit Transactiopn 语句将其递减,并且 DB 仅在 @TranCount = 0 时才实际提交...
-
来自 SQL Server Docs:BEGIN TRANSACTION 语句将 @@TRANCOUNT 递增 1。ROLLBACK TRANSACTION 将 @@TRANCOUNT 递减为 0,但 ROLLBACK TRANSACTION savepoint_name 除外,它不会影响 @@TRANCOUNT。 COMMIT TRANSACTION 或 COMMIT WORK 将 @@TRANCOUNT 减 1。
标签: oracle ado.net transactions triggers