PLSQL 问题:使用带有过程块的随机值更新员工的薪水

Posted

技术标签:

【中文标题】PLSQL 问题:使用带有过程块的随机值更新员工的薪水【英文标题】:PLSQL Question: Update Salary of employee using Random value with procedure block 【发布时间】:2020-05-04 22:42:49 【问题描述】:

所以我正在努力找出这段代码的问题。我必须编写一个 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;

【问题讨论】:

删除Select salary from AlphaCoEmp where name = p_name;。您不能在存储过程中选择任何内容, @alexherm LINE/COL 错误 -------- ---------------------------- ------------------------------------- 1/42 PLS-00103:遇到符号“LOW”当期望以下之一时: := 。 ) , @ % 默认字符符号 "," 被替换为 "LOW" 以继续。 8/21 PLS-00103:在预期以下情况之一时遇到符号“=”::=。 ( @ % ; 8/57 PLS-00103: 遇到符号 ";" 当期望以下之一时:LINE/COL ERROR 您使用的是 Oracle 还是 mysql?您在创建过程语句的参数声明中缺少逗号。如果您对低值和高值进行硬编码,它是否有效? @alexherm 我正在使用 oracle。让我试试看,我会回复你的。 @alexherm 好的,所以我添加了逗号,现在我得到了这个,警告:过程创建时出现编译错误。 SQL> PROCEDURE SETEMPSALARY 的错误:LINE/COL ERROR -------- ------------------- ---------------------------------- 6/12 PL/SQL: SQL 语句被忽略 9/11 PL/SQL : ORA-00933: SQL 命令未正确结束 SQL> SQL> 【参考方案1】:

我想你想过滤updateselect 是不必要的:

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

【讨论】:

以上是关于PLSQL 问题:使用带有过程块的随机值更新员工的薪水的主要内容,如果未能解决你的问题,请参考以下文章

如何通过使用带有 PLSQL 的触发器来修改包含特定值的 CLOB 行?

从 plsql 选择过程中检索值

使用 PLSQL 创建过程

我们可以创建一个给出随机值的 PLSQL 序列吗?

关于plsql!!!

如何在 plsql 中更新此函数?