
create or replace trigger C_PRIVILEGE_SYN_TRIG
after insert or delete or update on mes_frame_role_user
for each row
declare
-- local variables here
newuser varchar2(20)
newrole varchar2(20)
olduser varchar2(20)
begin
newuser := :new.emp_no
newrole := :new.roleid
olduser := :old.emp_no
case
when inserting then
--insert the new authority to the old system
insert into c_privilege(
select distinct newuser, '', mf.function, 2, mf.module
from mes_frame_role_authority ra
inner join mes_frame_menu m on ra.menuid = m.id
inner join mes_frame_menu m2 on m.tonode = m2.id
inner join c_module_fun_t mf on m.caption = mf.function and m2.caption = mf.module
where ra.roleid = newrole)
when updating then
delete c_privilege where emp = newuser
insert into c_privilege(
select distinct newuser, '', mf.function, 2, mf.module
from mes_frame_role_authority ra
inner join mes_frame_menu m on ra.menuid = m.id
inner join mes_frame_menu m2 on m.tonode = m2.id
inner join c_module_fun_t mf on m.caption = mf.function and m2.caption = mf.module
where ra.roleid = newrole)
when deleting then
delete c_privilege where emp = olduser
end case
end C_PRIVILEGE_SYN_TRIG
因为LZ没有贴出的触发器代码,只好估测一下:很可能是触发器中没有判断有效的修改数据记录数,比如使用一个变量从inserte或deleted中取出一个数据来判断是否符合要求。在update一条没有的数据时,由于inserted 或 deleted 中没有任何记录,从而变量的值为null,导致后面错误判断报错。
建议update触发器的一开始增加下面一行
if not exists(select * from inserted)
return
呵呵 楼主刚开始接触触发器吧没有updated这个表 在sql中 更新的机制是先删除 再插入
帮你写个条件吧 其他的你应该能搞定
不明白可以随时问我 希望解决了楼主的问题
if exists(select 1 from inserted where weight >1000) and
exists(select 1 from deleted )
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)