Выбрать главу

Когда форматирование столбцов очищено, все выходные данные запроса

снова начинают использовать форматы столбцов, принятые по

умолчанию.

Использование переменных

В этом разделе показано, как создавать переменные, которые можно использовать

в операторах 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 для того, чтобы назначить для

определения переменных какой-либо другой символ, отличный от амперсанда