我正在寻找如何控制大型sql脚本执行的技巧。它将包含各种DDL和DML语句。大多数情况下,我一直在寻找DDL控件。我的意思是,基本上我有一个脚本,其中包含多个DDL语句,这些语句是从我们的一个DB生成的。当我启动脚本时,即使在创建时出现编译错误或错误,它也会通过。 感谢任何想法
答案 0 :(得分:2)
您想在错误后退出吗?这是一些例子。请务必查看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