第 1 行出现错误:
ORA-00036: 超过递归 SQL 级别的最大值 50
ORA-06512: 在 "SCOTT.TRIGGER2", line 2
ORA-04088: 触发器 'SCOTT.TRIGGER2' 执行过程中出错
ORA-06512: 在 "SCOTT.TRIGGER2", line 2
ORA-04088: 触发器 'SCOTT.TRIGGER2' 执行过程中出错
ORA-06512: 在 "SCOTT.TRIGGER2", line 2
ORA-04088: 触发器 'SCOTT.TRIGGER2' 执行过程中出错
...为什么
CREATE OR REPLACE TRIGGER bi_control_cno 
  BEFORE INSERT ON Client 
  BEGIN 
    INSERT INTO Client (cilentNo, fName, IName, telNo, prefType, maxRent, staffNo) VALUES (sequence.nextval, :NEW.fName, :NEW.IName, :NEW.telNo, :NEW.prefType, :NEW.maxRent, :NEW.staffNo); 
END; 

这样会造成insert然后再insert的死循环呢?
我要怎样改呢?

解决方案 »

  1.   

    你对表Client建的insert触发器,而触发器的内容又是向表Client中insert数据,所以这个触发器一直在被递归调用。这个触发器要达到什么目的,是不是完成表Client的字段cilentNo的自增长(从序列取数据)?
      

  2.   

    如果这个触发器是要完成表Client的字段cilentNo的自增长(从序列取数据),如下:Create Or Replace Trigger bi_control_cno 
    Before Insert On Client 
    For Each Row
    Begin
         Select sequence.Nextval Into :New.cilentNo From dual;
    End;
      

  3.   

    最好的方式就是不要用trigger,这可不是什么好东东
      

  4.   

    这个trigger的意思是控制用户,当用户新建一条数据的时候,trigger把这个新的数据的主键的值变成序列的值。
      

  5.   

    不需要trigger,你在你的程序里直接写上:INSERT INTO Client (cilentNo, fName, IName, telNo, prefType, maxRent, staffNo) VALUES (sequence.nextval, xxx, xxx, xxx....)
    然后提交运行这个SQL就可以了,用不上trigger的
      

  6.   


    这个是 表级trigger的常见错误了。递归调用了。