2011-02-08 85 views
2

我想查找游标中的行数。有没有可以提供帮助的关键字?使用COUNT,我们必须写一个查询。任何帮助将不胜感激。如何查找游标中的行数

回答

2

您可以使用游标的%ROWCOUNT属性。

e.g:

DECLARE 
    CURSOR lcCursor IS 
    SELECT * 
    FROM DUAL; 
BEGIN 
    OPEN lcCursor ; 
    DBMS_OUTPUT.PUT_LINE(lcCursor%ROWCOUNT); 
    CLOSE lcCursor ; 
END; 
+1

是它的作品!我得到了零的人!!!!!!输出中 – 2013-02-27 15:30:01

+2

这将始终返回零,因为没有行已被取出。 – 2015-08-20 00:16:40

10

您必须打开游标,然后取和计数每一行。没有别的工作。

+3

这是正确的答案。游标不包含行,它是获取每行的指针。 – 2015-08-20 00:16:04

0

您不能在开始时计算光标。为此,您需要获取完整的游标;这是获得游标数的方法。

declare 
    cursor c2 is select * from dept; 
    var c2%rowtype; 
    i number :=0; 
begin 
    open c2; 
    loop 
    fetch c2 into var; 
    exit when c2%NOTFOUND; 
    i: = i+1; 
    end loop; 
    close c2; 
dbms_output.put_line('total records in cursor'||i); 
end; 
+0

你应该解释为什么这解决了问题。 – 2015-12-11 19:22:03

6

cursor_variable.%ROWCOUNT是解决方案。但是如果您打开后检查它,它的值将为0。您需要遍历所有记录,以获取总行数。下面的示例:

DECLARE 
    cur sys_refcursor; 
    cur_rec YOUR_TABLE%rowtype; 
BEGIN 
    OPEN cur FOR 
    SELECT * FROM YOUR_TABLE; 

    dbms_output.put_line(cur%rowcount);--returning 0 

    LOOP 
    FETCH cur INTO cur_rec; 
    EXIT WHEN cur%notfound; 
    dbms_output.put_line(cur%rowcount);--will return row number beginning with 1 
    dbms_output.put_line(cur_rec.SOME_COLUMN); 
    END LOOP; 

    dbms_output.put_line('Total Rows: ' || cur%rowcount);--here you will get total row count 
END; 
/