如何查找游标中的行数

Avi*_*Avi 8 oracle plsql cursor

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

Bri*_*rij 20

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;
/
Run Code Online (Sandbox Code Playgroud)

  • 这应该标记为正确的答案. (3认同)

小智 15

您必须打开光标,然后获取并计算每一行.没有别的办法.

  • 这是正确的答案.游标不包含行,它是指向每行提取的指针. (5认同)

eif*_*001 8

您还可以使用 BULK COLLECT 这样就不需要 LOOP,

DECLARE
    CURSOR c 
    IS   SELECT *
           FROM employee;
    TYPE emp_tab IS TABLE OF c%ROWTYPE INDEX BY BINARY_INTEGER;
    v_emp_tab emp_tab;
BEGIN
    OPEN c;
    FETCH c BULK COLLECT INTO v_emp_tab;
    DBMS_OUTPUT.PUT_LINE(v_emp_tab.COUNT);
    CLOSE c;
END;
/
Run Code Online (Sandbox Code Playgroud)

编辑:将员工%ROWTYPE更改为c%ROWTYPE


Cha*_*ndu -6

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

例如:

DECLARE
  CURSOR lcCursor IS
  SELECT *
    FROM DUAL;
BEGIN
  OPEN lcCursor ;
  DBMS_OUTPUT.PUT_LINE(lcCursor%ROWCOUNT);
  CLOSE lcCursor ;
END;
Run Code Online (Sandbox Code Playgroud)

  • 这将始终返回零,因为尚未获取任何行。 (23认同)