问题是要写一组代码,对于那些薪水低于1100的员工,把他们的工资提高50。
我的代码如下所示,但有错误:
在第2行出现错误:当需要下列内容之一时遇到符号"RAISE_SALARY“::=。(@%;立即符号";在"RAISE_SALARY“之前插入继续。
CREATE OR REPLACE procedure raise_salary
AS
CURSOR c1 IS
select ename, sal from emp
where sal <1100
order by sal ASC;
BEGIN
FOR emp_rec IN c1
LOOP
UPDATE emp
SET sal = sal + 50;
END LOOP;
END;
/
begin
execute raise_salary;
end;
/发布于 2017-04-03 20:37:23
进一步搜索,我想您会发现这个过程并没有更新工资150,但是实际上更新了50次--相当于光标中返回的行数的50次。在本例中,为您验证的任何人提供3行(SO3* 50 = 150)。此外,它还更新了所有薪资,而不仅仅是光标中的薪资。
update语句不包含WHERE子句,因此更新表中的每一行。
此外,一个简单的update语句将完成所需的任务:
更新set = sal + 50,其中sal < 1100;
养成一种习惯,根据设置而不是单个行来思考。
https://stackoverflow.com/questions/43152922
复制相似问题