2012-11-12 97 views
2

我正在寫一個腳本在sqlplus 11中運行。我有一個用戶定義的變量叫做壓縮。如果這是真的,那麼我想運行腳本CreateTablesCompression,否則運行。我有以下幾點:SQLplus解碼執行腳本

decode(compression,'true',@@CreateTablesCompression,@@CreateTables); 

然而,當我運行此我拋出的錯誤:未知的命令開頭「解碼...

我失去了一些東西在這裏,我不明白爲什麼的SQLPlus止跌't認識解碼嗎?

回答

4

Decode不是SQL * PLUS命令,你不能直接在sql * plus中直接在pl/sql塊或查詢中使用它,所以這裏是一個例子,說明條件分支可以是完成: 我們聲明一個變量flag,它將管理要運行的兩個可用腳本中的哪一個。

SQL> variable flag varchar2(7); 
SQL> exec :flag := 'true'; 

PL/SQL procedure successfully completed. 

SQL> column our_script new_value script noprint; 
SQL> select decode(:flag, 'true', 
    2    'c:\sqlplus\script1.sql', 
    3    'c:\sqlplus\script2.sql' 
    4    ) our_script 
    5 from dual; 




SQL> @&script; 

SCRIPT                   
--------                   
script_1                   
2
SQL> host cat foo.sql 
set scan on 
define compression=&1 
col scr new_value script 
set term off 
select decode('&compression', 'true', 'CreateTablesCompression', 'CreateTables') scr from dual; 
set term on 
@@&script 

SQL> @foo true 
run CreateTablesCompression.sql 
SQL> @foo false 
run CreateTables.sql 
+0

很好的答案,我覺得我必須接受對方的回答,因爲它爲其他人提供的解釋,以及 – Fraser