我写的触发器如下,但提示有错误,错误提示为:PLS-00561: 字元集参数 'RIGHT'的值不符!CREATE OR REPLACE TRIGGER DBAUSER.TUPDATE_TSURPLUS
BEFORE DELETE OR INSERT OR UPDATE
ON DBAUSER.T_OVERTIME
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
TMPVAR1 NUMBER;
TMPVAR2 NUMBER;
BEGIN
TMPVAR1:=0;
TMPVAR2:=0;
IF INSERTING THEN
SELECT COUNT(*) INTO TMPVAR1 FROM T_TOTALSURPLUS WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:NEW.VRTMSORT;
IF TMPVAR1>0 THEN
UPDATE T_TOTALSURPLUS SET T_TOTALSURPLUS.SRPLS_HR=(T_TOTALSURPLUS.SRPLS_HR+:NEW.AHR) WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:NEW.VRTMSORT;
ELSIF TMPVAR1=0 THEN
INSERT INTO T_TOTALSURPLUS(IDS,VRTM_SORT,SRPLS_HR) VALUES(:NEW.IDS,:NEW.VRTMSORT,:NEW.AHR);
END IF;
ELSIF UPDATING THEN
IF :NEW.VRTMSORT=:OLD.VRTMSORT THEN
IF :NEW.AHR<>:OLD.AHR THEN
UPDATE T_TOTALSURPLUS SET T_TOTALSURPLUS.SRPLS_HR=(T_TOTALSURPLUS.SRPLS_HR-:OLD.AHR+:NEW.AHR) WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:NEW.VRTMSORT;
END IF;
ELSIF :NEW.VRTMSORT<>:OLD.VRTMSORT THEN
SELECT COUNT(*) INTO TMPVAR2 FROM T_TOTALSURPLUS WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:NEW.VRTMSORT;
IF TMPVAR2>0 THEN
UPDATE T_TOTALSURPLUS SET T_TOTALSURPLUS.SRPLS_HR=(T_TOTALSURPLUS.SRPLS_HR-:NEW.AHR) WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:OLD.VRTMSORT;
UPDATE T_TOTALSURPLUS SET T_TOTALSURPLUS.SRPLS_HR=(T_TOTALSURPLUS.SRPLS_HR+:NEW.AHR) WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:NEW.VRTMSORT;
ELSIF TMPVAR2=0 THEN
UPDATE T_TOTALSURPLUS SET T_TOTALSURPLUS.SRPLS_HR=(T_TOTALSURPLUS.SRPLS_HR-:NEW.AHR) WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:OLD.VRTMSORT;
INSERT INTO T_TOTALSURPLUS(IDS,VRTM_SORT,SRPLS_HR) VALUES(:NEW.IDS,NEW.VRTMSORT,:NEW.AHR);
END IF;
END IF;
ELSIF DELETING THEN
UPDATE T_TOTALSURPLUS SET T_TOTALSURPLUS.SRPLS_HR=(T_TOTALSURPLUS.SRPLS_HR-:NEW.AHR) WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:NEW.VRTMSORT;
END IF;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END TUpdate_TSURPLUS;请教高手问题出在那里?解决立即给分!
BEFORE DELETE OR INSERT OR UPDATE
ON DBAUSER.T_OVERTIME
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
TMPVAR1 NUMBER;
TMPVAR2 NUMBER;
BEGIN
TMPVAR1:=0;
TMPVAR2:=0;
IF INSERTING THEN
SELECT COUNT(*) INTO TMPVAR1 FROM T_TOTALSURPLUS WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:NEW.VRTMSORT;
IF TMPVAR1>0 THEN
UPDATE T_TOTALSURPLUS SET T_TOTALSURPLUS.SRPLS_HR=(T_TOTALSURPLUS.SRPLS_HR+:NEW.AHR) WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:NEW.VRTMSORT;
ELSIF TMPVAR1=0 THEN
INSERT INTO T_TOTALSURPLUS(IDS,VRTM_SORT,SRPLS_HR) VALUES(:NEW.IDS,:NEW.VRTMSORT,:NEW.AHR);
END IF;
ELSIF UPDATING THEN
IF :NEW.VRTMSORT=:OLD.VRTMSORT THEN
IF :NEW.AHR<>:OLD.AHR THEN
UPDATE T_TOTALSURPLUS SET T_TOTALSURPLUS.SRPLS_HR=(T_TOTALSURPLUS.SRPLS_HR-:OLD.AHR+:NEW.AHR) WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:NEW.VRTMSORT;
END IF;
ELSIF :NEW.VRTMSORT<>:OLD.VRTMSORT THEN
SELECT COUNT(*) INTO TMPVAR2 FROM T_TOTALSURPLUS WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:NEW.VRTMSORT;
IF TMPVAR2>0 THEN
UPDATE T_TOTALSURPLUS SET T_TOTALSURPLUS.SRPLS_HR=(T_TOTALSURPLUS.SRPLS_HR-:NEW.AHR) WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:OLD.VRTMSORT;
UPDATE T_TOTALSURPLUS SET T_TOTALSURPLUS.SRPLS_HR=(T_TOTALSURPLUS.SRPLS_HR+:NEW.AHR) WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:NEW.VRTMSORT;
ELSIF TMPVAR2=0 THEN
UPDATE T_TOTALSURPLUS SET T_TOTALSURPLUS.SRPLS_HR=(T_TOTALSURPLUS.SRPLS_HR-:NEW.AHR) WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:OLD.VRTMSORT;
INSERT INTO T_TOTALSURPLUS(IDS,VRTM_SORT,SRPLS_HR) VALUES(:NEW.IDS,NEW.VRTMSORT,:NEW.AHR);
END IF;
END IF;
ELSIF DELETING THEN
UPDATE T_TOTALSURPLUS SET T_TOTALSURPLUS.SRPLS_HR=(T_TOTALSURPLUS.SRPLS_HR-:NEW.AHR) WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:NEW.VRTMSORT;
END IF;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END TUpdate_TSURPLUS;请教高手问题出在那里?解决立即给分!
我检查了好几遍,不知道哪些字符不符合!
1.在有触发器的表和触发后插入或删除的表里有相同的字段IDS,不知这样可以不?
2.当有触发器的标的一个字段改变后,在表T_TOTALSURPLUS里的一个字段的值发生变化,我是这样写的:
UPDATE T_TOTALSURPLUS SET T_TOTALSURPLUS.SRPLS_HR=(T_TOTALSURPLUS.SRPLS_HR-:OLD.AHR+:NEW.AHR) WHERE T_TOTALSURPLUS.IDS=:NEW.IDS AND T_TOTALSURPLUS.VRTM_SORT=:NEW.VRTMSORT;
是否SET T_TOTALSURPLUS.SRPLS_HR=(T_TOTALSURPLUS.SRPLS_HR-:OLD.AHR+:NEW.AHR)语法错误?
提示错误是由于:new.IDS造成的?
请教两个表的关键字IDS是否重复?