程序给出错误:ORA-00955:名称已被现有对象使用
Posted
技术标签:
【中文标题】程序给出错误:ORA-00955:名称已被现有对象使用【英文标题】:Procedures giving error : ORA-00955: name is already used by an existing object 【发布时间】:2020-08-22 09:01:17 【问题描述】: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:名称已被现有对象使用
谁能给我和合适的例子
【问题讨论】:
也许INSERT INTO product values(1,'yash',100);
是你想要的?你的程序对我来说没有多大意义。
除了主题之外,你最好把price
存储成这样的格式:NUMBER(10,2)
而不是VARCHAR2
。顺便说一句,您甚至是以数字格式插入值。
create table product
或 create or replace procedure p1
这两个语句中的哪一个给出了错误?如果是过程,那么该架构中是否还有其他名称相同的内容?
【参考方案1】:
从错误消息中可以看出,名称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;
【讨论】:
@BarbarosÖzhanor replace
如果已经有一个具有该名称的 procedure 会有所帮助。如果存在具有该名称的不同对象(例如表或视图),您将收到相同的错误
嗯,你是对的其他类型的对象的名称。【参考方案2】:
对于您的这个问题,解决方案是编写以下行 (EXECUTE p1;) 通过键入此命令,您将获得所需的输出
【讨论】:
【参考方案3】:您曾两次要求提供“合适的示例”或“证明代码”。我假设您不理解或不相信关于您的过程名称与其他对象名称冲突的解释。所以这里是证明它的例子。
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'
;
【讨论】:
以上是关于程序给出错误:ORA-00955:名称已被现有对象使用的主要内容,如果未能解决你的问题,请参考以下文章
Oracle:ORA-00955: name is already used by an existing object