Welcome 微信登录

首页 / 数据库 / MySQL / Oralce触发器中更新本表的方法

本文谈到两个问题:1,update触发器before和after 的区别。2,在A表某个字段个更新之后,触发器触发执行,在触发器-- Create table
create table TEST_UP_TRI

  ID  NUMBER,
  NAME VARCHAR2(20),
  AGE  NUMBER(2)
)中如何更新A表的其他字段。举例说明:为该表创建一个触发器,功能是:当name字段发生改变时,将age字段设置为20,触发器如下:create or replace trigger testtab_up_tri before update of name on test_up_tri
for each row
declare
begin
:new.age :=20;
end;测试如下图所示:下面来解释文章开头提出的两个问题:1,after和before的区别。
一个是在记录操作之前触发,一个是在记录操作之后触发。
比如表之间定义的有外键,在删除主键时,必须要先删除外键表,这时就有先后之分,after是在修改触发语句影响的每行和可能应用相应的完整性约束后,若不违反触发器限制则为当前行执行触发器动作,与BEFORE行触发器不同的是,AFTER行触发器锁住行。因此,after中不可以使用:new.age : = 20这样的语句。2,使用update…set来更新本表是不可以的只能使用:new :=**的方式,如果使用了可以编译通过,但执行时,会出现如下错误:ORA-04091: 表 ZXL.TEST_UP_TRI 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "ZXL.TESTTAB_UP_TRI", line 5
ORA-04088: 触发器 "ZXL.TESTTAB_UP_TRI" 执行过程中出错3,:new :=**的方式也可以使用select 20 into :new.age来代替,这样当我们查到一个字段是可以直接通过select ……into :new.age的方式直接更新确定的字段。更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12ORA-16038的解决HBase集群RS扩容性能验证Rowkey构建方法相关资讯      Oralce基础教程  Oralce触发器 
  • Oralce中的synonym同义词  (02/08/2012 16:27:45)
  • Oracle用户、角色、权限管理  (12/28/2011 18:58:06)
  • 非Oralce用户环境变量配置  (12/21/2011 18:53:02)
  • Oralce预编译Sql语句在JDBC中的处  (01/31/2012 21:21:37)
  • Oralce 数据库表的连接分类  (12/27/2011 17:28:49)
  • 一个检查并自动安装Oralce所需rpm  (12/20/2011 20:13:21)
本文评论 查看全部评论 (0)
表情: 姓名: 字数