我有几个脚本要运行,每个脚本使用相同的替换变量。在每个脚本的顶部,我有:
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的限制。
答案 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