0
我在寻找提示如何控制大型sql脚本的执行。它将包含各种DDL和DML语句。大多数情况下,我一直在寻找DDL control.What实际上是什么意思是,基本上我有一个脚本与多个DDL语句,从我们的DB之一生成。当我启动脚本时,即使编译错误或创建错误,也会通过脚本。 Thx对于任何想法SQL脚本执行控制
我在寻找提示如何控制大型sql脚本的执行。它将包含各种DDL和DML语句。大多数情况下,我一直在寻找DDL control.What实际上是什么意思是,基本上我有一个脚本与多个DDL语句,从我们的DB之一生成。当我启动脚本时,即使编译错误或创建错误,也会通过脚本。 Thx对于任何想法SQL脚本执行控制
想要在出错后退出吗?这里有几个例子。一定要检查文件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
你是如何运行脚本? –
它的oracle数据库,使用sqlplus(@ file.sql),因为这会更容易解决方案 – Mike
请注意,根据脚本,如果以前的语句也有错误,某些语句将会出错。例如,如果基表不存在,通常不能创建索引和约束。反过来说,有些陈述是完整的(别名),这可能会让其他程序知道数据库的状态(由于新错误)根本不成立。 –