oracle sql developer ora-00904存储过程执行错误

oracle sql developer ora-00904存储过程执行错误,oracle,stored-procedures,plsql,ora-00904,Oracle,Stored Procedures,Plsql,Ora 00904,我在OracleSQLDeveloper中编写了简单的存储过程,但在执行/运行步骤时发现了错误(已附加) 这是我的密码: CREATE OR REPLACE PROCEDURE EMP_NAME (EMP_ID_IN IN VARCHAR2, EMP_NAME_OUT OUT VARCHAR2) AS BEGIN SELECT first_name INTO EMP_NAME

我在OracleSQLDeveloper中编写了简单的存储过程,但在执行/运行步骤时发现了错误(已附加)

这是我的密码:

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;
它也显示了这个错误


程序本身似乎正常。然而,它的执行有些奇怪

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

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;

这个过程本身似乎还可以。然而,它的执行有些奇怪

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

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;

你的数据字典有问题。编辑:您使用的是DB10G,我猜object_id不在all arguments视图中。当我们执行存储过程时,我们会向数据库询问有关代码的一些信息

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
来自此查询的关于无效对象\u id的错误。您正在运行哪个版本的Oracle数据库?您能在所有的\ u对象中看到您的PL/SQL对象吗?您的参数是否在所有\ u参数中显示

我已经获取了您的代码,并在HR.EMPLOYEES表中对其进行了修改

它按预期工作

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

我为员工编号或ID输入值“101”,然后点击OK

然后,OUT参数显示在下面的日志面板中

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


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

您的数据字典有问题。编辑:您使用的是DB10G,我猜object_id不在all arguments视图中。当我们执行存储过程时,我们会向数据库询问有关代码的一些信息

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
来自此查询的关于无效对象\u id的错误。您正在运行哪个版本的Oracle数据库?您能在所有的\ u对象中看到您的PL/SQL对象吗?您的参数是否在所有\ u参数中显示

我已经获取了您的代码,并在HR.EMPLOYEES表中对其进行了修改

它按预期工作

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

我为员工编号或ID输入值“101”,然后点击OK

然后,OUT参数显示在下面的日志面板中

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



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

事实上,我想使用Oracle SQL Developer中的存储过程。但它在简单的“HelloWorld”上会提示相同的错误procedure.CREATE或REPLACE procedure HELLO AS BEGIN DBMS_OUTPUT.PUT_LINE('I love Paksitan');结束问候;这就是您创建它的方式。你怎么称呼它?顺便问一下,它是哪个SQL开发人员版本?如果不是最新的,考虑升级它。它的版本是最新的一个Oracle网站。我在给定的IDE中使用了“Run”按钮(我看到了多个使用这种方法成功执行的视频)。我向您展示了如何“手动”运行一个过程(我发布的第一段代码)。试试看。事实上,我想在Oracle SQL Developer中使用存储过程。但它在简单的“HelloWorld”上会提示相同的错误procedure.CREATE或REPLACE procedure HELLO AS BEGIN DBMS_OUTPUT.PUT_LINE('I love Paksitan');结束问候;这就是您创建它的方式。你怎么称呼它?顺便问一下,它是哪个SQL开发人员版本?如果不是最新的,考虑升级它。它的版本是最新的一个Oracle网站。我在给定的IDE中使用了“Run”按钮(我看到了多个使用这种方法成功执行的视频)。我向您展示了如何“手动”运行一个过程(我发布的第一段代码)。试试看,我看不出这条信息,所以你可能在看早期版本;但看起来您是通过向导创建过程的,在单击“编译”之前单击“运行”是吗?我尝试了手动和按向导创建两种方法,遇到了相同的问题。类似地,我在编译之前也尝试过“运行”,但没有发现任何帮助。@MuhammadWaheed我用
SQL Developer 1.5.5
进行了尝试,它执行时没有遇到任何问题。您的数据库版本和SQL Developer版本是什么?Oracle 10g 101..0.4.2和Oracle SQL Developer 18.1.0.095.1630-x64@MuhammadWaheed你的Windows版本呢?我看不太清楚这条信息,所以可能你使用的是早期版本;但看起来您是通过向导创建过程的,在单击“编译”之前单击“运行”是吗?我尝试了手动和按向导创建两种方法,遇到了相同的问题。类似地,我在编译之前也尝试过“运行”,但没有发现任何帮助。@MuhammadWaheed我用
SQL Developer 1.5.5
进行了尝试,它执行时没有遇到任何问题。您的数据库版本和SQL Developer版本是什么?Oracle 10g 101..0.4.2和Oracle SQL Developer 18.1.0.095.1630-x64@MuhammadWaheed您的Windows版本呢?请告诉我您查询中的问号。我应该在那个位置写什么?你说的“object\u id”和argument是什么意思?object\u id是所有对象和所有参数中的一列。请告诉我这些问题m