Plsql 在oracle游标更新中找不到更新了多少记录?
场景: 编写一个PL/SQL块,从用户那里获取部门号,并将该部门所有员工的工资提高10%。块应在屏幕上显示更新了多少记录 我的节目:Plsql 在oracle游标更新中找不到更新了多少记录?,plsql,cursor,rowcount,Plsql,Cursor,Rowcount,场景: 编写一个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
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_输出保持在循环之外,它会给出0
请帮忙
谢谢,使用简单的更新,而不是游标+forall。
如果你用FORALL。。。更新,则在每个循环周期中只更新1条记录,因此更新将返回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;
/
使用简单的更新,而不是游标+全称。
如果你用FORALL。。。更新,则在每个循环周期中只更新1条记录,因此更新将返回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;
请检查以下脚本:
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;
您能分享一些相关表的示例数据和模式吗?可以。名称空类型------------ENAME VARCHAR2(40)EMPNO编号(7)EMPSAL编号(7)DEPTNO编号(3)数据:xyz,2,10000,1您可以共享一些示例数据和关联表的架构吗?可以。名称空类型------------ENAME VARCHAR2(40)EMPNO编号(7)EMPSAL编号(7)DEPTNO编号(3)数据:xyz,2,10000,1感谢快速解决方案。工作正常。非常感谢您的快速解决方案。它工作得很好。