我试图计算将从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 ; /
它不起作用
还有其他解决方案可以让我计算游标结果的行数吗,我真的很菜鸟
谢谢帮手
如果您的目的是重用现有的游标定义,而不必重复其基于的查询,则可以遍历其结果以获取计数:
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显示了另一种方法,具有显式提取)。无论哪种方式,进程都会消耗游标。如果要对返回的数据 进行 计数 后再 做任何事情,则必须重新执行并重新获取游标。