首页 > 解决方案 > PLSQL 问题:使用带有过程块的随机值更新员工的薪水

问题描述

所以我正在努力解决这段代码的问题。我必须为 setSalaries() 编写一个程序,我需要能够将人的薪水(作为参数传递的名称)更新为一个范围内的随机生成的值(作为参数传递),但是我遇到了错误. 到目前为止,这是我的代码。任何帮助将不胜感激。

     Create or Replace Procedure setEmpSalary(p_name in VARCHAR low in INTEGER, high in    INTEGER)
     As

     l_salary AlphaCoEmp.salary%type;


    BEGIN
           Select salary from AlphaCoEmp where name = p_name;
           l_salary = ROUND(dbms_random.value(low,high));
           update AlphaCoEmp
           set salary = l_salary


          commit;
      END;
     /
     show errors;

这是另一个类似问题的示例代码,但它为表中的每个人分配了一个值

    Create or Replace Procedure setSalaries(low in INTEGER, high in INTEGER)
    As
    Cursor Emp_cur IS
    Select * from AlphaCoEmp;
    -- Local variables
    l_emprec Emp_cur%rowtype;

    l_salary AlphaCoEmp.salary%type;

   BEGIN
      for l_emprec IN Emp_cur
      loop
         l_salary := ROUND(dbms_random.value(low,high));

         update AlphaCoEmp
         set salary = l_salary
         where name = l_emprec.name;

       END LOOP;
       commit;
      END;
    /
    show errors;

标签: sqldatabaseplsqlsqlplus

解决方案


我想你想过滤update. select是不必要的:

       update AlphaCoEmp
           set salary = ROUND(dbms_random.value(low, high)
           where name = p_name;

推荐阅读