如果您的目的是重用现有的游标定义,而不必重复其基于的查询,则可以遍历其结果以获取计数:
set serveroutput on
declare
v_counter pls_integer := 0;
cursor get_sth is select * from all_tables where owner = user; -- your query
begin
for sth in get_sth loop
v_counter := v_counter + 1;
end loop;
dbms_output.put_line (v_counter);
end;
/
您不能在没有获取它们的情况下对结果集中的行进行计数,而游标循环会这样做。(@MarcinWroblewski显示了另一种方法,具有显式提取)。无论哪种方式,进程都会消耗游标。如果要对返回的数据进行 计数 后再 做任何事情,则必须重新执行并重新获取游标。