ORACLE触发器编译通不过?
CREATE OR REPLACE TRIGGER UPCOMRTU_WRTUYCNUM BEFORE UPDATE OF WRTUYCNUM ON COMRTU
FOR EACH ROW
DECLARE
COUNT COMYC.WRTUNUM%TYPE;
RTUNO COMYC.YC_NO%TYPE;
NEWCOUNT NUMBER(5);
OLDCOUNT NUMBER(5);
BEGIN
RTUNO := :NEW.WRTUNUM;
OLDCOUNT := :OLD.WRTUYCNUM;
NEWCOUNT := :NEW.WRTUYCNUM;
IF OLDCOUNT > NEWCOUNT THEN
DELETE FROM COMYC WHERE COMYC.YC_NO >= NEWCOUNT AND WRTUNUM = RTUNO;
ELSIF OLDCOUNT < NEWCOUNT THEN
COUNT := OLDCOUNT;
WHILE COUNT < NEWCOUNT LOOP
INSERT INTO COMYC VALUES(RTUNO, COUNT, 0, 0, 0, 0, 1.0, 0.0, 0, 999999.0, 0.0, 1);
COUNT := COUNT+1;
END LOOP;
END IF;
END UPCOMRTU_WRTUYCNUM;
我把WHILE LOOP...END LOOP去掉就能编译通过,难道触发器中不能用WHILE循环?
问题点数:30、回复次数:15Top
1 楼chfhy(春风化雨)回复于 2001-08-01 15:04:24 得分 0
急呀!Top
2 楼feng_zi(二度程序员)回复于 2001-08-01 15:34:07 得分 0
可以呀,看程序我没看出什么错来,你能给出所报的error吗?
在触发器中可用while循环,这样的触发器我做过Top
3 楼chfhy(春风化雨)回复于 2001-08-01 15:38:08 得分 0
ERROR就是:警告: 创建的触发器带有编译错误,
feng_zi(风子)贴一个例子出来吧 Top
4 楼feng_zi(二度程序员)回复于 2001-08-01 15:50:14 得分 10
现在做一个,有点简单
create trigger akai_xiao
before update on akai
for each row
declare
i integer;
begin
i:=1;
while i<10 loop
insert into xiao(akai) values(1);
i:=i+1;
end loop;
end;Top
5 楼feng_zi(二度程序员)回复于 2001-08-01 15:51:22 得分 0
我的QQ号是1434341,讨论如何?Top
6 楼chfhy(春风化雨)回复于 2001-08-01 16:10:46 得分 0
feng_zi(风子) 很想和你讨论,但我现在上不去QQ,如果你愿意先去http://www.csdn.net/expert/topic/218/218981.shtm领20分吧Top
7 楼chfhy(春风化雨)回复于 2001-08-01 16:45:20 得分 0
还有谁知道?Top
8 楼shenyimin(shenyimin)回复于 2001-08-01 17:01:52 得分 15
用show err看看出错的代码在哪里,再进一步修正。建议用一些好使的开发工具如rapidSQL,单纯用sql*plus这把钝刀做开发效率太低。Top
9 楼chfhy(春风化雨)回复于 2001-08-01 17:06:19 得分 0
rapidSQL那有下载?Top
10 楼feng_zi(二度程序员)回复于 2001-08-01 17:16:32 得分 0
我有不过它太大了,Toad只有2MB,你要吗?Top
11 楼chfhy(春风化雨)回复于 2001-08-01 17:29:55 得分 0
MY EMAIL:wangzh18@sohu.com ,谢谢!那个工具好一些?Top
12 楼feng_zi(二度程序员)回复于 2001-08-01 17:42:49 得分 0
你上http://www.5xsoft.com/index.html
好象有rapid sql,我给发toad,发不到你的信箱Top
13 楼chfhy(春风化雨)回复于 2001-08-01 18:02:33 得分 0
为什么发不到呀?rapid sql我也没找到Top
14 楼GreenDragon(绿龙)回复于 2001-08-01 19:32:44 得分 5
这是因为行级触发器不允许对变化表(既触发表)进行读取或修改操作。
要消除该问题,可以利用包和语句级触发器。首先在行级触发器中读取需要的数值付给包中的变量,语句级触发器再从包中的相应变量获取数值进行相关操作。
支持该方法可行的依据是触发器的点火次序。触发器的点火顺序应为:BEFORE语句级触发器-BEFORE行级触发器-AFTER行级触发器-AFTER语句级触发器Top
15 楼chfhy(春风化雨)回复于 2001-08-01 20:10:10 得分 0
问题解决,但不是GreenDragon(绿龙)说的,是COUNT不能用,还有其他问题,谢谢大家!给分! Top




