Введение в СУБД "Oracle". Космачев В.М - 92 стр.

UptoLike

ГУАП МЦИТ
Введение в «ORACLE»
Под ред. проф. В.М.Космачёва
92
окончание вывода записи
конец отчета
Когда вы опускаете действие, “BREAK ON столбецзапрещает печать дублированных значений в столбце и помечает
место в отчете, в котором SQL*PLUS произведет вычисления, определенные вами в соответствующей команде
COMPUTE.
Вы можете указать “ON столбецодин или несколько раз. Если вы указали фразу ON несколько раз, как в данном
случае:
SQL> BREAK ON DEPTNO SKIP PAGE ON JOB SKIP 1 -
ON SAL SKIP 1
сначала фраза ON рассматривает самое внешнее прерывание (в данном случае ON DEPTNO) и в самую последнюю
очередь фраза ON рассматривает самое внутреннее прерывание (в данном случае ON SAL). SQL*PLUS ищет
прерывание в каждой выводимой записи в указанных колонках, начиная с самого внешнего прерывания до самого
внутреннего прерывания в заказанном вами порядке. В данном случае, SQL*PLUS ищет измененные значения в
DEPTNO, затем в JOB, затем в SAL. Затем, SQL*PLUS выполняет действия начиная с действий указанных для самого
внутреннего прерывания и так обработка идет в обратном порядке к самому внешнему прерыванию (в данном случае
от SKIP 1 для ON SAL к SKIP PAGE для ON DEPTNO). SQL*PLUS выполняет все действия снизу вверх, включая
действия и для столбца, в котором произошло прерывание. Если, например, в выводимой последовательности записей
изменилось значение столбца JOB, но значения DEPTNO и SAL не изменились, то SQL*PLUS пропустит две строки
перед тем как напечатать запись (одна строка- как результат SKIP 1 во фразе ON SAL, и другая строка как результат
SKIP 1 во фразе ON JOB). Всегда при использовании “ON столбец”, вы должны также использовать фразу ORDER BY
в команде SQL SELECT. Обычно столбцы, используемые в команде BREAK, должны появляться в той же
последовательности во фразе ORDER BY (хотя все столбцы, указанные в ORDER BY необязательно должны
присутствовать в команде BREAK). Это предотвращает бессмысленные прерывания в вашем отчете.
Для вышеприведенной команды BREAK, следующая команда SELECT получит следующие (осмысленные)
результаты:
SQL> SELECT DEPTNO, JOB, SAL, ENAME
FROM EMP
ORDER BY DEPTNO, JOB, SAL, ENAME;
Все записи с одинаковым DEPTNO напечатаются вместе на одной странице, и на этой странице все записи с
одинаковым JOB напечатаются в одной группе. Внутри каждой группы профессий (job), работники с одинаковым
окладом (SAL) объединяются в группы. Прерывание в колонке ENAME не приводит ни к каким действиям, т.к. этот
столбец не задан в команде BREAK.
ON выражение [действие [действие]]
Определяются действия для SQL*PLUS, которые необходимо произвести при изменении значения выражения. Если
вы не задали действие, “BREAK ON exprзапретит вывод дублированных значений expr и пометит место в отчете, где
SQL*PLUS произведет заданные вами вычисления в соответствующей команде COMPUTE. Вы можете использовать
в выражении один или несколько столбцов таблицы или алиас, присвоенный для столбца в команде SELECT или в
команде COLUMN. Если вы используете выражение (expr) в команде BREAK, вы должны ввести данное выражение
точно также, как оно задано в команде SELECT. Если выражение в SELECT равно a+b, например, вы не можете
использовать b+a или (a+b) в команде BREAK для ссылки на данное выражение из команды SELECT. То, что
говорилось выше о “ON столбец”, также применимо к “ON expr”.
ON ROW[действие [действие]]
Определяются действия для SQL*PLUS, которые надо произвести, когда команда SQL SELECT возвращает запись.
ROW-прерывание становится в конец иерархии прерываний, независимо от того, где фраза ON ROW задана в команде
BREAK. Вы должны всегда задавать действие при использовании данного прерывания.
ON REPORT
Отмечает место в отчете, где SQL*PLUS произведет вычисления определенные вами в соответствующей команде
COMPUTE. Используйте BREAK ON REPORT совместно с COMPUTE для печати общих сумм. REPORT-прерывание
становится в вершину иерархии прерываний, независимо от того, где вы его указали в команде BREAK.
Теперь рассмотрим список возможных действий: