2

我正在编写一个要在 sqlplus 11 中运行的脚本。我有一个名为压缩的用户定义变量。如果这是真的,那么我想运行脚本 CreateTablesCompression,否则运行。我有以下内容:

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

但是,当我运行它时,我抛出了错误:未知命令开始“解码......

我在这里遗漏了什么吗,我不明白为什么 SQLPlus 不能识别解码?

4

2 回答 2

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                                                                        
于 2012-11-12T14:56:07.567 回答
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
于 2012-11-12T15:00:38.173 回答