Когда форматирование столбцов очищено, все выходные данные запроса
снова начинают использовать форматы столбцов, принятые по
умолчанию.
Использование переменных
В этом разделе показано, как создавать переменные, которые можно использовать
в операторах SQL вместо реальных значений. Эти переменные
известны как подстановочные переменные, так как они используются как
заменитель реальных значений. При выполнении оператора SQL вводятся
значения переменных, затем эти значения подставляются в оператор
SQL.
Есть два основных типа переменных, которые можно использовать
в SQDTlus:
■ временные переменные Эти переменные действительны только для
того оператора SQL, в котором они используются, и они не являются
постоянными;
■ определенные переменные Определенная переменная постоянно существует
до тех пор, пока вы явно не удалите ее, не переопределите
или не выйдете из SQDPlus.
В этом разделе вы узнаете, как использовать эти типы переменных.
78 Глава 3
Временные переменные
Временные переменные в операторе SQL можно определить, используя
знак амперсанда (&), за которым следует имя, которым вы хотите назвать
переменную. Например, &v_product_id определяет переменную с именем
v_product_id.
Когда выполняется следующий оператор SELECT, SQITPlus предлагает
ввести значение v_product_id и затем использует это введенное значение
переменной во фразе WHERE оператора SELECT. Если ввести для v_product_id
значение 2, будут отображены детали для товара № 2.
□ SQL> SELECT PRODUCT_ID, NAME, PRICE
2 from PRODUCTS
3 where product_id = &v_product_id;
Enter value for v_product_id: 2
old 3: WHERE product_id = &v_product_id
new 3: WHERE product_id = 2
PRODUCT_ID NAME PRICE
2 Chemistry * 30
SQITPlus выполняет следующие действия:
■ предлагает ввести значение v_product_id;
■ замещает введенным значением v_product_id значение во фразе
WHERE.
SQL? Plus показывает это замещение в строках old и new выходных данных
вместе с номером строки запроса, для которой выполнялось замещение.
В предыдущем примере значения строк old и new указывают на то, что значение
v_product_id во фразе WHERE оператора SELECT было изменено на 2.
Если еще раз запустить этот же запрос с помощью символа слэш (/ ),
SQITPlus попросит ввести новое значение v_product_id:
□ SQL> /
Enter value fo r v_ produ c t_id: 3
old 3: WHERE product_id = &v_product_id
new 3: WHERE product_id = 3
PR0DUCT_ID NAME PRICE
3 Supernova 25.99
И снова SQITPlus повторяет старую (old) строку оператора SQL (old 3:
WHERE product_id = &v_product_id), а за ней следует новая (new) строка, содержащая
введенное значение переменной (new 3: WHERE product_id = 3).
Управление строками выходных данных
Можно управлять выводом старого и нового значений, используя команду
SET VERIFY. Если ввести SET VERIFY OFF, вывод старого и нового значений
будет подавлен:
Использование SQL*Plus 79
Почему переменные полезны?
Переменные полезны, потому что с их помощью можно создавать сценарии,
которые сможет выполнять пользователь, не знающий SQL.
Такой сценарий предложит пользователю ввести значение переменной,
а затем использует это значение в операторе. Давайте рассмотрим
пример.
Предположим, что нужно создать сценарий для пользователя, который
не знает SQL, но хотел бы ознакомиться с детальной информацией
об одном из конкретных товаров магазина. Чтобы добиться этого,
можно было бы жестко закодировать значение product_id во фразе
WHERE оператора SELECT и поместить этот оператор в сценарий SQITPlus.
Оператор SELECT выбирает сведения о товаре № 1:
SELECT product_id, name, p r ic e
FROM products
WHERE product_id =1;
Этот запрос работает, но только для одного товара. Что будет, если
нужно изменить значение product_id, чтобы извлечь строку для другого
товара? Придется модифицировать сценарий, но это весьма скучная
работа. Было бы великолепно, если бы можно было передать значение
для столбца product_id переменной во фразе WHERE непосредственно
во время выполнения запроса. Переменные позволяют писать
обобщенные запросы, которые будут работать для любого товара, а
пользователь будет только вводить значение для соответствующей переменной.
□ SQL> SET VERIFY OFF
SQL> /
Enter value fo r v_ produ c t_id: 4
PRODUCT_ID NAME PRICE
4 Tank War 13.95
Чтобы снова включить повторение строк, можно ввести SET VERIFY ON:
□ SQL> SET VERIFY ON
Изменение символа определения переменной
Можно использовать команду SET DEFINE для того, чтобы назначить для
определения переменных какой-либо другой символ, отличный от амперсанда