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】:
我想你想过滤update
。 select
是不必要的:
update AlphaCoEmp
set salary = ROUND(dbms_random.value(low, high)
where name = p_name;
【讨论】:
以上是关于PLSQL 问题:使用带有过程块的随机值更新员工的薪水的主要内容,如果未能解决你的问题,请参考以下文章