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

12 My Front Line T h e ir g re a te s t h it s $13.49

Thanks fo r running the rep o rt Page: 1

Вычисление промежуточных итогов

Используя комбинацию команд BREAK и COMPUTE, можно добавить вычисление

промежуточных итогов по столбцам. Команда BREAK ON вынуждает SQIf Plus

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

a COMPUTE вынуждает SQITPlus вычислять значение для столбца.

Следующий сценарий (report6.sql) показывает, как вычислить промежуточные

итоги для товаров одного типа:

□ BREAK ON product_type_id

COMPUTE SUM OF p r ic e ON product_type_id

88 Глава 3

SET ECHO OFF

SET VERIFY OFF

SET PAGESIZE 50

SET LINESIZE 70

CLEAR COLUMNS

COLUMN p r ic e HEADING P r ic e FORMAT $999.99

SELECT produ ct_type_id , name, p r ic e

FROM products

ORDER BY product_type_id;

CLEAR COLUMNS

Следующий пример показывает результаты выполнения сценария

report6.sqclass="underline"

□ SQL> i C:\sql_book\SQL\report6.sql

PRODUCT_TYPE_ID NAME P r ic e

1 Modern Science $19.95

Chemistry $30.00

* * * * * * * * * * * * * * * * * --------------

sum $49.95

Supernova $25.99

Tank War $13.95

Z F ile s $49.99

2412: The Return $14.95

********

sum $104.88

3 Space Force 9 $13.49

From Another P la n e t $12.99

* * * * * * * * * * * * * * * * * *

sum $26.48

4 C la s s ic a l Music $10.99

Pop 3 $15.99

C re a tiv e Y e ll $14.99

* * * * * * * * * * * * * * *

sum $41.97

My Front Line $13.49

* * * * * * * * * * * * * * *

sum $13.49

Обратите внимание: каждый раз, когда встречается новое значение

product_type_id, SQITPlus прерывает вывод и вычисляет сумму значений

столбца price для строк с одинаковым значением product_type_id. Значение

product_type_id показывается только один раз для всех строк с одинаковым

значением product_type_id. Например, и Modern Science,

и Chemistry являются книгами и имеют product_type_id, равный 1. Поэтому

значение 1 указывается только для строки с Modern Science. Сумма стоимостей

для этих двух книг равна $49.95. В других разделах отчета содержится

сумма цен товаров с различными значениями product_type_id.

Использование SQL*Plus 89

Получение помощи в SQL*Plus

Вы можете получить помощь в SQIfPlus, используя команду HELP. В следующем

примере показан результат выполнения команды HELP:

□ SQL> HELP

HELP

Accesses t h is command lin e help system. Enter HELP INDEX or ? INDEX

For a l i s t o f to p ic s . In iSQL*Plus, c li c k the Help button to d is p la y

iSQL*Plus o n lin e help.

You can view SQL*Plus resources a t h ttp :/ / o tn .o ra c le .c om / te c h / s q l_ p lu s /

And the Oracle Database L ib ra r y a t h ttp ://o tn .o ra c le .com /d o cum e n ta tio n /

HELP|? [ to p ic ]

В следующем примере выполнена команда HELP INDEX:

□ SQL> HELP INDEX

Enter Help [ to p ic ] fo r help.

§ COPY ' * PAUSE SHUTDOWN

@@ DEFINE PRINT SPOOL

/ DEL PROMPT SQLPLUS

ACCEPT DESCRIBE QUIT START

APPEND DISCONNECT RECOVER STARTUP

ARCHIVE LOG EDIT REMARK STORE

ATTRIBUTE EXECUTE REPFOOTER TIMING

BREAK EXIT REPHEADER TTITLE

BTITLE GET RESERVED WORDS (SQL) UNDEFINE

CHANGE HELP RESERVED WORDS (PL/SQL) VARIABLE

CLEAR HOST RUN WHENEVER OSERROR

COLUMN INPUT SAVE WHENEVER SQLERROR

COMPUTE LIST SET

CONNECT PASSWORD SHOW

В следующем примере выполнена команда HELP EDIT:

□ SQL> HELP EDIT

EDIT

Invokes an o p e ra tin g system te x t e d ito r on the co n te n ts o f the

s p e c ifie d f i l e or on the con te n ts o f the SQL b u ffe r. The b u ffe r

has no command h is to r y l i s t and does not record SQL*Plus commands.

ED[IT] [ file _ n am e [ . e x t] ]

Not a v a ila b le in iSQL*Plus

Автоматическая генерация операторов SQL

В этом последнем разделе кратко показана методика написания операторов

SQL, которые генерируют другие операторы SQL. Эта методика очень

90 Глава 3

полезна и поможет избежать значительного объема работы по набору на

клавиатуре при написании похожих операторов SQL. В качестве простого

примера можно привести оператор SQL, который генерирует операторы

DROP TABLE, удаляющие из базы данных таблицы. В следующем примере генерируется

целый ряд операторов DROP TABLE для схемы store:

П SELECT 'DROP TABLE ' || table_name ||

FROM user_tables;

DROPTABLE’ ||T A B LE _N AM E ||’

DROP TABLE COUPONS;

DROP TABLE CUSTOMERS;

DROP TABLE EMPLOYEES;

DROP TABLE PRODUCTS;

DROP TABLE PRODUCT TYPES;

DROP TABLE PROMOTIONS;

DROP TABLE PURCHASES;

DROP TABLE PURCHASES TIMESTAMP_WITH_TZ;

DROP TABLE PURCHASES WITH LOCAL TZ;

DROP TABLE PURCHASES WITH1TIMESTAMP;

DROP TABLE SALARY GRADES;

Примечание В таблице userjables содержатся сведения о таблицах в схемах пользователей.

В столбце table_name содержатся имена таблиц.

Можно записать эти сгенерированные операторы SQL в файл и использовать

их позже.

Отключение от базы данных и выход из SQL*Plus

Вы можете отключиться от базы данных и оставить SQITPlus запущенным,

введя DISCONNECT (SQL*Plus также автоматически выполнит для вас COMMIT).

Пока вы подключены к базе данных, SQITPlus будет поддерживать для вас

сессию базы данных. Когда вы отключаетесь от базы данных, ваша сессия

завершается. Вы можете повторно подключиться к базе данных, используя

CONNECT.

Чтобы остановить SQITPlus, необходимо ввести EXIT (SQL*Plus также

автоматически выполнит для вас COMMIT).