Ошибка при создании процедуры: ORA-00955: имя уже задействовано для существующего объекта

Пробую создать тестовую процедуру:

CREATE OR REPLACE PROCEDURE p1 (param1 number, param2 varchar2) IS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Start p1('||param1||','||param2||')');
END;
/

Но получаю ошибку:

ORA-00955: имя уже задействовано для существующего объекта

Смотрю запросом ниже, но такой процедуры нет:

SELECT * FROM user_procedures WHERE procedure_name = 'P1';

no rows selected

Что делаю не так, или как создать процедуру?


Ответы (1 шт):

Автор решения: 0xdb

В сообщении об ошибке идёт речь о всех обьектах БД. Имена объектов БД уникальны в пределах схемы независимо от их типа.

То есть, ранее был созданo: таблица, представление, что угодно, с тем же именем - P1:

create or replace synonym p1 for procedure1;

create or replace procedure p1 is
begin null;
end;
/

ORA-00955: имя уже задействовано для существующего объекта

Какой объект был создан, можно узнать запросом:

select object_name, object_type   
from user_objects
where object_name = 'P1';

OBJECT_NAME      OBJECT_TYPE     
---------------- ----------------
P1               SYNONYM         

Далее следует выбрать одно из двух:

  • дать процедуре другое имя
  • удалить или переименовать существующий объект
drop synonym p1;

Synonym P1 dropped.

create or replace procedure p1 is
begin null;
end;
/
Procedure P1 compiled
→ Ссылка