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
請注意,根據腳本,如果以前的語句也有錯誤,某些語句將會出錯。例如,如果基表不存在,通常不能創建索引和約束。反過來說,有些陳述是完整的(別名),這可能會讓其他程序知道數據庫的狀態(由於新錯誤)根本不成立。 –