必须声明组件错误 (ORA-06550)
Posted
技术标签:
【中文标题】必须声明组件错误 (ORA-06550)【英文标题】:Component must be declared error (ORA-06550) 【发布时间】:2018-01-15 08:56:54 【问题描述】:我收到这个错误:
ORA-06550:第 1 行,第 25 列:PLS-00302:必须声明组件 PA_EXCEPTION_LIST_UPDATE:第 1 行,第 7 列:PL/SQL:语句被忽略。
我不知道我做错了什么。
PROCEDURE Pa_exception_list_update (p_ceid collection_entities.ceid%TYPE,
p_idusr users.idusr%TYPE
)
IS
v_idusr users.idusr%TYPE;
v_ceid collection_entities.ceid%TYPE;
BEGIN
INSERT INTO pa_exception_list(pa_exception_list_id,
ceid,
creation_date,
created_by)
VALUES(pa_exception_list_seq.nextval, p_ceid, SYSDATE, p_idusr);
END Pa_exception_list_update;
【问题讨论】:
脚本通常以“创建或替换过程...”开头。 这个过程是一个以这个语句开头的大包的一部分。 所以问题可能出在那个包的其他地方?也许您在声明之前调用了该过程? +1,因为唯一提到 PA_EXCEPTION_LIST_UPDATE 的两个地方是在 CREATE 和 END 过程中。因此,它必须在其他地方。 还可以查看这个问题的答案:***.com/questions/42722228/… 【参考方案1】:看起来您在声明过程之前调用了它。
看看这个例子。 过程 A 调用过程 B。但此时 B 是未知的。
create or replace package test is
begin
end test;
create or replace package body test is
procedure a
is
begin
b;
end;
procedure b is
begin
-- do someting
end;
end test;
解决方案。更改包内过程的顺序或将过程放在包规范中。
create or replace package test is
begin
procedure b;
end test;
create or replace package body test is
procedure a
is
begin
b;
end;
procedure b is
begin
-- do someting
end;
end test;
【讨论】:
【参考方案2】:根据错误消息,错误出现在第 1 行。
如果这是一个独立的过程,你必须写成create or replace procedure Pa_exception_list_update ...
如果这是 PL/SQL 包的一部分,那么你必须像这样写
CREATE OR REPLACE PACKAGE BODY <package name> AS
procedure Pa_exception_list_update ...
【讨论】:
【参考方案3】:我认为你在声明时遗漏了一些东西。
p_ceid IN collection_entities.ceid%TYPE, p_idusr IN users.idusr%TYPE
【讨论】:
【参考方案4】:我也遇到了同样的问题。 检查后发现,我调用的程序在包中不存在! 后来改了程序名,就成功了。
【讨论】:
以上是关于必须声明组件错误 (ORA-06550)的主要内容,如果未能解决你的问题,请参考以下文章
ORA-06550:第 1 行,第 7 列:\nPLS-00905:对象 TEST.CMPPROJECTPROC 无效\nORA-06550:第 1 行,第 7 列:\nPL/SQL:语句被忽略&qu
ORA-06550:第 1 行,第 7 列:PLS-00201:必须声明标识符“PAYMENT_UPDATE” ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略