2013-01-03 90 views
1

我有一個sqlplus腳本,如果一個變量不爲空,那麼我想執行一個腳本並傳遞值。如果它是空的,那麼我想執行一個不同的腳本。我有以下幾點:SQLPLus解碼如果值不爲空

col scr new_value script 
set term off 
select decode('&partitions', 'true', 'CreateTablesPartitions', 'CreateTables') scr from dual; 
set term on 
@@&script &partitions 

它檢查變量分區是否爲true,然後執行CreateTablePartitions。如何檢查變量分區是否爲空?

回答

4

只需在您的解碼字符串中添加空值和解碼值即可。

select decode('&partitions', 'true', 'CreateTablesPartitions', 
       null, 'itsnull', 'CreateTables') scr 
from dual; 

所以如果它爲空,那麼結果將是itsnull

1

你可以只包括null爲您解碼公認的價值:

col scr new_value script 
set term off 
set verify off 
select decode('&partitions', null, 'CreateTables', 
    'CreateTablesPartitions') as scr from dual; 
set term on 
@@&script &partitions 

...如果這將運行CreateTables輸入的partitions值爲空。

但是,因爲您有termout off,您將看不到該值的提示。您可能希望使用位置變量(&1等),具體取決於您打算如何調用此方法,但假設您希望在運行時收到提示,則可以將termout onnoprint添加到column命令(col scr new_value script noprint ),這會在輸出中給出一些空行;或早些時候設置partitions。不能使用define,因爲它不會使用空值。

最乾淨的方法可能是使用accept其自己的提示:

accept partitions prompt "Enter partitions: " 

col scr new_value script noprint 
set verify off 
set term off 
select decode('&partitions', null, 'CreateTables', 
    'CreateTablesPartitions') as scr from dual; 
set term on 
@@&script &partitions 

通過簡單的虛擬腳本調用,例如CreateTables.sql

prompt In CreateTables 

...和CreateTablesPartitions

prompt In CreateTablesPartitions with passed value "&1" 

...這給:

Enter partitions: 
In CreateTables 

...和:

Enter partitions: Test 
In CreateTablesPartitions with passed value "Test"