无法在oracle cursor update中找到更新了多少条记录?

Unable to find in oracle cursor update that how many records are updated?

场景: 编写一个PL/SQL块,从用户那里获取部门编号,并将属于该部门的所有员工的工资增加10%。该块应在屏幕上显示更新了多少条记录。

我的程序:

DECLARE
      V_TOT_ROWS NUMBER(3);
      CURSOR emp_cursor IS
      SELECT EMPSAL FROM emp WHERE deptno=&DEPT_NO
      FOR UPDATE OF EMPSAL NOWAIT;
BEGIN
      FOR emp_record IN emp_cursor 
      LOOP
              UPDATE  emp
              SET  EMPSAL=EMPSAL+emp_record.EMPSAL*0.1
              WHERE CURRENT OF emp_cursor;
    --  V_TOT_ROWS := SQL%ROWCOUNT;
    --  DBMS_OUTPUT.PUT_LINE('TOTAL UPDATED RECORDS: ' || V_TOT_ROWS);     
      DBMS_OUTPUT.PUT_LINE('Updated ' || SQL%ROWCOUNT || ' salaries.'); 
      END LOOP;
      COMMIT;
   --   DBMS_OUTPUT.PUT_LINE('Updated ' || SQL%ROWCOUNT || ' salaries.'); 

END;

每次执行循环时都会更新 1 行,但如果我将 dbms_output 保留在循环之外,它会给出 0。

请帮忙。

谢谢,

使用简单更新代替游标 + forall。
如果使用FORALL ... UPDATE,那么每个循环周期只更新1条记录,所以UPDATE returns SQL%ROWCOUNT always = 1.

DECLARE
      V_TOT_ROWS NUMBER(3);
BEGIN
     UPDATE emp
     SET   EMPSAL= EMPSAL+  EMPSAL*0.1
     WHERE deptno=&DEPT_NO;

      V_TOT_ROWS := SQL%ROWCOUNT;
      DBMS_OUTPUT.PUT_LINE('TOTAL UPDATED RECORDS: ' || V_TOT_ROWS);     

      COMMIT; 

END;
/

请检查以下脚本:

  declare V_TOT_ROWS NUMBER(3) :=0;
  CURSOR emp_cursor IS
  SELECT EMPSAL FROM emp WHERE deptno=&DEPT_NO
  FOR UPDATE OF EMPSAL NOWAIT;

  begin FOR emp_record IN emp_cursor 
  LOOP
          UPDATE  emp
          SET  EMPSAL=EMPSAL+emp_record.EMPSAL*0.1
          WHERE CURRENT OF emp_cursor;
  V_TOT_ROWS := V_TOT_ROWS+SQL%ROWCOUNT;
 --  DBMS_OUTPUT.PUT_LINE('TOTAL UPDATED RECORDS: ' || V_TOT_ROWS);     
 -- DBMS_OUTPUT.PUT_LINE('Updated ' || SQL%ROWCOUNT || ' salaries.'); 
  END LOOP;
  COMMIT;

  DBMS_OUTPUT.PUT_LINE('Updated ' || V_TOT_ROWS || ' salaries.'); end;