2016-09-28 11 views
1

実行するスクリプトがいくつかあり、それぞれに同じ置換変数が使用されています。各スクリプトの先頭に、私が持っている:どこでも&&COFFEE..を使用した場合代入変数が未定義の場合のみACCEPTを呼び出す方法はありますか?

ACCEPT COFFEE CHAR PROMPT 'Please indicate your preferred coffee brand: '; 

すべてのスクリプトのためのコーヒーの種類を入力することを避けるために、私は単にデフォルトの動作に依存している可能性があります。しかし、これはちょうど私にEnter value for coffeeのプロンプトを得るが、あまりフレンドリーではない。

私は好奇心が強いです。 COFFEEが既に定義されているかどうかを確認する方法はありますか?それがなければACCEPT...と呼んでください。

私は、現時点ではこれを持っています。しかし

IF COFFEE IS NULL THEN 
    ACCEPT COFFEE CHAR PROMPT 'Please indicate your preferred coffee brand: '; 
END IF; 

、私はSQLPlusをでこれを実行すると、私は次のエラーを取得する:

SP2-0734: unknown command beginning "IF COFFEE I..." - rest of line ignored. 

変数名は無実を保護するために変更されました...

私は良いGoogle検索とこのサイトからの回答を検索しましたが、見つかりませんでした。私はPL/SQLとSQLPlusの限界を強調するここで答えを読んだので、それは不可能だと思う。

答えて

0

変数が定義と変数を使用しようとされていない場合は、それが要求されます:

SQL> define var1='defined' 
SQL> select '&var1' from dual; 
old 1: select '&var1' from dual 
new 1: select 'defined' from dual 

'DEFINE 
------- 
defined 

SQL> select '&var2' from dual; 
Enter value for var2: var2 
old 1: select '&var2' from dual 
new 1: select 'var2' from dual 

'VAR 
---- 
var2 

を明示的にそれが再使用される変数を定義する場合は、しかし促さものは保持されません:

SQL> define var1='SYS' 
SQL> select username from dba_users where username = '&var1'; 
old 1: select username from dba_users where username = '&var1' 
new 1: select username from dba_users where username = 'SYS' 

USERNAME 
------------------------------ 
SYS 

SQL> select username from dba_users where username = '&var1'; 
old 1: select username from dba_users where username = '&var1' 
new 1: select username from dba_users where username = 'SYS' 

USERNAME 
------------------------------ 
SYS 

SQL> select username from dba_users where username = '&var2'; 
Enter value for var2: SYSTEM 
old 1: select username from dba_users where username = '&var2' 
new 1: select username from dba_users where username = 'SYSTEM' 

USERNAME 
------------------------------ 
SYSTEM 

SQL> select username from dba_users where username = '&var2'; 
Enter value for var2: SYS 
old 1: select username from dba_users where username = '&var2' 
new 1: select username from dba_users where username = 'SYS' 

USERNAME 
------------------------------ 
SYS 

あなたが& &を使用する場合、それが未設定の場合はプロンプトを表示し、持続します

SQL> select username from dba_users where username = '&&var3'; 
Enter value for var3: SYS 
old 1: select username from dba_users where username = '&&var3' 
new 1: select username from dba_users where username = 'SYS' 

USERNAME 
------------------------------ 
SYS 

SQL> select username from dba_users where username = '&&var3'; 
old 1: select username from dba_users where username = '&&var3' 
new 1: select username from dba_users where username = 'SYS' 

USERNAME 
------------------------------ 
SYS 

SQL> select username from dba_users where username = '&var3'; 
old 1: select username from dba_users where username = '&var3' 
new 1: select username from dba_users where username = 'SYS' 

USERNAME 
------------------------------ 
SYS 

は本当に頼まれていないが、あなたが期待するかもしれないとして、あなたは「NULL」に設定することで、UNDEFINEを使用して宣言された変数をクリアし、することはできません。

SQL> define var3=NULL; 
SQL> select username from dba_users where username = '&var3'; 
old 1: select username from dba_users where username = '&var3' 
new 1: select username from dba_users where username = 'NULL' 
SQL> undefine var3; 
SQL> select username from dba_users where username = '&var3'; 
Enter value for var3: SYS 
old 1: select username from dba_users where username = '&var3' 
new 1: select username from dba_users where username = 'SYS' 

USERNAME 
------------------------------ 
SYS 
関連する問題