如果我们在没有替换关键字的情况下创建过程,会发生什么



我在oracle10g中创建了一个过程,我的存储过程的语法是:

create procedure procname is begin --query end;

在执行此过程时,我没有使用or replace关键字。它给了我这样的信息:过程创建时出错。

它到底意味着我的过程是否已创建,如果已创建,它将取代我以前的过程,因为在执行当前过程之前,我有相同的过程名称。

错误消息:procedure created with error.表示您的过程已创建,但您将无法运行它,因为它有错误。

您可以使用:

SHOW ERRORS;

CREATE PROCEDUREDDL语句之后立即显示这些错误,或者您可以查询:

SELECT *
FROM   user_errors
WHERE  name = 'YOUR_PROCEDURE_NAME';

如果您想重新创建程序,请使用:

DROP PROCEDURE your_procedure_name;

然后使用CREATE PROCEDURE ...

或使用:

CREATE OR REPLACE PROCEDURE ...

过程已经创建(正如消息所说(,但它有错误。

没有其他具有该名称的过程(或对象(,因为你会得到";ORA-00955:名称已被现有对象使用";错误消息:

这是第一个程序,它被成功创建:

SQL> create procedure procname is
2  begin
3    null;
4  end;
5  /
Procedure created.

运行另一个create procedure,使用相同的过程名称:

SQL> create procedure procname is
2  begin
3    null;
4    --
5    null;
6  end;
7  /
create procedure procname is
*
ERROR at line 1:
ORA-00955: name is already used by an existing object

SQL>

如果";新的";程序有错误(缺少INTO子句和,其中用于放置该值(?什么都没有,还是同样的消息:

SQL> create procedure procname is
2  begin
3    select * from dual;
4  end;
5  /
create procedure procname is
*
ERROR at line 1:
ORA-00955: name is already used by an existing object

SQL>

如果您创建的过程无效,则:

SQL> create procedure procname_2 is
2  begin
3    select * from dual;
4  end;
5  /
Warning: Procedure created with compilation errors.
SQL> show err
Errors for PROCEDURE PROCNAME_2:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/3      PLS-00428: an INTO clause is expected in this SELECT statement
SQL>

最新更新