问题是为那些薪水低于1100的雇员写一段代码,将这些人的薪水提高50点。
我的代码如下,但有错误:
第2行的错误:遇到符号" RAISE_SALARY"期待以下之一:=。 (@%;立即符号&#34 ;;在" 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;
/
答案 0 :(得分:1)
进一步搜索,我认为您会发现该过程没有将工资更新150,但实际上更新了50次等于光标中返回的行数。在这种情况下,对于您验证的任何人,3行(因此3 * 50 = 150)。此外,它更新了所有工资,而不仅仅是光标中的工资。
update语句不包含WHERE子句,因此表中的每一行都会更新。
此外,一个简单的更新声明将满足您的需求:
更新\ temp 设置sal = sal + 50 其中sal&lt; 1100;
养成以集合而不是单独行思考的习惯。