SQL脚本执行控制

SQL脚本执行控制,sql,oracle,plsql,sqlplus,Sql,Oracle,Plsql,Sqlplus,我正在寻找如何控制大型sql脚本执行的技巧。它将包含各种DDL和DML语句。我主要是在寻找DDL控件。我的实际意思是,基本上我有一个脚本,其中包含多个DDL语句,这些语句是从我们的一个DBs生成的。当我启动脚本时,即使存在编译错误或创建错误,它也会运行。 Thx对于任何想法您想在出现错误后退出吗?这里有几个例子。请务必检查的文档 DDL(DML)示例: PL/SQL子程序引发异常: create or replace function foo return number as foo_err

我正在寻找如何控制大型sql脚本执行的技巧。它将包含各种DDL和DML语句。我主要是在寻找DDL控件。我的实际意思是,基本上我有一个脚本,其中包含多个DDL语句,这些语句是从我们的一个DBs生成的。当我启动脚本时,即使存在编译错误或创建错误,它也会运行。
Thx对于任何想法

您想在出现错误后退出吗?这里有几个例子。请务必检查的文档

DDL(DML)示例:

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 db使用sqlplus(@file.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