首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:超过了递归SQL级别的最大数量(50)

错误:超过了递归SQL级别的最大数量(50)
EN

Stack Overflow用户
提问于 2013-12-29 23:01:21
回答 1查看 2.1K关注 0票数 0

我想加强诚信,这样一个人一天不能借一本书超过一次。表&触发器编译时没有错误,但是当你尝试插入时,我得到了上面的错误。我修不好它。语法:

代码语言:javascript
运行
复制
create or replace trigger chk_DateL
for insert or update on lending
COMPOUND TRIGGER
--declare
L_Date number(1);
avail varchar2(10);
subtype copy_booksRec is lending%ROWTYPE;
type copied_bks is table of copy_booksRec;
cbks copied_bks := copied_bks();

after each row is 
begin
  cbks.extend;
  cbks(cbks.last).cb_num := :new.cb_num;
  cbks(cbks.last).sb_num := :new.sb_num;
end after each row;

after statement is
begin
  for i in cbks.first .. cbks.last loop
    select loancode into avail from copy_books where num = cbks(i).cb_num;
    select count(date_L) into L_Date from lending where sb_num = cbks(i).sb_num and date_L = cbks(i).date_L;
      if (L_Date = 0) then
        insert into Lending values (cbks(i).cb_num, cbks(i).sb_num, cbks(i).date_L);
        update copy_books set loancode = 'Not' where num = cbks(i).cb_num;
--        cbks(i).date_L := cbks(i).date_L;
    else
      dbms_output.put_line('You can only make ONE LOAN in a day! You have already loaned a book on ' || L_Date);
      cbks.delete;
    end if;
  end loop;
  end after statement;
end chk_DateL;
/
show errors
EN

回答 1

Stack Overflow用户

发布于 2013-12-30 01:07:41

你的循环

代码语言:javascript
运行
复制
FORALL i IN cbks.first .. cbks.last
    insert into lending values cbks(i);

插入到lending表中,这会导致触发器再次执行。因此,触发器自身堆叠,直到达到50个级别,然后oracle通过抛出错误来停止这一过程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20826458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档