一个过程是调用另一个过程并传递一组数字。我想处理表中的所有记录,但一次性限制第二个过程中处理的行数。
以下是我的代码。
create or replace procedure proc1
is
emp_id dbms_sql.number_table;
begin
select employee_id bulk collect into emp_id from employees;
PROC2(EMP_ID);
end;
/
create or replace
procedure proc2(vin_emp_id dbms_sql.number_table)
is
begin
null;
END ;
答案 0 :(得分:1)
"想要一次性限制在proc2中处理的记录数"
限制proc2
中处理的记录的方法是提交批次。 PL / SQL bulk collect
语法支持LIMIT子句。因此,要一次传递100个记录的批次,您需要像这样重写proc1
:
create or replace procedure proc1
is
emp_id dbms_sql.number_table;
cursor emp_recs is
select employee_id from employees
begin
open emp_recs;
loop
fetch emp_recs bulk collect into emp_id limit 100;
exit when emp_id.count() = 0;
PROC2(EMP_ID);
end loop;
close emp_recs;
end;
/
使用emp_id.count()
语法检查是否在最近的提取中找到了任何记录,如果没有,则退出。不要对cursor%NOTFOUND
进行测试,因为如果获取的记录数小于限制数量,则为真,但即使最后一批只有一条记录,我们仍然要调用proc2
答案 1 :(得分:0)
您可以将所选行限制为emp_id
:
create or replace procedure proc1
is
emp_id dbms_sql.number_table;
begin
select employee_id
bulk collect into emp_id from employees where rownum <= 101;
PROC2(EMP_ID);
end;
/