2015-09-07 107 views
0

我想通过使用嵌套循环遍历记录,想法是将记录数组中的所有记录与下一个元素进行比较以检查日期交集。 我的问题是填写下面的代码来代替XXXXXXXX。如前所述,这个想法是开始比较第一个记录和其他所有记录(使用第二个循环)。提前致谢。嵌套For循环迭代PLSQL中的记录

FOR i IN rx_records.first.. rx_records.last 
     LOOP 
     FOR j IN XXXXXXXX.. rx_records.last 
     LOOP 
     IF rx_records(i).eff_startdate <= rx_records(j).eff_enddate AND rx_records(i).eff_enddate >= rx_records(j).eff_startdate 
     THEN 
     DBMS_OUTPUT.PUT_LINE('00'); 
     ELSE 
     dbms_output.Put_line('11'); 


     END IF; 

     END LOOP; 

    END LOOP; 

END;

+0

怎么样'我+ 1' –

+0

您可以简单地设置有rx_records.first到将第一行与开头的第一行进行比较,或将rx_records.first + 1与第一行进行比较以跳过比较。但是,这种比较的表现将会非常糟糕。 为什么你需要比较这些值?也许有更好的方法来比较它们? – AndrewMcCoist

+0

如果您在表格中有一组行,并且您想要检查重叠值,则有比这更简单的方法。 –

回答

1

我想下面的例子应该符合你的要求(虽然,在表上这样的操作就表现确实无效):

IF rx_records.COUNT > 1 THEN 
    FOR i IN rx_records.FIRST .. rx_records.LAST 
    LOOP 
     FOR j IN rx_records.FIRST + 1 .. rx_records.LAST 
     LOOP 
      IF rx_records(i).eff_startdate <= rx_records(j).eff_enddate AND rx_records(i).eff_enddate >= rx_records(j).eff_startdate THEN 
       DBMS_OUTPUT.PUT_LINE('00'); 
      ELSE 
       DBMS_OUTPUT.PUT_LINE('11'); 
      END IF; 
     END LOOP; 
    END LOOP; 
ELSIF rx_records.COUNT = 1 THEN 
    DBMS_OUTPUT.PUT_LINE('There''s only 1 row in the table. - nothing to compare it to'); 
ELSE 
    DBMS_OUTPUT.PUT_LINE('There are no rows in the table.'); 
END IF; 
+0

第一行显示“IF rx_records.COUNT> 1 THEN” – Arnab