1.
删除DEPT_FLOW_MGR这个表的某条记录的时:
规则如下:
1)
分别获得删除记录的OWN_DEPT_ID和CUSTOMER_DEPT_ID
2)
删除FLOW_STATUS_MGR表中的OWNUSERID(提交人用户id)和CUSUSERID(被提交人用户id)对应的主部门id(MAINDEPTID)分别是OWN_DEPT_ID(提交部门id)和CUSTOMER_DEPT_ID(被提交部门id)并且ADDTYPEID=1的记录。
3)
用户和用户的主部门对应关系在sys_user表中。用户id字段为id,主部门id字段为MAINDEPTID。
CREATE OR REPLACE TRIGGER DELEDEPT_FLOW_MGR
before DELETE ON DEPT_FLOW_MGR
FOR EACH ROW
declare
cursor o_ownuserid is
select s.id as ownuserid
from sys_user s
where s.maindeptid = old.own_dept_id;
cursor c_cususerid is
select m.id as cususerid
from sys_user m
where m.maindeptid = old.customer_dept_id;
begin
<>
for o_record in o_ownuserid loop
<>
for c_record in c_cususerid loop
delete from flow_status_mgr a
where a.ownuserid=o_record.ownuserid
and a.cususerid=c_record.cususerid
and a.addtypeid=1;
end loop inner;
end loop outer;
END;
求牛人解答
问题补充
我知道哪里错了,真汗。。。丢人
问题补充
3.
当sys_user表中的用户被注销时,即用户表的isactive字段被从1修改到0时:
规则如下:
1)
删除FLOW_STATUS_MGR中OWN_DEPT_ID或CUSTOMER_DEPT_ID等于此用户id的记录
CREATE OR REPLACE TRIGGER MODIFYSYSUSER
AFTER UPDATE OF ISAGENT ON SYS_USER
FOR EACH ROW
BEGIN
if old.isactive =1 and new.isactive=0 then
delete from
flow_status_mgr where own_dept_id =: new.id or customer_dept_id =:
new.id;
end if;
END;
这个触发器有问题,为什么
问题补充
我知道原因了
------------------------------------------------------------------------------------------------------------------
问题补充:
小卓SUN 写道
因为你没定义 old as old row啊。。。
貌似我把if改成when 然后放到begin上面就可以用了
------------------------------------------------------------------------------------------------------------------
问题补充:
小卓SUN 写道
引用
貌似我把if改成when 然后放到begin上面就可以用了
执行语句放在begin前面?? 怎么可能啊。。。
话说我没理解你的数据库设计
如果一个user向一个客户提交了多个纪录
又如果一个user向多个客户都提交了纪录
怎么会因为删除了其中一条记录就删除user对应的department id?
那剩下的纪录对应什么???
而且你删除了整个depart, 那同部门的其他人员对应谁??
你成功的原因也许是只用1 2条记录做的测试
不论从编程规范还是逻辑设计,我都觉得有点问题哦
create or replace
TRIGGER MODIFYSYSUSER
AFTER UPDATE OF ISACTIVE ON SYS_USER
FOR EACH ROW
WHEN (old.isactive=1and new.isactive=0)
BEGIN
delete from flow_status_mgr t where t.ownuserid
= :new.id or t.cususerid = :new.id;
END;
把when放在begin上面就可以了,对了,要是用if怎么用啊,怎么定义啊
------解决方案--------------------------------------------------------
因为你没定义 old as old row啊。IndexOutOfBoundsException。。
------解决方案--------------------------------------------------------
引用
貌似我把if改成when 然后放到begin上面就可以用了
执行语句放在begin前面?? 怎么可能啊。。。
话说我没理解你的数据库设计
如果一个user向一个客户提交了多个纪录
又如果一个user向多个客户都提交了纪录
怎么会因为删除了其中一条记录就删除user对应的department id?
那剩下的纪录对应什么???
而且你删除了整个depart, 那同部门的其他人员对应谁??
你成功的原因也许是只用1 2条记录做的测试
不论从编程规范还是逻辑设计,我都觉得有点问题哦![帮忙看下这个oracle触发器,在select后面的where语句有有关问题,但不知道什么有关问题 帮忙看下这个oracle触发器,在select后面的where语句有有关问题,但不知道什么有关问题]()
------解决方案--------------------------------------------------------
引用
create or replace
TRIGGER MODIFYSYSUSER
AFTER UPDATE OF ISACTIVE ON SYS_USER
FOR EACH ROW
WHEN (old.isactive=1and new.isactive=0)
BEGIN
delete from flow_status_mgr t where t.ownuserid
= :new.id or t.cususerid = :new.id;
END;
把when放在begin上面就可以了,对了,要是用if怎么用啊,怎么定义啊
我会写成
TRIGGER MODIFYSYSUSER AFTER UPDATE OF ISACTIVE ON SYS_USER FOR EACH ROW BEGIN IF(old.isactive = land AND new.isactive=0) DELETE FROM ... ...END IF;END;
你的代码写的我太无语了
------解决方案--------------------------------------------------------
中间 and我写了2次 笔误请忽略
------解决方案--------------------------------------------------------
可参考:
Oracle查询语句中的select * from tb1, tb2 where
tb1.id=tb2(id+)这里的(id+)起什么作用啊解决方案 http://www.myexception.cn/c-sharp/64710.html
另这里的部分程序错误异常BUG解决方案
%D%A
java环境变量设置|http://www.myexception.cn/java-other/172921.html
%D%A
oracle存储过程|http://www.myexception.cn/oracle-develop/177537.html
websphere7.0数据源配置有关问题
<!-- 正文结束 -->
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22971147/viewspace-1116891/
,如需转载,请注明出处,否则将追究法律责任。