过程给我错误:ORA-00955:现有对象已使用名称

问题描述

CREATE TABLE product
( product_id number(10) NOT NULL,product_name varchar2(50) NOT NULL,price varchar2(50)
);

CREATE OR REPLACE PROCEDURE p1 (product_id in number,product_name in varchar2,price in number) 

IS
BEGIN
INSERT INTO product values(1,'yash',100);
DBMS_OUTPUT.PUT_LINE('VALUE INSERTED');

end;

错误:ORA-00955:现有对象已使用该名称

有人可以提供我和合适的例子吗

解决方法

从错误消息中,名称p1已被使用(是其类型不同于过程的对象名称)。只需为过程指定其他名称(更具描述性!)即可:

CREATE OR REPLACE PROCEDURE insert_product 
 (product_id in number,product_name in varchar2,price in number) 

IS
BEGIN
INSERT INTO product values(1,'yash',100);
DBMS_OUTPUT.PUT_LINE('VALUE INSERTED');
END;
,

对于您的此问题,解决方案是写以下行(EXECUTE p1;) 通过键入此命令,您将获得所需的输出

,

您两次询问“合适的例子”或“证明代码”。我假设您不了解或不相信关于过程名称与其他对象名称冲突的解释。所以这是证明这一点的例子。

SQL> --
SQL> -- check that we don't own anything called MYTEST
SQL> --
SQL> select object_name
  2  from user_objects
  3  where upper(object_name) = 'MYTEST'
  4  ;

no rows selected

SQL> --
SQL> -- create a table MYTEST
SQL> --
SQL> create table mytest (dob date);

Table created.

SQL> --
SQL> -- check objets
SQL> --
SQL> select object_type,2         object_name
  3  from user_objects
  4  where upper(object_name) = 'MYTEST'
  5  ;

OBJECT_TYPE         OBJECT_NAME
------------------- --------------------
TABLE               MYTEST

1 row selected.

SQL> --
SQL> -- create a procedure MYTEST
SQL> --
SQL> create or replace procedure mytest
  2  as
  3  begin
  4    dbms_output.put_line('Hello world');
  5  end;
  6  /
create or replace procedure mytest
*
ERROR at line 1:
ORA-00955: name is already used by an existing object


SQL> --
SQL> -- now,drop the table and try the procedure again
SQL> --
SQL> drop table mytest purge;

Table dropped.

SQL> create or replace procedure mytest
  2  as
  3  begin
  4    dbms_output.put_line('Hello world');
  5  end;
  6  /

Procedure created.

SQL> --
SQL> -- cleanup
SQL> --
SQL> drop table mytest purge;
drop table mytest purge
           *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> drop procedure mytest;

Procedure dropped.

如果您的程序名为“ p1”,请检查:

select object_type,object_name
from user_objects
where upper(object_name) = 'P1'
;