限制 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 函数知道数据是不是为素数。收到警告:创建时出现编译错误的函数