我正在尝试使用游标更新表格中的薪水栏。 这是我的代码:
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;
但是我收到了这个错误:
ORA-06550: line 9, column 47:
PL/SQL: ORA-00904: "C3"."SALARY": invalid identifier
ORA-06550: line 9, column 1:
PL/SQL: SQL Statement ignored
ORA-06550: line 12, column 25:
PL/SQL: ORA-00904: "C3"."SALARY": invalid identifier
ORA-06550: line 12, column 1:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
答案 0 :(得分:1)
第一个问题是,你真的需要在游标中这样做吗?因为执行这两个语句应该做你想要的:
update emp2_1030082 set salary=salary + salary/10 where salary > 10000;
update emp2_1030082 set salary=salary + salary/20 where salary <= 10000;
同时,你得到的错误是因为
update emp2_1030082 set c3.salary=c3.salary + c3.salary/10 ;
通过使用c3.
中的set c3.salary
,您指的是光标,而不是您要更新的表中的列名。只需salary
(以及其他更新)也应该让错误消失,但是,你会在每次更新时更新所有行,所以很确定这不是你想要的。< / p>
要使用游标执行此操作,您应该从不属于它的位置删除c3.
,然后添加where子句以仅更新当前记录。希望你有一些独特的ID,然后它会是这样的:
update emp2_1030082 set salary=c3.salary + c3.salary/10 where id = c3.id;