限制 Oracle 创建编译错误程序

Posted

技术标签:

【中文标题】限制 Oracle 创建编译错误程序【英文标题】:Restrict Oracle from creating Compilation error Procedures 【发布时间】:2019-07-11 12:08:39 【问题描述】:

我想知道是否有办法让 Oracle 不创建 成为 Procedure/Function 如果它有任何类型的错误 .

【问题讨论】:

PL/SQL Developer(商业产品)可以选择执行此操作。它在内部生成一个临时名称,并且仅在成功编译后创建指定的对象。该过程是透明的,因此实际上不会创建无效对象。可能还有其他具有类似功能的产品。 请记住,如果您尝试加载可能具有相互依赖关系的多个对象(尤其是包),那么如果您随后编译架构,则在创建所有对象后可能会解决一个编译错误.但是,如果您在运行中删除它们 - 您可能很难进行部署,因为可能并不总是可以构建干净的依赖顺序来创建对象。 【参考方案1】:

在 CREATE 之后的 SQL 脚本中,您可以检查 ALL_ERRORS(或 dba_errors)以查找该对象上的错误,如果存在错误,则立即执行以删除它。

例如)

set serveroutput on

create or replace procedure meowner.testproc
as
begin
  select;
end;
/

DECLARE
  x number;
begin  
   select count(*) into x from all_errors
   where  owner = 'MEOWNER' and NAME='TESTPROC' ;
   if x != 0 then
      EXECUTE IMMEDIATE 'DROP PROCEDURE meowner.testproc';
      dbms_output.put_line('Dropped due to compile error');
   end if;
end;
/

PROCEDURE TESTPROC compiled
Errors: check compiler log
Dropped due to compile error
anonymous block completed

【讨论】:

【参考方案2】:

据我所知,没有。将在无效状态下创建存储过程。

不过,您可以尝试创建一个 wrapper 过程,该过程将

创建过程 检查其状态 如果它是无效,则丢弃它

【讨论】:

感谢您的回复。让我去研究一下wrapper过程

以上是关于限制 Oracle 创建编译错误程序的主要内容,如果未能解决你的问题,请参考以下文章

警告:已编译但在 oracle 中存在编译错误

Oracle 10g 程序编译错误

让 oracle 函数知道数据是不是为素数。收到警告:创建时出现编译错误的函数

错误:在简单的 hello world 程序上达到编译器限制堆限制

oracle过程异常编译错误

Excel表单对象限制?内存不足编译错误