我遇到了麻烦,我已经尝试了所有事情(在我的意见中,当然这是错的'因为答案就在那里)
代码块更新了proposed_raises表中的所有necessery行,尽管它应该使用不同的值更新proposed_new_salary字段,因为游标会为e.salary检索六个不同的值。
代码:
DECLARE
CURSOR cur_rai_sal (p_salary_num NUMBER) IS
SELECT e.employee_id, e.department_id, e.salary
FROM employees e, proposed_raises rs
WHERE e.salary <= p_salary_num
FOR UPDATE OF rs.date_proposed, rs.date_approved, rs.proposed_new_salary NOWAIT;
BEGIN
FOR v_cur_rai_sal IN cur_rai_sal(5000) LOOP
--DBMS_OUTPUT.PUT_LINE(v_cur_rai_sal.employee_id ||''||v_cur_rai_sal.department_id|| ' ' || v_cur_rai_sal.salary);
UPDATE proposed_raises
SET date_proposed = SYSDATE,
date_approved = NULL,
proposed_new_salary = v_cur_rai_sal.salary /100*105
WHERE CURRENT OF cur_rai_sal;
END LOOP;
END;
没有错误消息,只有“1行更新”。
提前谢谢你:)
答案 0 :(得分:0)
目前尚不清楚你的问题是什么。我使用如下定义的表编写了一些类似的代码:
create table t1 (id int, val number);
insert into t1 select rownum, rownum*1000 from user_objects where rownum < 10;
SQL> select * from t1;
ID VAL
---------- ----------
1 1000
2 2000
3 3000
4 4000
5 5000
6 6000
7 7000
8 8000
9 9000
DECLARE
CURSOR c (p_salary_num NUMBER) IS
SELECT id, val
FROM t1
FOR UPDATE OF val NOWAIT;
BEGIN
FOR v_c IN c(5000) LOOP
UPDATE t1
SET val = v_c.val /100*105
WHERE CURRENT OF c;
END LOOP;
END;
它工作正常:
SQL> select * from t1;
ID VAL
---------- ----------
1 1050
2 2100
3 3150
4 4200
5 5250
6 6300
7 7350
8 8400
9 9450
但是你必须做一些不同的事情,因为你的代码永远不会产生消息“1行更新”,它会说“PL / SQL过程成功完成”。因此,您似乎正在执行不在PL / SQL块中的独立UPDATE语句。