при имевшем место ранее определении этой переменной.
Определение и установка значений переменной
с использованием команды AC C E P T
Команда ACCEPT ожидает, пока пользователь не введет значение переменной.
Эту команду можно использовать для задания нового значения
существующей переменной или для определения новой переменной и
инициализации ее значением. Команда ACCEPT позволяет также определить
тип данных для вашей переменной. Упрощенный синтаксис команды
ACCEPT выглядит следующим образом:
□ ACCEPT имя.переменной [тип] [FORMAT формат] [PROMPT текст.подсказки]
[HIDE]
где
■ имя.переменной определяет имя, назначаемое переменной,
■ тип определяет тип данных переменной. Можно использовать следующие
типы данных: CHAR, NUMBER и DATE. По умолчанию переменным
присваивается тип данных CHAR. Переменные DATE на самом деле хранятся
как символьные переменные,
■ формат указывает используемый для переменной формат. Примеры
формата: А15 (15-символьная строка), 9999 (четырехзначное число)
и DD-M0N-YYYY (дата). С числовыми форматами можно ознакомится
в таблице 4.4 главы 4, а с форматами дат - в таблице 5.2 главы 5,
Использование SQL*Plus 83
■ текст_подсказки текст, выводимый SQDPlus как подсказка для пользователя
при вводе значения переменной,
■ H ID E указывает, что вводимое для переменной значение должно
быть скрытым. Например, можно скрыть от посторонних глаз пароль
или какую-то другую важную информацию. Скрытые значения
выводятся в виде звездочек (*).
Рассмотрим несколько примеров использования команды ACCEPT. В
первом примере переменная по имени v_customer_id определяется как
двузначное число:
П SQL> ACCEPT v_customer_id NUMBER FORMAT 99 PROMPT 'Customers id: '
Customer id: 5
В следующем примере определяется переменная типа DATE по имени v_
date; для этой переменной используется формат DD-MON-YYYY:
□ SQL> ACCEPT v_date DATE FORMAT 'DD-MON-YYYY' PROMPT 'Date: '
Date: 12-DEC-2006
В следующем примере определяется символьная (CHAR) переменная с
именем v_password; вводимое в нее значение скрывается при помощи опции
HIDE:
□ SQL> ACCEPT v_password CHAR PROMPT 'Password: ' HIDE
Password: *******
В Oracle9i и более ранних версиях введенное значение появляется как
строка звездочек (* ), скрывающих вводимое вами значение. В OraclelOg
при вводе такого значения на экран не выводится ничего.
Можно увидеть переменные, используя команду DEFINE:
□ SQL> DEFINE
DEFINE V_CUSTOMER_ID = 5 (NUMBER)
DEFINE V_DATE = “ 12-DEC-2006” (CHAR)
DEFINE V_PASSWORD = “ 1234567” (CHAR)
DEFINE V_PRODUCT_ID =”7” (CHAR)
Обратите внимание, что переменная v_date хранится как символьная
переменная (CHAR).
Удаление переменных при помощи команды U N D E F IN E
Для удаления переменных используется команда UNDEFINE. В приведенном
ниже примере команда UNDEFINE используется для удаления переменных
v_customer_id, v_date, v_password и v_product_id:
□ SQL> UNDEFINE v_customer_id
SQL> UNDEFINE v_date
SQL> UNDEFINE v_password
SQL> UNDEFINE v_product_id
Примечание Все определенные вами переменные будут удалены при выходе из SQL*Plus,
даже если вы не удалили их явно с помощью команды UNDEFINE.
84 Глава 3
Создание простых отчетов
Вы можете использовать переменные в сценарии SQI?Plus для создания
отчётов, которые могут быть выполнены пользователем. Сценарии, указанные
в этой главе, вы можете найти в папке SQL.
Совет SQL*Plus не проектировался как специализированный инструмент для генерации
отчетов. При достаточно сложных требованиях к генерируемым отчетам следует воспользоваться
программным обеспечением типа Oracle Reports.
Использование в сценариях временных переменных
Приведенный ниже отчет report 1.sql использует во фразе WHERE оператора
SELECT временную переменную с именем v_product_id:
□ - - suppress d is p la y of the statements and v e r i f i c a t io n messages
--(подавляет вывод операторов и сообщений подтверждения)
SET ECHO OFF
SET VERIFY OFF
SELECT product_id, name, p r ice
FROM products
WHERE product_id = &v_product_id;
Команда SET ECHO OFF не позволяет SQLfPlus вывести на экран операторы
SQL и команды SQLfPlus, содержащиеся в сценарии. Команда SET VERIFY
OFF подавляет вывод сообщений подтверждения. Здесь использованы две
эти команды, чтобы свести к минимуму число дополнительных строк, выводимых
SQLfPlus при выполнении сценария.
Сценарий reportl.sql можно выполнить, используя команду @:
□ SQL> § C:\sql_book\SQL\report1.sql
Enter value fo r v_ produ c t_id: 2
PRODUCTJD NAME PRICE
2 Chemistry 30
Вам потребуется изменить путь к папке в примере на ту папку, в которой
вы сохранили файлы для этой книги. Если в имени папки есть пробелы, вам