Plsql 使用循环游标更新列时标识符无效?

Plsql 使用循环游标更新列时标识符无效?,plsql,cursor,Plsql,Cursor,我正在尝试使用游标更新表中的“薪资”列。 这是我的代码: declare cursor c1 is select * from emp2_1030082; begin for c3 in c1 loop if(c3.salary>10000) then update emp2_1030082 set c3.salary=c3.salary + c3.salary/10 ; elsif(c3.salary<=10000) then update emp2_1030082 set c3.

我正在尝试使用游标更新表中的“薪资”列。 这是我的代码:

declare
cursor c1 is
select * from emp2_1030082;
begin
for c3 in c1
loop
if(c3.salary>10000)
then
update emp2_1030082 set c3.salary=c3.salary + c3.salary/10 ;
elsif(c3.salary<=10000)
then
update emp2_1030082 set c3.salary= c3.salary + c3.salary/20 ;
end if;
end loop;
end;

第一个问题是,您真的需要在游标中执行此操作吗?因为执行这两条语句应该做您想要做的事情:

update emp2_1030082 set salary=salary + salary/10 where salary > 10000;
update emp2_1030082 set salary=salary + salary/20 where salary <= 10000;
通过使用
set c3.salary
中的
c3.
,您指的是光标,而不是要更新的表中的列名。只要
salary
(在其他更新中也是如此)就可以消除错误,但是,每次更新都会更新所有行,因此非常确定这不是您想要的

要使用游标执行此操作,您应该从它不属于的位置删除
c3.
,然后添加where子句以仅更新当前记录。希望您有某种唯一的ID,然后它会是这样的:

update emp2_1030082 set salary=c3.salary + c3.salary/10 where id = c3.id;

请帮助某人。是的,在问题中提到我必须使用游标,是的,仅使用薪水是更新每个记录,我将尝试对当前记录进行更新。
update emp2_1030082 set c3.salary=c3.salary + c3.salary/10 ;
update emp2_1030082 set salary=c3.salary + c3.salary/10 where id = c3.id;