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).