2

sqlplus 11 で実行するスクリプトを作成しています。compression というユーザー定義変数があります。これが true の場合、CreateTablesCompression スクリプトを実行します。それ以外の場合は実行します。私は次のものを持っています:

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

ただし、これを実行すると、次のエラーがスローされます: 不明なコマンドの開始 "デコード...

SQLPlus がデコードを認識しない理由がわかりません。

4

2 に答える 2

4

Decodeは SQL*PLUS コマンドではないため、pl/sql ブロッ​​クまたはクエリ内でのみ sql*plus で直接使用することはできません。条件付き分岐を実行する方法の例を次に示します。変数を宣言してflag、2 つの利用可能なスクリプトのうちどちらを実行するかを制御します。

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 に答える