极其离奇的问题,大家近来看看,解决了100分相送!!
waxle 2004-08-14 02:46:54 救命啊,触发器中是否可以使用循环结构??
这是我用循环结构写的触发器。
CREATE OR REPLACE TRIGGER UPDATERESULTD AFTER INSERT ON RESULTR
FOR EACH ROW
DECLARE
LOOP1 INTEGER;
SECNODE VARCHAR2(10);
RATIODR NUMBER(8,3);
BEGIN
SELECT COUNT(*) INTO LOOP1 FROM RELATION_DR WHERE FIRNODE=:NEW.FIRNODE;
FOR I IN 1..LOOP1 LOOP
SELECT SECNODE INTO SECNODE FROM ((SELECT SECNODE FROM RELATION_DR WHERE FIRNODE=:NEW.FIRNODE AND ROWNUM<(I+1)) MINUS (SELECT SECNODE FROM RELATION_DR WHERE FIRNODE=:NEW.FIRNODE AND ROWNUM<I)) WHERE ROWNUM=1;
SELECT RATIODR INTO RATIODR FROM ((SELECT RATIODR FROM RELATION_DR WHERE FIRNODE=:NEW.FIRNODE AND ROWNUM<(I+1)) MINUS (SELECT RATIODR FROM RELATION_DR WHERE FIRNODE=:NEW.FIRNODE AND ROWNUM<I)) WHERE ROWNUM=1;
INSERT INTO RESULTD VALUES(:NEW.YR,SECNODE,:NEW.WATER_QR*RATIODR);
END LOOP;
END;
/
这是相关的三个表建表的语句
CREATE TABLE RESULTR(YR CHAR(10),FIRNODE CHAR(10),WATER_QR NUMBER(8,3));
CREATE TABLE RESULTD(YR CHAR(10),SECNODE CHAR(10),WATER_QD NUMBER(8,3));
CREATE TABLE RELATION_DR(FIRNODE CHAR(10),SECNODE CHAR(10),RATIODR NUMBER(5,2));
但是在使用的时候有些插入出错了,出错信息如下:
ERROR 位于第 1 行:
ORA-01403: 未找到数据
ORA-06512: 在"LRH.UPDATERESULTD", line 9
ORA-04088: 触发器 'LRH.UPDATERESULTD' 执行过程中出错
大虾们救命啊,是不是不能用循环结构,能不能提示一下或帮忙改一下,谢谢!!!
我的三个表格的数据吧。
第一个关系表:
SQL> select * from relation_dr;
FIRNODE SECNODE RATIODR
---------- ---------- ----------
HETIAN P01 .6
HETIAN P02 .3
HETIAN P03 .1
AKESHU P04 .5
AKESHU P05 .3
AKESHU P06 .05
AKESHU P07 .15
NONGYISHI P08 .25
NONGYISHI P09 .35
NONGYISHI P10 .15
NONGYISHI P11 .25
FIRNODE SECNODE RATIODR
---------- ---------- ----------
KUELE P12 1
然后我插入以下语句时出错,好像只有HETIAN和AKESHU可以插入2条或以上数据,其他都不可以了,似乎这两个值已经注册了一样,不知道什么原因。
SQL> INSERT INTO RESULTR VALUES(2002,'HETIAN',500);
已创建 1 行。
SQL> INSERT INTO RESULTR VALUES(2002,'AKESHU',550);
已创建 1 行。
SQL> INSERT INTO RESULTR VALUES(2002,'NONGYISHI',400);
INSERT INTO RESULTR VALUES(2002,'NONGYISHI',400)
*
ERROR 位于第 1 行:
ORA-01403: 未找到数据
ORA-06512: 在"LRH.UPDATERESULTD", line 9
ORA-04088: 触发器 'LRH.UPDATERESULTD' 执行过程中出错
SQL> INSERT INTO RESULTR VALUES(2002,'KUELE',400);
已创建 1 行。
但是如果把RELATION_DR中NONGYISHI的条数改成1条,即删除3条数据。
如下语句:
SQL> delete from relation_dr where secnode IN ('P09','P10','P11');
已删除3行。
SQL> INSERT INTO RESULTR VALUES(2002,'NONGYISHI',400);
已创建 1 行。
即插入了数值。好像要加入其他的FIRNODE也是一样的,在RELATION_D不能超过一条数据,否则出错。不知道具体什么原因,大虾们救命啊。
而且非常奇怪的是当我重新建一个触发器,更换表名之后也是只有HETIAN和AKESHU这两项在RELATION_DR表能超过两行的数据,其他都不可以,好像出现触发器的系统记忆功能一样,不知道怎么回事啊,感觉非常离奇。敬请哪位大虾相告,多谢多谢!!
解决必定加分100。