create or replace trigger MoOpList_in_up_row_trigger
Before insert or update --After Before
on ModelOperateList
for each row
declare
crmModuleRow crmModule%rowtype;
operateRow operate%rowtype;
begin
select * into crmModuleRow from crmModule where crmModuleId=:new.crmModuleId;
select * into operateRow from operate where operateid=:new.operateid;
update ModelOperateList set mooplistname=crmModuleRow.crmModuleNameEN||'_'||operateRow.operateName
where mooplistid=:new.mooplistid;
dbms_output.put_line(crmModuleRow.crmModuleNameEN||'_'||operateRow.operateName);
end;
我想修改刚插入或刚更新的那条数据,
需求是 ModelOperateList表的 mooplistname 字段是 crmModule 和 operate 两个表的名称字段拼接而成的,测试 新增 数据是新增进去了,mooplistname 字段没得到拼接的值(dbms_output输出正常),
修改报错。请教各位前辈,有办法能达到我要的需求吗?
update ModelOperateList set mooplistname=crmModuleRow.crmModuleNameEN||'_'||operateRow.operateName
where mooplistid=:new.mooplistid;==>
:new.mooplistname:=crmModuleRow.crmModuleNameEN||'_'||operateRow.operateName;
你从这里update 但是不改变:new的值 update的数据又没有提交 所以你的update是无效的,值被冲掉了
触发器里又不支持commit操作 所以 你可以如楼上所说 把update语句换成给:new赋值
也可以在after中做update(这个我没有测试,不确定可不可行)
你的运行应该报错了 发生了变异表事件update ModelOperateList set mooplistname=crmModuleRow.crmModuleNameEN||'_'||operateRow.operateName
where mooplistid=:new.mooplistid;改成
:new.mooplistname=crmModuleRow.crmModuleNameEN||'_'||operateRow.operateName ;