求助:为什么我的这个触发器中的:old,:new不起作用? 表TMP 和 TMP1 中有字段caseid,而且有很多相同的值 更新表TMP的时候,找表TMP1中caseid相同的 并更新其name字段; 看看这个触发器: CREATE OR REPLACE TRIGGER TRIGGER1 AFTER UPDATE ON TMP REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW BEGIN update tmp1 set name=:new.name where caseid=:old.caseid; END; update tmp的时候没什么效果(update 的那条caseid 的值在两个表都一样) 如果不要where caseid=:old.caseid就可以更新,当然不符合要求, 似乎找不到caseid相同的数据,但是我查看了的确有很多一样的 怎么办?是不是有什么约束啊?
你在UPDATE TMP表的时候有没有给WHERE caseid=?呢?
:NEW :OLD只能对修改后的值有效
是不是caseid的值最后有空格? 类型char 和varchar2
CREATE OR REPLACE TRIGGER TRIGGER1 before UPDATE ON TMP REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW BEGIN update tmp1 set name=:new.name where caseid=:old.caseid; exception when others then raise_application_error(-20000,'更新不成功'); END; /
表TMP 和 TMP1 中有字段caseid,而且有很多相同的值
更新表TMP的时候,找表TMP1中caseid相同的 并更新其name字段;
看看这个触发器:
CREATE OR REPLACE TRIGGER TRIGGER1
AFTER UPDATE ON TMP
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
update tmp1 set name=:new.name where caseid=:old.caseid;
END;
update tmp的时候没什么效果(update 的那条caseid 的值在两个表都一样)
如果不要where caseid=:old.caseid就可以更新,当然不符合要求,
似乎找不到caseid相同的数据,但是我查看了的确有很多一样的
怎么办?是不是有什么约束啊?
before UPDATE ON TMP
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
update tmp1 set name=:new.name where caseid=:old.caseid;
exception
when others then
raise_application_error(-20000,'更新不成功');
END;
/