提高工资的PL / SQL_procedure有错误

时间:2017-04-01 04:41:47

标签: oracle plsql

问题是为那些薪水低于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;
/

1 个答案:

答案 0 :(得分:1)

进一步搜索,我认为您会发现该过程没有将工资更新150,但实际上更新了50次等于光标中返回的行数。在这种情况下,对于您验证的任何人,3行(因此3 * 50 = 150)。此外,它更新了所有工资,而不仅仅是光标中的工资。

update语句不包含WHERE子句,因此表中的每一行都会更新。

此外,一个简单的更新声明将满足您的需求:

更新\ temp   设置sal = sal + 50 其中sal&lt; 1100;

养成以集合而不是单独行思考的习惯。