DECLARE
l_rcursor SYS_REFCURSOR;
BEGIN
OPEN l_rcursor FOR SELECT * FROM all_users;
dbms_output.put_line(l_rcursor%ROWCOUNT);
END;
这是长代码所以我不能在声明部分内使用光标。这里我需要获取的行数。我不能使用rowtype,因为它是一个连接查询。
答案 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;
/