如何调试不会在 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

【问题讨论】:

您要读取的表是否命名为employeemployee 专业提示:我们喜欢这里有用且内容丰富的标题。 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 中构建的存储过程? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

oracle10g的存储过程大概怎么调试

oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,

oracle存储过程中循环调用存储过程

oracle如何调试存储过程

请问如何用c++ 调用oracle存储过程?

在oracle中 存储过程如何调用存储过程?