Toad和Oracle中过程和创建或替换过程的区别
我正在学习Oracle、PL/SQL和Toad。据我所知,程序可能从以下内容开始: 程序我的程序是 开始 我在Toad中创建了程序,它总是这样: 创建或替换过程我的\u过程是 /****(样板评论) 开始 它很好用。我粘贴我的DMLSQL,执行它,刷新我的模式浏览器,我的_过程就在那里。如果我使用Toad执行我的_过程,我的数据将按预期修改。我可以不去管它。但我不明白为什么每次我写完程序,只想运行DML时,都要创建或替换我的程序。我们的目标是拥有一个简单的过程,我的同事可以从他的一个Perl脚本调用它,或者将来可能需要的任何其他方法调用它 如果我在Toad的编辑器中打开它,删除“创建或替换”并离开过程,我会得到一个无效的SQL语法错误。当任何对象(过程或函数..)第一次创建时,“创建过程XXX..”就足够了,但为了编辑现有过程,我们需要提到“创建或替换..”。因此,Oracle知道您将要编辑现有对象 说到您的问题,Toad和Sql开发人员都是工具,因此当您创建过程并从GUI中的过程部分单击该过程名称时,它将带您进入可编辑代码。因此,默认情况下,它将“创建过程…”更改为“创建或替换…” 运行以下查询并查看过程的元数据(文本列)。它不会有“Craete或Replace…”Toad和Oracle中过程和创建或替换过程的区别,oracle,plsql,toad,Oracle,Plsql,Toad,我正在学习Oracle、PL/SQL和Toad。据我所知,程序可能从以下内容开始: 程序我的程序是 开始 我在Toad中创建了程序,它总是这样: 创建或替换过程我的\u过程是 /****(样板评论) 开始 它很好用。我粘贴我的DMLSQL,执行它,刷新我的模式浏览器,我的_过程就在那里。如果我使用Toad执行我的_过程,我的数据将按预期修改。我可以不去管它。但我不明白为什么每次我写完程序,只想运行DML时,都要创建或替换我的程序。我们的目标是拥有一个简单的过程,我的同事可以从他的一个Perl脚本
在我看来,你似乎不明白它是如何工作的 为了创建一个过程,在任何工具(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.
到目前为止还不错。不过,此过程根本不起任何作用,因此如果您想编辑其代码,您可以尝试“重用”已有的脚本(创建过程…one):
哇<代码>我的程序已存在!那么,我该怎么办
- 一种选择是先删除它,然后再重新创建:
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.
- 另一个(我们通常使用)是使用
选项:创建或替换
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.
这意味着您不必再次创建或替换该过程-它存储在数据库中,等待调用。除非发生了什么事情——这会“破坏它”(使它无效)——否则你不必再碰(重新创建)这个过程。如果您这样做,您就知道了演练:创建或替换过程my\u proc as…
因此:你所说的和困扰你的:
但我不明白为什么每次我写完程序,只想运行DML时,都要创建或替换我的程序
这完全是错误的。您不必每次都创建或替换该过程。你只要使用它。这里的问题是什么?你想知道吗?是的,如果你想创建一个对象,可以是一个表、一个视图、一个序列、一个函数。。。或者一个过程,在SQL中,您需要使用一个适当的CREATE
语句,它以CREATE
开头?正如您所说,在TYPE列中,只有procedure my_procedure是。因此,我假设,当有人从Perl脚本或APEX页面调用my_过程时,他们不是在执行创建或替换过程,而是在执行my_过程的内容,尽管我总是在Toad编辑器中看到创建或替换过程。您似乎对语法感到困惑,请参阅@littlefoot解释。如果您观察,当您创建一个新过程时,您编写的代码是“createxx procedure IS..”。但是,当您执行上述查询时,它没有“创建”部分。为什么?因为我们指示Oracle创建一个过程,并将其保存在源代码中,因此只有“过程XX是…”。因此,任何调用它(Apex/Perl)的应用程序都会看到“Procedure XX IS..”。如前所述,当您使用诸如Toad/SQL Developer之类的编码工具在GUI中查看一个过程时,它会将用户带到一个可编辑的页面,或者使格式易于导出。这就是为什么您会看到“创建或替换过程my_Procedure IS…”总之,如果该过程按预期工作,您就很好了。
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.