придётся поместить в кавычки всё, что следует после команды @ , например:
□ @ “C:\my d i r e c to r y \ s q l book\SQL\report1. s q l ”
Использование определенных переменных в сценарии
Следующий сценарий (report2.sql) использует для определения переменной
v_product_id команду ACCEPT:
□ SET ECHO OFF
SET VERIFY OFF
ACCEPT v_product_id NUMBER FORMAT 99 PROMPT 'E n te r product id: ‘
SELECT product_id, name, p r ice
Использование SQL*Plus 85
FROM products
WHERE product_id = &v_product_id;
— clean up
— (очистка переменных)
UNDEFINE v_product_id
Обратите внимание, что подсказка-приглашение на ввод v_product_id
сформулирована в дружественном к пользователю виде, а в конце выполнения
сценария переменная v_product_id удаляется - это делает сценарий
«опрятнее».
Выполнить сценарий report2.sql можно, используя SQLfPlus:
П SQL> @С:\sql_book\SQL\report2.sql
Enter product id: 4
PRODUCT_ID NAME PRICE
4 Tank War 13.95
Передана значения переменной в сценарии
При выполнении сценария в него можно передавать значение переменной.
При этом надо ссылаться на переменную, используя некоторое число.
Приведенный ниже сценарий report3.sql служит примером сказанного.
Для идентификации переменной используется выражение &1:
□ SET ECHO OFF
SET VERIFY OFF
SELECT product_id, name, pr ice
FROM products
WHERE product_id = &1;
При выполнении отчета report3.sql нужно указать значение этой переменной
после имени сценария. В приводимом ниже примере в сценарий
report3.sql передается значение 3:
□ SQL> @ C: \SQL \ repo r t3 .sql 3
PRODUCT_ID NAME PRICE
3 Supernova 25.99
В сценарий можно добавить любое число параметров, причем каждое
значение, указанное в командной строке, соответствует номеру параметра
в файле. Так, первый параметр соответствует &1, второй - &2 и т. д. В приведенном
ниже сценарии report4.sql показан пример использования двух
параметров:
□ SELECT product_id, рroduc t_type_id, name, p r ice
FROM products
WHERE product_type_id = &1
AND p r ic e > &2;
86 Глава 3
Следующий пример выполнения сценария report4.sql демонстрирует
добавление двух значений для &1 и &2, которые устанавливаются равными
1 и 9.99 соответственно:
□ SQL> @ C : \SQL \ repo r t4 .sql 1 9.99
PRODUCT_ID PRODUCT_TYPE_ID NAME PRICE
1 1 Modern Science 19.95
2 1 Chemistry 30
Поскольку &I установлен на 1, значение столбца product_type_id во
фразе WHERE также устанавливается на 1. Аналогично, поскольку &2 установлен
на 9.99, столбец price во фразе WHERE также устанавливается на 9.99.
Следовательно, будут выведены строки, в которых product_type_id = 1
и price > 9.99.
Добавление верхних и нижних колонтитулов
Верхние и нижние колонтитулы отчета добавляются с помощью команд
TTITLE и BTITLE. Вот пример команды TTITLE:
П TTITLE LEFT ‘ Run date: ‘ _DATE CENTER ‘ Run by the ' SQL.USER ‘ u s e r ’
RIGHT ‘ Page: ‘ FORMAT 999 SQL>PN0 SKIP 2
В списке ниже объясняется содержимое этой команды:
■ _DATE отображает текущую дату,
■ SQL. USER отображает текущего пользователя,
■ SQL.PN0 отображает текущую страницу (для форматирования числа
используется FORMAT),
■ LEFT, CENTER и RIGHT выравнивают текст,
■ SKIP 2 проп уска е т две с троки .
Если бы пример был запущен 12 августа 2007 года пользователем store,
он бы показал:
□ Run date: 12-AUG-07 Run by the STORE user Page: 1
Ниже приведён пример для команды BTITLE:
□ BTITLE CENTER ‘ Thanks fo r running the re p o r t ’ RIGHT ‘ Page: ‘ FORMAT 999
SQL.PNO
Эта команда выводит:
П Thanks fo r running the report Page: 1
Приведенный ниже сценарий report5.sql содержит команды TTITLE и
BTITLE:
□ TTITLE LEFT ‘ Run date: ' _DATE CENTER ‘ Run by the ‘ SQL.USER ' u s e r ’
RIGHT ‘ Page: ' FORMAT 999 SQL>PN0 SKIP 2
BTITLE CENTER ‘ Thanks fo r running the re p o r t ’ RIGHT ‘ Page: ‘ FORMAT 999
SQL.PNO
SET ECHO OFF
Использование SQL*Plus 87
SET VERIFY OFF
SET PAGESIZE 30
SET LINESIZE 70
CLEAR COLUMNS
COLUMN produ ct_id HEADING ID FORMAT 99
COLUMN name HEADING ‘ Product Name’ FORMAT A20 WORD_WRAPPED
COLUMN d e s c r ip tio n HEADING D e s c rip tio n FORMAT A30 WORD_WRAPPED
COLUMN p r ic e HEADING P r ic e FORMAT $99.99
SELECT produ ct_id, name, d e s c r ip tio n , p r ic e
FROM products;
CLEAR COLUMNS
TTITLE OFF
BTITLE OFF
Две последние строки отключают колонтитулы, установленные при помощи
TTITLE и BTITLE. В следующем примере показаны результаты выполнения
сценария report5.sqclass="underline"
□ SQL> § C:\sql_book\SQL\report5.sql
Run date: 12-AUG-07 Run by the STORE user Page: 1
ID Product Name D e s c rip tio n P r ic e
1 Modern Science A d e s c r ip tio n o f modern sc ie n ce $19.95
2 Chemistry In tro d u c tio n to Chemistry $30.00
3 Supernova A s t a r explodes $25.99
4 Tank War A c tio n movie about a fu tu re war $13.95
5 Z F ile s S e rie s o f m ysteriou s a c t i v it ie s $49.99
6 2412: The Return A lie n s retu rn $14.95
7 Space Force 9 Adventures o f heroes $13.49
8 From Another Planet A lie n from another p la n e t lands
on Earth $12.99
9 C la s s ic a l Music The best c la s s ic a l music $10.99
10 Pop 3 The best popular music $15.99
11 C re a tiv e Y e ll Debut album $14.99