Oracle SQL Developer Ora-00904存储过程执行错误

时间:2018-11-14 09:59:29

标签: oracle stored-procedures plsql ora-00904

我已经在Oracle SQL Developer中编写了简单的存储过程,但是发现附加,执行/运行步骤出错。

problem faced

这是我的代码:

CREATE OR REPLACE PROCEDURE EMP_NAME (EMP_ID_IN      IN     VARCHAR2,
                                      EMP_NAME_OUT      OUT VARCHAR2)
AS
BEGIN
   SELECT first_name
     INTO EMP_NAME_OUT
     FROM employee
    WHERE emp_id = EMP_ID_IN;
END EMP_NAME;

它也显示此错误

error_log

2 个答案:

答案 0 :(得分:1)

该过程本身似乎还可以。但是,它的执行有些奇怪。

我建议您从工作表本身运行它,例如

declare
  l_out employee.first_name%type;
begin
  emp_name(100, l_out);
  dbms_output.put_line('Result = ' || l_out);
end;
/

但是,为什么它是一个程序功能不是更好的选择吗?例如。

create or replace function emp_name (emp_id_in in varchar2)
  return employee.first_name%type
is
  retval employee.first_name%type;
begin
  select first_name
    into retval
    from employee
    where emp_id = emp_id_in;

  return retval;
end;
/

您将以一种简单的方式运行它,如

select emp_name(100) from dual;

答案 1 :(得分:1)

您的数据字典出了点问题。 edit:您使用的是DB 10g,我猜object_id不在所有参数视图中。当我们执行存储过程时,我们会向数据库询问有关代码的一些信息。

SELECT data_type, argument_name name 
FROM all_arguments a, all_objects o 
WHERE a.object_id=o.object_id 
AND o.object_name=? and o.owner=? and a.package_name is NULL 
order by position

关于无效的object_id的错误-来自此查询。您正在运行什么版本的Oracle数据库?您可以在ALL_OBJECTS中看到您的PL / SQL对象,并且您的参数显示在ALL_ARGUMENTS中吗?

我已将您的代码修改为HR.EMPLOYEES表。

它按预期工作。

enter image description here

我们运行一些代码以向您显示两个参数。

我为员工编号或ID输入了'101'的值,然后单击OK。

然后OUT参数显示在下面的“日志”面板中。

enter image description here

如果打开日志面板(查看->日志),也会看到“声明”页面。在这里,您可以看到我们在数据库上执行的所有代码。那就是我去OBJECT_ID上获取失败的SQL的地方。去看一下,然后遍历代码并确认什么不起作用。

要解决此问题,请查找支持10g(例如2.1)的SQLDev的旧副本,或将数据库至少升级到11.2.0.4。