2011-09-19 115 views
0

我在尋找提示如何控制大型sql腳本的執行。它將包含各種DDL和DML語句。大多數情況下,我一直在尋找DDL control.What實際上是什麼意思是,基本上我有一個腳本與多個DDL語句,從我們的DB之一生成。當我啓動腳本時,即使編譯錯誤或創建錯誤,也會通過腳本。 Thx對於任何想法SQL腳本執行控制

+0

你是如何運行腳本? –

+0

它的oracle數據庫,使用sqlplus(@ file.sql),因爲這會更容易解決方案 – Mike

+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