触发器 能否更新某个字段

gisinfo 2009-09-27 03:30:33
我应用中有两个字段有对应关系


dxlb sfjr
31 是
32 否
现在:
当update insert dxlb
时sfjr中 是 否
是我触发写入的


但是 这导致我 修改sfjr 保存不进去

是否能根据表中的某个字段进行触发呢?
或者有什么更高明的方法望赐教!!
...全文
209 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cheng_fengming 2009-10-07
  • 打赏
  • 举报
回复
楼主用哪个版本的oracle ?
我记得oracle 9i一下的(包括9i)不能修改列名吧?
别到时候瞎忙乎 呵呵
plafang 2009-10-06
  • 打赏
  • 举报
回复
支持三楼的
iqlife 2009-09-30
  • 打赏
  • 举报
回复
在行级触发器中可以对列的值进行访问(很重要!)
列名前加 :old. 表示变化前的值
列名前加 :new. 表示变化后的值
在when子句中不用冒号。
inthirties 2009-09-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 gisinfo 的回复:]
我应用中有两个字段有对应关系


dxlb sfjr
31    是
32    否
现在:
当update insert dxlb
时sfjr中 是 否
是我触发写入的


但是 这导致我 修改sfjr 保存不进去

是否能根据表中的某个字段进行触发呢?
或者有什么更高明的方法望赐教!! 
[/Quote]

trigger只有表级和行级的,没有字段级别的

但是行级trigger的强大功能,足可个满足你的需求,

你建立before的trigger,这样就可以通过new和old的判断来实现你的功能,

如果要修改值,只需要用:new.fieldname=xxxx的方式赋值就可以了,
同时可以用:old.fieldname=XXXX来进行你的逻辑判断。
zcs_1 2009-09-27
  • 打赏
  • 举报
回复
用BEFORE UPDATE ON TABLE试试。
小灰狼W 2009-09-27
  • 打赏
  • 举报
回复
create or replace trigger trgname
before insert or update of colname
on tabname
for each row
begin
if inserting then
if ... then :new.colname='xxx';
end if;
end if;
if upd....

end trgname;

用行级before触发器
直接对:new.sfjr值进行修改

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧