oracle中触发器之前和之后的差异

Jag*_*gan 15 sql oracle10g

有人可以通过一个例子解释oracle 10g中"before"和"after"触发器之间的区别吗?

And*_*ore 32

首先,我将通过定义触发器来开始我的答案:触发器是在添加,修改或删除行时运行的存储过程.

触发器可以执行操作之前运行,也可以执行操作之后运行.

BEFORE触发器通常在接受更改之前需要进行验证时使用.它们在对数据库进行任何更改之前运行.假设您为银行运行数据库.你有一张桌子accounts和一张桌子transactions.如果用户从他的帐户中提款,您可能希望确保用户在其帐户中有足够的信用额度来提取.如果余额不足,BEFORE触发器将允许这样做并防止插入行.transactionsaccounts

AFTER当由于更改而需要在单独的表中更新信息时,通常会使用触发器.它们在对数据库进行更改后运行(不一定已提交).让我们回到我们的后面的例子.成功完成交易后,您希望balanceaccounts表格中进行更新.一个AFTER触发器将允许你这样做.


小智 8

我不完全确定你有兴趣知道什么,所以我会保持这个基础.

在触发之前

  • 根据名称,在表中创建行之前会触发这些触发器.随后,由于尚未创建行,因此您可以完全访问:new.table_element字段.如果试图插入/更新不需要的/格式错误的数据,这允许数据清理和一致性.这只是一个基本示例,但您需要在需要访问":new"数据时使用before触发器.

触发后

  • 由于在已经创建了行之后触发了after触发器,因此当您希望逻辑由于行而发生时,通常会使用这些触发器.例如,如果您有一个地址表并且用户更新了他/她的地址,那么您可能希望在创建时更新外部参照表中的地址引用ID(如果您恰好也保留了所有旧地址).此外,与before触发器不同,您无权修改任何列值,因为该行已存在于表中.