Oralce触发器中更新本表的方法

php中文网
发布: 2016-06-07 17:27:01
原创
1672人浏览过

Oralce触发器中更新本表的方法,本文谈到两个问题:1,update触发器before和after 的区别。2,在A表某个字段个更新之后,触发器触

本文谈到两个问题: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;

测试如下图所示:

osCommerce 简体中文版
osCommerce 简体中文版

osCommerce 2.3.3 简体中文多国语言版 由 "osCommerce中国" 根据2012年8月15日osCommerce官方发布的osCommerce 2.3.3英文版整合。包含:+Windows兼容更新+后台html编辑器+简体中文语言包+法语包+德语包+Paypal Express 模块产品属性Bug更新

osCommerce 简体中文版 2
查看详情 osCommerce 简体中文版

下面来解释文章开头提出的两个问题:

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的方式直接更新确定的字段。

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号