Речь идет о переменных подстановки Oracle * SQL.
- если вы используете
&
, вам будет предложено каждый раз вводить значение переменной
- если вы используете
&&
, вам не будет предложено использовать переменную, значение которой уже введено
Вот пример. Я устанавливаю формат даты по умолчанию и выбираю сегодняшнюю дату:
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
Если вы хотите изменить его значение, undefine сначала:
SQL> undefine days
SQL> /
Enter value for days: