繁体   English   中英

SQL脚本执行控制

[英]SQL script execution control

我正在寻找如何控制大型sql脚本执行的技巧。 它将包含各种DDL和DML语句。 大多数情况下,我一直在寻找DDL控件。我的意思是,基本上我有一个脚本,其中包含多个DDL语句,这些语句是从我们的一个DB生成的。 当我启动脚本时,即使在创建时出现编译错误或错误,它也会通过。 感谢任何想法

你想在错误后退出吗? 这是一些例子。 请务必查看WHENEVER SQLERROR的文档。

DDL(DML)示例:

prompt continues after error
prompt =====================
prompt

create table foo;

prompt quits after error with error code 
prompt =================================
prompt

whenever sqlerror exit sql.sqlcode

create table foo;

prompt never gets here
prompt ===============
prompt

quit

PL / SQL子程序引发异常:

create or replace function foo return number as
  foo_error exception;
begin
  raise foo_error;
end;
/
show errors

prompt continues after error
prompt =====================
prompt

select foo from dual;

prompt quits after error with error code 
prompt =================================
prompt

whenever sqlerror exit sql.sqlcode

select foo from dual;

prompt never gets here
prompt ===============
prompt

quit

PL / SQL单元编译失败:

create or replace procedure compile_function (f in varchar2) as
begin
  execute immediate 'alter function :f compile' using f;
exception
  when others then
    raise_application_error(-20000, 'Failed to compile function ' || f);
end;
/
show errors

prompt continues after error
prompt =====================
prompt

create or replace function foo return number as
begin
  compilation will fail
end;
/
show errors

exec compile_function('foo')

prompt quits after error with error code 
prompt =================================
prompt

whenever sqlerror exit sql.sqlcode

create or replace function foo return number as
begin
  compilation will fail
end;
/
show errors

exec compile_function('foo')

prompt never gets here
prompt ===============
prompt

quit

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM