如果我强制所有PL / SQL软件包都没有EXIT语句,将会有什么影响?

时间:2019-11-05 08:02:10

标签: oracle plsql

在特定产品中,特定安装中有许多RewriteEngine on RewriteRule ^([0-9]+) index.php?order=$1 [NC,L] 。即使删除了RewriteEngine on RewriteRule ^([a-zA-Z]+) index.php?order=$1 [NC,L] 语句,我们也进行了检查,处理速度更快。并不会改变我们的流程。包裹中的退出语句有什么影响?

packages

1 个答案:

答案 0 :(得分:2)

好吧,EXIT当然不是那些的一部分,因为它仅用于退出循环:

SQL> create or replace package pkg_test as
  2    procedure p_test;
  3  end;
  4  /

Package created.

SQL> create or replace package body pkg_test as
  2    procedure p_test is
  3      begin
  4        null;
  5        exit;          --> exit is here
  6    end;
  7  end;
  8  /

Warning: Package Body created with compilation errors.

SQL> show err
Errors for PACKAGE BODY PKG_TEST:

LINE/COL ERROR
-------- -----------------------------------------------------------------
5/7      PL/SQL: Statement ignored
5/7      PLS-00376: illegal EXIT/CONTINUE statement; it must appear inside
         a loop

SQL>

作为SQL * Plus命令,EXIT(来自documentation

  

提交或回滚所有未决的更改,注销Oracle数据库,终止SQL * Plus并将控制权返回给操作系统。

我假设您在创建数据库对象的.SQL脚本的末尾使用它(至少,这就是我对您提到的“在特定的安装中”的理解)。

如果是这样,您会看到它的作用。如果省略它,则处理过程到达.SQL脚本的末尾时,它将保留在SQL * Plus中,并且不会退出,因此您必须手动进行处理。

最后,create package和类似的命令都是DDL,它们会隐式提交,因此-您在脚本末尾的commit几乎没有用(除非有些DML我们看不到)