必须声明组件错误(ORA-06550)

时间:2018-01-15 08:56:54

标签: sql oracle plsql

我收到此错误:

  

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;

4 个答案:

答案 0 :(得分:2)

看起来你在声明它之前调用了这个程序。

看看这个例子。 程序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;

答案 1 :(得分:0)

根据错误消息,错误出现在第1行。

如果这是一个独立的程序,您必须写为create or replace procedure Pa_exception_list_update ...

如果这是PL / SQL包的一部分,那么你必须像

一样写
CREATE OR REPLACE PACKAGE BODY <package name> AS

procedure Pa_exception_list_update ...

答案 2 :(得分:0)

我认为你在宣布时遗漏了一些东西。

p_ceid IN collection_entities.ceid%TYPE, p_idusr IN users.idusr%TYPE

答案 3 :(得分:0)

我也遇到了同样的问题。 检查后我发现,我调用的程序在包中不存在!。 后来改了程序名就成功了。