我正在编写一个在sqlplus 11中运行的脚本。我有一个名为compression的用户定义变量。如果这是真的那么我想运行脚本CreateTablesCompression,否则运行。我有以下内容:
decode(compression,'true',@@CreateTablesCompression,@@CreateTables);
然而,当我运行这个时,我抛出错误:未知命令开始“解码...
我在这里遗漏了什么,我看不出为什么SQLPlus不能识别解码?
答案 0 :(得分:4)
Decode
不是SQL * PLUS命令,只能在pl / sql块或查询中直接在sql * plus中使用它。所以这是一个如何完成条件分支的例子:
我们声明一个变量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
答案 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