Oracle 11g是否针对阵列优化For循环?

时间:2012-08-13 21:14:23

标签: oracle for-loop plsql oracle11g

Oracle 11g是否针对阵列优化For循环? 如果是这样,它是如何做到的?

例:
以下代码是否将lt_some_array(i)的每个实例视为指向索引i中数组中记录的指针?或者,它每次都会查找吗?

FOR i IN lt_some_array.FIRST..lt_some_array.LAST
LOOP
   field1 := lt_some_array(i).field1;
   field2 := lt_some_array(i).field2;
   field3 := lt_some_array(i).field3;
   field4 := lt_some_array(i).field4;
   field5 := lt_some_array(i).field5;
   field6 := lt_some_array(i).field6;
   do_something();
END LOOP;

澄清:
编译器是否将其视为以下内容(其中lr_some_row是指针而不是副本):

FOR i IN lt_some_array.FIRST..lt_some_array.LAST
LOOP
   lr_some_row := lt_some_array(i);
   field1 := lr_some_row.field1;
   field2 := lr_some_row.field2;
   field3 := lr_some_row.field3;
   field4 := lr_some_row.field4;
   field5 := lr_some_row.field5;
   field6 := lr_some_row.field6;
   do_something();
END LOOP;

1 个答案:

答案 0 :(得分:1)

是的,Oracle 11g会为您执行优化。

该功能在10g中添加。请参阅演示文稿"PL/SQL Performance - Debunking the Myths"的第60页。它包含一个与您的代码非常相似的示例。手动优化在9iR2中几乎快了两倍,但在10gR1中根本没有帮助。

虽然我不能告诉你Oracle如何做到这一点。据我所知,关于Oracle如何工作的详细程度并不存在。