SQL脚本执行控制

Posted

技术标签:

【中文标题】SQL脚本执行控制【英文标题】:SQL script execution control 【发布时间】:2011-09-19 19:27:13 【问题描述】:

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

【问题讨论】:

你是如何运行脚本的? 它的 oracle 数据库,使用 sqlplus(@file.sql) 因为这会更容易解决 请注意,根据脚本的不同,如果之前的语句也有错误,某些语句会出错。例如,如果基表不存在,则通常无法创建索引和约束。另一方面,有些语句在其他方面是完整的(别名),这可能会给其他程序关于数据库状态的想法(由于新错误)根本不正确。 【参考方案1】:

您想在出错后退出吗?这里有几个例子。请务必查看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

【讨论】:

以上是关于SQL脚本执行控制的主要内容,如果未能解决你的问题,请参考以下文章

MySQL控制台执行.sql脚本文件

控制休眠sql脚本运行

SQL 数据更改时触发脚本

如何在heroku上执行.sql脚本?

怎样执行.sql文件

SQL*Plus中怎么执行多个*sql脚本文件