如何调试不会在 Oracle 中构建的存储过程? [关闭]
Posted
技术标签:
【中文标题】如何调试不会在 Oracle 中构建的存储过程? [关闭]【英文标题】:How to debug a stored procedure that won't build in Oracle? [closed] 【发布时间】:2016-11-05 13:18:22 【问题描述】: Create or replace function get_empsalary_by dept(emp_dept varchar(20))
return number is
Total_salary number(10,2);
emp_dept varchar(20);
emp_salary number(10,2);
begin
select empdept, sum(empsalary) into emp_dept,emp_salary from employe where empdept=emp_dept;
total_salary :=sum(empsalary);
return total_salary;
end;
/
错误是:
-----------------------------------------------------------------
PLS-00103: Encountered the symbol "DEPT" when expecting one of
the following:
( return compress compiled wrapped
【问题讨论】:
您要读取的表是否命名为employe
或employee
?
专业提示:我们喜欢这里有用且内容丰富的标题。 Can anyone please check this code and help me out
可能适用于网站上的所有 1270 万个问题,因此可以更具体一些。这可能是您获得一些反对意见的地方。
【参考方案1】:
Create or replace function get_empsalary_by_dept(p_emp_dept in employe.empdept%type)
return number
is
Total_salary number(10,2);
emp_dept varchar(20);
emp_salary number(10,2);
begin
select empdept, sum(empsalary)
into emp_dept,emp_salary
from employe
where empdept=p_emp_dept
group by empdept;
-- total_salary := emp_salary;
return emp_salary;
end;
/
也许这可以进一步帮助你。
您的函数名称不能包含任何空格。输入参数 (emp_dept) 不能与变量相同。在这种情况下,您不需要变量 emp_dept。返回值可以是emp_salary。
【讨论】:
我无法测试它,但查询不应该有group by empdept
(或者应该从select子句中删除empdept字段)
@Insac:你是对的。 select 语句缺少 group by 子句。我已经将它添加到我的答案中。谢谢。【参考方案2】:
您的函数被称为“get_empsalary_by dept”(“by”和“dept”之间有一个空格),因此解析器会抱怨,因为它希望函数后有一个有效的(即没有空格)函数名:相反,它找到了两个字符串.
【讨论】:
您好,我已经更正了拼写错误,但显示相同的错误 请更正问题代码。真的是同一个错误吗?还是抱怨与“部门”不同的其他符号?如果是后者,也请更新报错信息。。不过emp_dept也有错误声明(已经是入参,不需要声明),select应该只写sum(emp_salary) into total_salary
(不需要select 子句中的 empdept 和 emp_salary 字段),您应该删除 total_salary := sum(empsalary) ;
行。啊..可能表名是“employees”而不是“employe”。以上是关于如何调试不会在 Oracle 中构建的存储过程? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章