2016-09-28 6 views
1

У меня есть несколько сценариев для запуска, и каждый из них использует одну и ту же переменную замещения. В верхней части каждого скрипта, у меня есть:Как только вызвать ACCEPT, если переменная замещения не определена?

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

Чтобы избежать необходимости ввести тип кофе для каждого сценария, я мог бы просто полагаться на поведение по умолчанию при использовании &&COFFEE.. везде. Тем не менее, это только дает мне подсказку 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 

Если вы используете & & то подскажет, если отключенное и PERSIST

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 

Не очень просил, но вы можете очистить объявленную переменную с помощью Undefine, а не так, как можно было бы ожидать, установив его на «NULL»:

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