在我看来,你好像不明白它是如何工作的。
为了创建一个过程,在任何工具(SQL*Plus、SQL Developer、TOAD、...)中,您必须使用适当的语法,即
CREATE PROCEDURE my_proc AS ...
例如:
SQL> create procedure my_proc as
2 begin
3 null;
4 end;
5 /
Procedure created.
为了运行(执行)它,你可以称它为
SQL> begin
2 my_proc;
3 end;
4 /
PL/SQL procedure successfully completed.
到目前为止一切顺利。虽然,这个过程根本没有做任何事情,所以如果你想编辑它的代码,你会尝试“重用”你已经拥有的脚本(create procedure ... 之一):
SQL> create procedure my_proc as
2 l_cnt number;
3 begin
4 select count(*) into l_cnt from dual;
5 end;
6 /
create procedure my_proc as
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
哎呀! my_proc 已经存在!那么,我该怎么办?
-
一种选择是先删除它,然后再创建它:
SQL> drop procedure my_proc;
Procedure dropped.
SQL> create procedure my_proc as
2 l_cnt number;
3 begin
4 select count(*) into l_cnt from dual;
5 end;
6 /
Procedure created.
-
另一个(我们通常使用的)是使用create or replace选项:
SQL> create or replace procedure my_proc as
2 l_cnt number;
3 begin
4 select count(*) into l_cnt from dual;
5 end;
6 /
Procedure created.
当然,你还是像以前一样使用它:
SQL> begin
2 my_proc;
3 end;
4 /
PL/SQL procedure successfully completed.
现在,假设你们所有人(您和您的同事)都睡觉了,明天早上有人想要运行该程序。没问题 - 他们会使用我上次发布的相同代码:
SQL> begin
2 my_proc;
3 end;
4 /
PL/SQL procedure successfully completed.
这意味着你不必再次create or replace该过程 - 它存储在数据库中,等待被调用。除非发生了某些事情——这会“破坏它”(使其无效)——你不必再次触摸(重新创建)该过程。如果你这样做了,你就知道了:create or replace procedure my_proc as ...
因此:您所说的和困扰您的:
但我不明白为什么每次我写完我的 PROCEDURE 并只想运行 DML 时都要创建或替换它。
只是错误。您不必每次都create or replace 该过程。你就用它吧。