问题描述
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;
有人可以提供我和合适的例子吗
解决方法
从错误消息中,名称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'
;