|
FOR rec IN (SELECT * FROM plch_data)
这里的 rec 相当于自动定义了一个记录类型,这个记录类型的每一个字段对应于 SELECT 语句的每一个列,因为是 SELECT *, 那么这个记录就包含了plch_data所有的列。
l_plch_data (rec.pky) := rec;
这个意思是把右边的记录类型变量rec赋值给左边的l_plch_data这个数组里面的一个元素。这个元素的位置由 rec.pky 的值来确定。如果rec.pky=100, 那么就相当于:
l_plch_data (100) := rec;
把rec放到数组里的第100号元素。
这里就看出了和 bulk collect into的区别。bulk collect into 是不会让你指定存放位置的,而是按顺序从数组的第1,2,3,... 往下填充。
表里面的 pky 这个列的值可能是没有规律的,比如表里存放的是 pky=7, pky=13, ....
bulk collect into 就可能把 pky=7 这条记录放到l_plch_data(1), 把 pky=8 这条记录放到l_plch_data(2), ....此时你如果要在数组里面找一个pky值,你只能按顺序从头找。
但如果你像例子中那样用pky做数组下标,那么你只要有pky值,马上就能找到这个数组元素。
现实中确实bulk collect into更加常用,但是如果你有上述需求,你就得自己构造这个数组下标,一个一个赋值。
|
|