如何在Oracle中的列表中存储选择的sql结果记录

时间:2017-11-02 14:21:14

标签: oracle

我有一名员工。下面的查询返回一条记录,想要将它存储在一个列表中,以便后者在i上可以迭代它并获取值。

select employee_name,employee_surname from employee where emp_id = '123';

类似

select employee_name,employee_surname bulk collect into list_emp from employee where emp_id = '123';
.
.
FOR indx IN 1 .. list_emp.count
 LOOP
<other sqls>
END LOOP;

1 个答案:

答案 0 :(得分:0)

这可以通过声明记录的包级别集合来完成。

CREATE OR REPLACE PACKAGE pkg_emp_rec AS
    TYPE emp_rec IS RECORD ( employee_name employee.employee_name%TYPE,
    employee_surname employee.employee_surname%TYPE );
    TYPE list_emptype IS
        TABLE OF emp_rec;
    list_emp list_emptype;
END pkg_emp_rec;

接下来,您可以在任何您想要的块/程序中存储和检索此集合。

SET SERVEROUTPUT ON

BEGIN
    SELECT
        employee_name,
        employee_surname
    BULK COLLECT INTO
        pkg_emp_rec.list_emp
    FROM
        employee;

    FOR indx IN 1..pkg_emp_rec.list_emp.count 
    LOOP
        dbms_output.put_line(pkg_emp_rec.list_emp(indx).employee_name);
    END LOOP;

END;
/

注意:当您的表格数据很大时,建议不要这样做。从集合中获取数据库表总是更好。只把它作为你作业的解决方案。

另一种方法是将员工姓名存储为嵌套表格列,我将其作为作业提供。