我写的触发器如下,但提示有错误,错误提示为: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;请教高手问题出在那里?解决立即给分!

解决方案 »

  1.   

    lz你的sql里面没有'RIGHT'估计是某个地方拼写有问题吧
      

  2.   

    我知道提示里告诉我没有'right',但奇怪字符指哪些呢?
    我检查了好几遍,不知道哪些字符不符合!
      

  3.   

    我怀疑的有两点,请大家帮忙确认一下:
    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)语法错误?
      

  4.   

    没有人帮忙吗?
    提示错误是由于:new.IDS造成的?
    请教两个表的关键字IDS是否重复?