oracle触发器where条件失效

snjcaorui 2011-08-11 09:50:22
Create Or Replace Trigger Hvm_cfg_normalUpdateAfter
after insert or update or delete
on hvm_cfg_normal
for each row
declare
deviceNum number; --判断装置表(device)中是否存在监测装置的个数
begin
if inserting then --新增
insert into test values('','','',:new.objid);
update Hvm_ObjAllSts o set o.devexist=1 where o.sbbm=:new.objid;
elsif deleting then --删除
select count(0) into deviceNum from Hvm_ObjAllSts o where o.sbbm=:old.objid;
if deviceNum<0 then
update Hvm_ObjAllSts o set o.devexist=0 where o.sbbm=:old.objid;
end if;
elsif updating then
select count(0) into deviceNum from Hvm_ObjAllSts o where o.sbbm=:old.objid;
if :old.objid!=:new.objid and deviceNum<0 then
update Hvm_ObjAllSts o set o.devexist=0 where o.sbbm=:old.objid;
update Hvm_ObjAllSts o set o.devexist=1 where o.sbbm=:new.objid;
end if;
end if;
end;

这个是我的触发器,当hvm_cfg_normal表有新增的时候 修改 表Hvm_ObjAllSts 的字段devexist为1。不能修改
insert into test values('','','',:new.objid);
这个语句测试时候得到了objid,当我新增一条记录时在test表中却是看到了这个objid,但是
update Hvm_ObjAllSts o set o.devexist=1 where o.sbbm=:new.objid;
这个语句不能修改Hvm_ObjAllSts表中的devexist。大家帮我看看是什么原因了。谢谢各位了……
...全文
394 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
snjcaorui 2011-08-11
  • 打赏
  • 举报
回复
好了 原来是 数据有空格,把空格去掉就好了,

update Hvm_ObjAllSts o set o.devexist=1 where trim(o.sbbm)=trim(:new.objid);
snjcaorui 2011-08-11
  • 打赏
  • 举报
回复
报错了:

TRIGGER SYSADMIN.HVM_CFG_NORMALUPDATEAFTER 编译错误

错误:PLS-00103: 出现符号 "OLD"在需要下列之一时:
:= . ( @ % ;
行:10
文本:referencing old as new_value

错误:提示: Variable 'sbbm' 已被声明但从来没有被用于 'Hvm_cfg_normalUpdateAfter'
行:6
文本:sbbm CHAR(32);

错误:提示: Variable 'stationid' 已被声明但从来没有被用于 'Hvm_cfg_normalUpdateAfter'
行:7
文本:stationid CHAR(32);
snjcaorui 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ulihss 的回复:]
先定义
referencing old as old_value
然后把
update Hvm_ObjAllSts o set o.devexist=0 where o.sbbm=:old.objid;
改成
update Hvm_ObjAllSts o set o.devexist=0 where o.sbbm=:old_value.objid;
[/Quote]

试试啊
Kobayashi 2011-08-11
  • 打赏
  • 举报
回复
先定义
referencing old as old_value
然后把
update Hvm_ObjAllSts o set o.devexist=0 where o.sbbm=:old.objid;
改成
update Hvm_ObjAllSts o set o.devexist=0 where o.sbbm=:old_value.objid;

17,137

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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