2012-11-12 63 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