这是关于 Oracle 的 SQL*Plus 替换变量的。
- 如果使用
&,每次都会提示输入变量值
- 如果您使用
&&,则不会提示您使用已输入值的变量
这是一个例子。我正在设置默认日期格式并选择今天的日期:
SQL> alter session set nls_date_format = 'dd.mm.yyyy';
Session altered.
SQL> select trunc(sysdate) l_today from dual;
L_TODAY
----------
13.01.2019
现在,我们为什么在这里。首先,我只使用了一个&,系统会提示两次输入我从今天的日期中减去的天数:
SQL> select trunc(sysdate - &days) l_one,
2 to_char(trunc(sysdate - &days), 'yyyy-mm-dd') l_two
3 from dual;
Enter value for days: 5
old 1: select trunc(sysdate - &days) l_one,
new 1: select trunc(sysdate - 5) l_one,
Enter value for days: 5
old 2: to_char(trunc(sysdate - &days), 'yyyy-mm-dd') l_two
new 2: to_char(trunc(sysdate - 5), 'yyyy-mm-dd') l_two
L_ONE L_TWO
---------- ----------
08.01.2019 2019-01-08
但是,如果我使用&&,我只会被提示一次:
SQL> select trunc(sysdate - &&days) l_one,
2 to_char(trunc(sysdate - &&days), 'yyyy-mm-dd') l_two
3 from dual;
Enter value for days: 10
old 1: select trunc(sysdate - &&days) l_one,
new 1: select trunc(sysdate - 10) l_one,
old 2: to_char(trunc(sysdate - &&days), 'yyyy-mm-dd') l_two
new 2: to_char(trunc(sysdate - 10), 'yyyy-mm-dd') l_two
L_ONE L_TWO
---------- ----------
03.01.2019 2019-01-03
SQL>
因此,它可以节省您一些时间并减少出错的可能性。
请注意 - 如果您使用 && 并再次运行相同的代码,则不会提示您输入变量的值 - 它会自动被重新使用:
SQL> /
old 1: select trunc(sysdate - &&days) l_one,
new 1: select trunc(sysdate - 10) l_one,
old 2: to_char(trunc(sysdate - &&days), 'yyyy-mm-dd') l_two
new 2: to_char(trunc(sysdate - 10), 'yyyy-mm-dd') l_two
L_ONE L_TWO
---------- ----------
03.01.2019 2019-01-03
如果要更改其值,请先取消定义:
SQL> undefine days
SQL> /
Enter value for days: