【问题标题】:Procedures giving error : ORA-00955: name is already used by an existing object程序给出错误:ORA-00955:名称已被现有对象使用
【发布时间】: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 productcreate or replace procedure p1 这两个语句中的哪一个给出了错误?如果是过程,那么该架构中是否还有其他名称相同的内容?

标签: oracle stored-procedures plsql


【解决方案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Özhan or 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'
    ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多