使用光标获取计数值

时间:2018-02-07 06:52:32

标签: oracle

DECLARE
l_rcursor SYS_REFCURSOR;
BEGIN   
OPEN l_rcursor FOR SELECT * FROM all_users;
dbms_output.put_line(l_rcursor%ROWCOUNT); 
END;

这是长代码所以我不能在声明部分内使用光标。这里我需要获取的行数。我不能使用rowtype,因为它是一个连接查询。

2 个答案:

答案 0 :(得分:0)

嗯,你不能。

有一种方法可以确定游标是否包含任何内容(使用%NOTFOUND属性),例如

SQL> declare
  2    l_rcursor sys_refcursor;
  3    l_rec     all_users%rowtype;
  4  begin
  5    open l_rcursor for select * From all_users
  6                       where 1 = 2;      --> will cause nothing to be returned
  7
  8    -- check whether there is (or is not) anything there
  9    fetch l_rcursor into l_rec;
 10    if l_rcursor%notfound then
 11       dbms_output.put_line('There''s nothing there');
 12    end if;
 13  end;
 14  /
There's nothing there

PL/SQL procedure successfully completed.

SQL>

但您无法知道它会返回多少行,这意味着您必须计算其他地方的行数(可能是代码使用了您的内容)在你的问题中写道。)

答案 1 :(得分:0)

可能与counting rows from a cursor in pl/sql

重复

您也可以在光标查询中使用COUNT来解决您的问题,下面的示例代码

DECLARE
    l_rcursor SYS_REFCURSOR;
    v_count NUMBER;
BEGIN   
    OPEN l_rcursor FOR SELECT COUNT(1) FROM (SELECT * FROM all_users);
    -- OR
    -- OPEN l_rcursor FOR SELECT COUNT(1) FROM all_users;
    FETCH l_rcursor INTO v_count;
    dbms_output.put_line(v_count); 
END;
/