2012-12-14 128 views
4

我們有一堆腳本來重新爲我們的數據庫建立基線。我們運行腳本調用一堆其他的腳本:是否可以將變量傳遞給SQL/DDL腳本?

@@set_target_schema 
@@drop_all 

-- do some other stuff - create tables, insert data, etc 

commit; 

set_target_schema.sql樣子:

define TARGET_SCHEMA="OUR_APP_NAME" 

有沒有辦法通過一個可選的參數到我們的頂級腳本,然後傳遞參數轉換爲set_target_schema.sql,並使用該值作爲模式的名稱,否則使用默認值?

+0

雖然,說實話,這可能是值得通過腳本語言連接並使​​用動態SQL。 – 2012-12-14 20:34:02

回答

3

爲了能夠使用默認值,你可以做這樣的事情:

在你的主文件:

SET VERIFY OFF 

-- specify as many substitution variable as you need to. 
COLUMN 1 NEW_VALUE 1 noprint 
COLUMN 2 NEW_VALUE 2 noprint 
REM COLUMN 3 NEW_VALUE 3 noprint 
REM .......... 
REM COLUMN <N> NEW_VALUE <N> noprint  

SELECT '' "1" 
    , '' "2" 
    FROM dual 
WHERE 0 = 1; 

-- Default values. 
select decode('&1', null, 'Default1', '&1') "1" 
    , decode('&2', null, 'Default1', '&2') "2" 
from dual; 

-- prints substitution variables' values 
@@set_target_schema.sql '&1' '&2' 

undefine 1 
undefine 2 

結果:

-- without parameters 
SQL> @c:\main.sql 


'DEFAULT 'DEFAULT                
-------- --------                
Default1 Default1  


-- with parameters               
SQL> @c:\main.sql parameter1 parameter2 


'PARAMETER 'PARAMETER               
---------- ----------               
parameter1 parameter2               
相關問題