Теория для лабораторной работы №3 - "Запросы и основы использования SQL*PLUS", страница 13

old   1: SELECT   &GROUP_COL,

new   1: SELECT   JOB,

Enter value for number_col: SAL

old   2:          MAX(&NUMBER_COL) MAXIMUM

new   2:          MAX(SAL) MAXIMUM

Enter value for table: EMP

old   3: FROM     &TABLE

new   3: FROM     EMP

Enter value for group_col: JOB

old   4: GROUP BY &GROUP_COL

new   4: GROUP BY JOB

 

SQL*Plus покажет следующее:

 

JOB           MAXIMUM

----------              ----------

ANALYST           3000

CLERK                1300

MANAGER          2975

PRESIDENT        5000

SALESMAN         1600

 

Если нужно добавить символы непосредственно после переменной подстановки, нужно использовать точку после имени переменой для разделения переменной от символа, например:

 

SQL> SELECT * FROM EMP WHERE EMPNO='&X.01';

Enter value for X:  123

 

будет интерпретировано как

 

SQL> SELECT * FROM EMP WHERE EMPNO='12301';

Избежание ненужных запросов значений

Предположим, нужно расширить файл STATS, чтобы включить  минимальное, суммарное и среднее значение столбца "number". Однако SQL*Plus запрашивает значения GROUP_COL дважды и один раз для значения NUMBER_COL в предыдущем примере и то, что каждый GROUP_COL или NUMBER_COL имеет единственный амперсанд в начале. Если добавить ещё три функции, используя один амперсанд, то SQL*Plus будет запрашивать значения четыре раза.

 

Можно избежать повторного запроса для группы и номера столбца добавлением второго амперсанда в начале GROUP_COL и NUMBER_COL в STATS. SQL*Plus автоматически определяет командой DEFINE любую переменную подстановки, предшествующую двумя амперсандами, но не определяет с одним амперсандом. Когда переменная определена SQL*Plus подставляет значение переменной для каждой переменной подстановки, которая ссылается на переменную (в форме &variable или &&variable). SQL*Plus не запросит значения переменной в этой сессии пока не выполнит команду UNDEFINE.