(&). В следующем примере показано, как установить символ определения
переменной равным символу «диез» (#), используя команду SET
DEFINE, и как будет выглядеть новый оператор SELECT:
□ SQL> SET DEFINE '#'
SQL> SELECT product_id, name, price
2 FROM products
3 WHERE product_id = #v_product_id;
80 Глава 3
Enter value fo r v _pro du c t_ id: 5
old 3: WHERE product_id = #v_product_id
new 3: WHERE product_id = 5
PRODUCT_ID NAME PRICE
5 Z F i le s 49.99
В следующем примере команда SET DEFINE используется для возврата к
амперсанду:
□ SQL> SET DEFINE
Замена названий таблиц и столбцов с использованием
переменных
Переменные можно использовать для замены не только значений столбцов,
но и названий таблиц и столбцов. Следующий запрос определяет переменные,
в которые можно ввести либо название столбца (v_col) или таблицы
(v_table), либо значение столбца (v_val):
□ SQL> SELECT name, &v_col -
2 FROM &v_table
3 WHERE &v_col = &v_val;
Enter value fo r v_coclass="underline" product_type_id
old 1: SELECT name, &v_col
new 1: SELECT name, product_type_id
Enter value fo r v_table: products
old 2: FROM &v_table
new 2: FROM products
Enter value fo r v_coclass="underline" product_type_id
Enter value fo r v_vaclass="underline" 1
old 3: WHERE &v_col = &v_val
new 3: WHERE product_type_id = 1
NAME PRODUCT_TYPE_ID
Modern Science 1
Chemistry 1
Можно уйти от повторного ввода переменных, если воспользоваться
двумя символами амперсанда (&&):
□ SELECT name, &&v_col
FROM &v_table
WHERE &&v_col = &v_val;
Enter value fo r v_coclass="underline" product_type_id
old 1: SELECT name, &&v_col
new 1: SELECT name, product_type_id
Enter value fo r v_table: products
old 2: FROM &v_table
new 2: FROM products
Enter value fo r v_vaclass="underline" 1
old 3: WHERE &&v_col = &v_val
new 3: WHERE product_type_id = 1
Использование SQL*Plus 81
NAME PRODUCT_TYPE_ID
Modern Science
Chemistry
11
Возможность задавать имена столбцов и таблиц, а также значения
столбцов дает высокую гибкость при написании интерактивных запросов,
которые могут выполнять другие пользователи. Этим пользователям не
требуется писать операторы SQL: можно просто передать им сценарий
и позволить вводить значения переменных для запроса.
Определенные переменные
Переменную можно определить перед ее использованием в операторе
SQL. Такие переменные можно многократно использовать в операторе
SQL. Определенная переменная продолжает существовать, пока она не будет
явно удалена, переопределена или пока пользователь не выйдет из
сеанса SQLTlus.
Для определения переменной используется команда DEFINE. После того
как действия с определенной переменной закончатся, ее можно удалить,
используя команду UNDEFINE. В этом разделе представлены обе эти команды.
Здесь рассказывается также о команде ACCEPT, которая позволяет определить
переменную и указать для нее тип.
Кроме того, можно определять переменные в сценариях SQITPlus
и придавать значения этим переменным при выполнении сценария. Это
дает возможность писать типовые отчеты, которые может выполнять любой
пользователь, даже если он не знаком с SQL (см. ниже раздел «Создание
простых отчетов»).
Определение и распечатка переменных с использованием
команды D E F IN E
Команда DEFINE используется как для определения новых переменных, так
и для распечатки определенных в настоящий момент переменных. В следующем
примере определяется новая переменная по имени v_product_id
и устанавливается ее значение (оно равно 7):
□ SQL> DEFINE v_product_id = 7
С определением переменной можно ознакомиться, если в команде
DEFINE указать имя этой переменной. Следующий пример выводит определение
переменной v_product_id:
□ SQL> DEFINE v_product_id
DEFINE V_PRODUCT_ID = “7" (CHAR)
Обратите внимание, что переменная v_product_id определена как символьная
переменная.
Можно увидеть все переменные сеанса, если задать команду DEFINE без
уточнений:
П SQL> DEFINE
DEFINE _DATE = “ 12-AUG-07" (CHAR)
82 Глава 3
DEFINE .CONNECT.IDENTIFIER = “Oracle11g” (CHAR)
DEFINE _USER = “STORE” (CHAR)
DEFINE .PRIVILEGE = (CHAR)
DEFINE _SQLPLUS_RELEASE = “ 1101000400” (CHAR)
DEFINE .EDITOR = “Notepad” (CHAR)
DEFINE .O.VERSION = “Oracle Database l l g ...” (CHAR)
DEFINE .O.RELEASE = “ 1101000500” (CHAR)
DEFINE _RC = “0” (CHAR)
DEFINE V.PRODUCT.ID =”7" (CHAR)
Определенную переменную можно использовать для указания таких
элементов, как значения столбцов в операторе SQL. В следующем запросе
ранее определенная переменная v .p ro d u c t . id используется для ссылки на
нее во фразе WHERE:
□ SQL> SELECT product.id, name, price
2 FROM products
3 WHERE product.id = &v_product_id;
old 3: WHERE pro d u c t .id = &v_product_id
new 3: WHERE pro d u c t .id = 7
PRODUCT.ID NAME PRICE
7 Space Force 9 13.49
Обратите внимание: вам не предлагалось ввести значение переменной
v .p ro d u c t . id ; это связано с тем, что эта переменная была установлена на 7