Oracle 中的嵌套循环无法正常工作(超过最大值)

Nested Loops In Oracle Not Work Correctly (Exceeds the maximum)

我为示例 Table 编写了这两个查询以从“z_exp14_main”插入“z_exp14_resualt”。 第一个查询工作正常(空)但第二个查询在主table(非空)上有due_date,工作不正常! .我认为问题在于循环。
它在截止日期之前开始,甚至超过了截止日期。对于 NOT Nulls,插入必须从今天开始(年和月从 sysdate 开始,日期从 opening_date 开始)并继续直到 due_date

计算 Null DUE_DATES

declare
  i number := 1;
BEGIN
for i in 1..12 loop
  insert into z_exp14_resualt 
  select dep_id,ADD_MONTHS(ADD_MONTHS(opening_date,trunc( months_between (sysdate,opening_date))),i),rate*balance 
  from z_exp14_main
  WHERE due_date IS  null;
end loop;
END;
/

并且对于 Not Null Due_dates

  DECLARE
    diff number;
    x number :=1;
    BEGIN    
    for i in (select * FROM z_exp14_main WHERE due_date IS NOT null) loop    
        diff :=trunc( months_between (sysdate,i.opening_date));
        
            WHILE (ADD_MONTHS(ADD_MONTHS(i.opening_date,diff),x)<i.due_date) LOOP
                insert into z_exp14_resualt 
                select dep_id,ADD_MONTHS(ADD_MONTHS(i.opening_date,diff),x),rate*balance 
                from z_exp14_main WHERE due_date is not null  ;
                x :=x+1;
            end loop;
      end loop;
    end;
    /

主样本日期 (z_exp14_main)

-- DEP_ID DUE_DATE BALANCE RATE OPENING_DATE
-- 20056634 null 283428 10 15-SEP-16
-- 20056637 null 180222 10 07-NOV-14
-- 20056639 null 58741 10 28-AUG-14
-- 40000020 27-NOV-21 5000000 22 31-MAR-14
-- 40000023 23-APR-21 63000000 22 25-AUG-18

问题出在“While”条件下。我更正了,这是最终答案:

DECLARE
    diff number;
    x number ;
    BEGIN    
    for i in (select * FROM z_exp14_main WHERE due_date IS NOT null) loop    
        diff :=trunc( months_between (sysdate,i.opening_date));
        x:=0;
            WHILE (add_months(sysdate,x)<i.due_date) LOOP
                insert into z_exp14_resualt values (i.dep_id,ADD_MONTHS(ADD_MONTHS(i.opening_date,diff),x),(i.rate*i.balance) );
                x :=x+1;
            end loop;
      end loop;
    end;
    /