【发布时间】:2017-09-16 05:30:49
【问题描述】:
场景: 编写一个 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。
请帮忙。
谢谢,
【问题讨论】:
-
你能分享一些相关的表的示例数据和架构吗?
-
是的,当然。名称 Null 类型 ------ ---- ------------ ENAME VARCHAR2(40) EMPNO NUMBER(7) EMPSAL NUMBER(7) DEPTNO NUMBER(3) 数据:xyz, 2 , 10000, 1