Oracle PL / SQL中用于存储行的数组

时间:2011-04-01 13:47:06

标签: plsql oracle10g

我正在尝试在Oracle / PLSQL中执行某些操作,我希望通过游标从数据库中选择一些内容并将其存储到行数组中,我可以在以后处理这些行。搜索谷歌但无济于事。将在这里感谢任何帮助。

我的想法

  1. 使用游标读取数据库
  2. 将符合特定标准的行存储为行数组
  3. 对行数组进行排序
  4. 使用dbms_output.put_line
  5. 打印行数组中的项目

1 个答案:

答案 0 :(得分:7)

看看PL/SQL Collections。您可以创建PL / SQL记录的集合,其中记录定义为表的%ROWTYPE。然后你加载该表&对它进行操作。

例如:

DECLARE
 CURSOR emp_cursor IS
 SELECT employee_id, employee_name from employees;

 TYPE employeeArrayType IS TABLE OF a_cur%ROWTYPE;
 employeeArray employeeArrayType;

BEGIN
  OPEN emp_cursor;
  LOOP
    FETCH emp_cursor BULK COLLECT INTO employeeArray LIMIT 100;
    EXIT WHEN emp_cursor%NOTFOUND;
  END LOOP;
  CLOSE emp_cursor;

  -- Now you can do work with employeeArray
END;

代码声明我的光标和集合,然后在循环中使用FETCH..BULK COLLECT进程加载集合(建议使用大量数据)。

然而,Codo的评论适用于此 - 如果您将数据作为WHERE子句的一部分进行过滤和排序,则会更容易。 SQL查询的ORDER BY子句。如果你有一个数据库引擎,那么在很少的情况下,用过程语言进行集合操作会更好。一些ETL过程可能需要它,但对于您的问题,我真的建议您在SQL中使用最终结果集进行工作。

话虽如此,对PL / SQL记录集合进行排序并不像人们想象的那么容易。有关对集合进行排序的方法的概述,请查看AMIS technology blog(和here第2部分)。