FETCH 游标 BULK COLLECT INTO ... [LIMIT num]
其中,...代表要选择的列或变量,LIMIT num是可选的,用于限制从游标中检索的行数。
2. 示例
示例1:使用BULK COLLECT从表中检索数据
DECLARE
TYPE t_emp IS TABLE OF hr.employees%ROWTYPE;
l_emp t_emp := t_emp();
BEGIN
SELECT * BULK COLLECT INTO l_emp FROM hr.employees WHERE rownum < 10;
FOR i IN 1 .. l_emp.count LOOP
dbms_output.put_line(l_emp(i).first_name || ' ' || l_emp(i).last_name);
END LOOP;
END;
在这个示例中,我们声明了一个集合类型t_emp,它是hr.employees表的一行记录的类型。然后,我们使用BULK COLLECT将查询结果加载到l_emp集合中,并遍历该集合以输出员工的名字。
示例2:使用游标和BULK COLLECT
DECLARE
TYPE name_list_type IS TABLE OF sales.product_name%TYPE;
name_list name_list_type;
CURSOR mycursor IS SELECT product_name FROM sales;
BEGIN
OPEN mycursor;
LOOP
FETCH mycursor BULK COLLECT INTO name_list LIMIT 3; -- 每次从游标中检索3行
FOR i IN 1 .. name_list.count LOOP
dbms_output.put_line(name_list(i));
END LOOP;
EXIT WHEN mycursor%NOTFOUND; -- 当没有更多行时退出循环
END LOOP;
CLOSE mycursor;
END;
在这个示例中,我们定义了一个游标mycursor来选择sales表中的product_name列。然后,我们使用一个循环来从游标中批量检索数据,每次检索3行,并输出这些行的内容。