小编典典

从pl / sql中的游标计数行

sql

我试图计算将从sql语句返回的行数。该语句在游标中

我的代码是这样的

DECLARE

v_counter int := 0 ;

select count(*) into v_counter from (
cursor get_sth is select * from table1 where condit..) ;


BEGIN

DBMS_OUTPUT.PUT_LINE (v_counter);


END ;
/

它不起作用

还有其他解决方案可以让我计算游标结果的行数吗,我真的很菜鸟

谢谢帮手


阅读 205

收藏
2021-04-22

共1个答案

小编典典

如果您的目的是重用现有的游标定义,而不必重复其基于的查询,则可以遍历其结果以获取计数:

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显示了另一种方法,具有显式提取)。无论哪种方式,进程都会消耗游标。如果要对返回的数据
进行 计数 后再 做任何事情,则必须重新执行并重新获取游标。

2021-04-22