如果替换变量未定义,如何只调用ACCEPT?

时间:2016-09-28 09:15:43

标签: oracle user-input sqlplus

我有几个脚本要运行,每个脚本使用相同的替换变量。在每个脚本的顶部,我有:

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.

变量名已被更改以保护无辜者......

我有一个很好的谷歌和搜索这个网站的答案,但还没有找到它。我怀疑这是不可能的,因为我在这里读到的答案突出了PL / SQL和SQLPlus的限制。

1 个答案:

答案 0 :(得分: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