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

придётся поместить в кавычки всё, что следует после команды @ , например:

□ @ “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