~~~~~~~~一个完整的触发器例子,需要高手帮忙改错~~~~帮帮忙啊~~~~~~

linxi27 2007-01-16 12:16:37
我写的触发器如下,但提示有错误,错误提示为:

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;



请教高手问题出在那里?解决立即给分!
...全文
226 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
linxi27 2007-01-18
  • 打赏
  • 举报
回复
自己搞定,現在開帖給分!
wiler 2007-01-16
  • 打赏
  • 举报
回复
估计其中有奇怪字符
linxi27 2007-01-16
  • 打赏
  • 举报
回复
没有人帮忙吗?
提示错误是由于:new.IDS造成的?
请教两个表的关键字IDS是否重复?
linxi27 2007-01-16
  • 打赏
  • 举报
回复
我怀疑的有两点,请大家帮忙确认一下:
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)语法错误?
tgm78 2007-01-16
  • 打赏
  • 举报
回复
lz坦白的说,哦没有看出来
linxi27 2007-01-16
  • 打赏
  • 举报
回复
我知道提示里告诉我没有'right',但奇怪字符指哪些呢?
我检查了好几遍,不知道哪些字符不符合!
tgm78 2007-01-16
  • 打赏
  • 举报
回复
lz你的sql里面没有'RIGHT'

估计是某个地方拼写有问题吧

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧