必须声明组件错误 (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:语句被忽略

当导入到 oracle 10g 得到错误 6550

需要帮助理解 Cursor for loop

ORA-06550:PLS-00306: 调用中的参数数量或类型错误;ORA-06550:

ORA-06550: 错误的参数数量或类型