oracle sql developer oracle-00904 存储过程执行错误
Posted
技术标签:
【中文标题】oracle sql developer oracle-00904 存储过程执行错误【英文标题】:oracle sql developer ora-00904 stored procedure execution error 【发布时间】:2018-11-14 09:59:28 【问题描述】:我在 Oracle SQL Developer 中编写了简单的存储过程,但在执行/运行步骤中发现并附加了错误。
这是我的代码:
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;
它也显示这个错误
【问题讨论】:
我看不到该消息,因此您可能使用的是早期版本;但看起来您正在通过向导创建过程,并在单击“编译”之前单击“运行” - 对吗? 我已经尝试了手动以及通过向导创建的方法,并遇到了同样的问题。同样,我在编译前尝试“运行”,但没有发现任何帮助。 @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 版本是什么?
【参考方案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;
【讨论】:
其实我想去Oracle SQL Developer 中的存储过程。但它在简单的“HelloWorld!”上提示相同的错误!过程。 在开始时创建或替换程序你好 DBMS_OUTPUT.PUT_LINE('I love Paksitan');结束你好; 这就是你创建它的方式。你怎么称呼它?顺便问一下,它是哪个 SQL Developer 版本?如果不是最新的,请考虑升级它。 它的版本是根据 oracle.com 的最新版本。我使用给定 IDE 中的“运行”按钮(我看到多个使用这种方法成功执行的视频)。 我向您展示了如何“手动”运行程序(我发布的第一段代码)。试试看。【参考方案2】:您的数据字典有问题。 编辑:您使用的是 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 表进行了修改。
它按预期工作。
我们运行一些代码来显示这两个参数。
我为员工编号或 ID 输入值“101”,然后点击确定。
然后在Log面板下方显示OUT参数。
如果您打开日志面板(查看 -> 日志),您也会看到一个“声明”页面。在那里你可以看到我们在数据库上执行的所有代码。这就是我去获取在 OBJECT_ID 上对您来说失败的 SQL 的地方。去看看那个,走一遍代码,确认什么不工作。
要解决此问题,请查找支持 10g 的 SQLDev 的旧副本......可能是 2.1,或者将您的数据库升级到至少 11.2.0.4。
【讨论】:
请告诉我您的查询中放置的问号。在那个位置我应该写什么? 'object_id' 和参数是什么意思? object_id 是 all_objects 和 all_arguments 视图中的列以上是关于oracle sql developer oracle-00904 存储过程执行错误的主要内容,如果未能解决你的问题,请参考以下文章
[ORACE] Oracle trace 之二10046事件
在 Oracle 12“包”中,如何使变量、函数或过程可访问或不可访问?
oracle sql developer工具 如何给用户分配权限