
- •Формирование запросов к базе данных.
- •Множественные операции
- •Order by
- •For update of
- •Последовательности
- •Фразы оператора select
- •Фраза from
- •Фразы group by и having
- •Фраза having
- •Фраза where
- •Фраза where (Встроенный sql)
- •Фраза current of
- •Фразы connect by и start with
- •Start with
- •Использование order by
- •Фраза order by
- •Внешнее объединение
- •Подзапросы.
- •Функции агрегирования результатов запроса
- •Курсоры
- •Види курсоров
- •Объявление курсора.
- •Открытие курсора
- •Атрибуты курсора.
- •Чтение данных с использованием курсора.
- •Закрытие курсора
- •Неявные курсоры. Предопределенный курсор sql.
- •Примеры работы с курсорами
- •Изменение и удаление данных в позиции курсора.
- •Переменные-курсоры.
- •Работа с транзакциями в pl/sql.
- •Курсоры и транзакции.
Фраза current of
Если фраза CURRENT OF используется в операторе UPDATE, курсор предварительно должен быть определен с фразой FOR UPDATE а операторе SELECT. Курсор должен быть открыт и позиционирован на строку. Если курсор не был открыт или не был выполнен FETCH, фраза CURRENT OF завершится с ошибкой и вернется нулевое число строк.
Пример Для замены в текущей строке жалования на 2000 введите:
UPDATE EMP
SET SAL = 2000
WHERE CURRENT OF CURSOR EMP_CURSOR
Фразы connect by и start with
Выдача данных на основании их иерархической взаимосвязи.
SELECT ...
FROM ...
...
[ CONNECT BY PRIOR expr operator expr
| expr operator PRIOR expr
[ START WITH condition ] ]
PRIOR специфицирует направление обхода дерева. ORACLE берет вершину с PRIOR прежде вершины без этой фразы.
Фраза CONNECT BY используется для запросов по иерархическим связям. Она специфицирует строки, выбираемые в иерархическом порядке а также определяет отношение, используемое для объединения строк в иерархию.
PRIOR
Фраза PRIOR определяет порядок выборки (сперва родительскую или дочернюю вершину).
Фраза PRIOR должна использоваться перед одним из выражений фразы CONNECT BY. Часть выражения, в которой находится PRIOR, определяет родителя в каждом отношении "родитель-потомок"; другая часть выражения определяет потомка. Например, CONNECT BY PRIOR EMPNO=MGR означает, что CONNECT BY будет возвращать менеджеров (определяемых в EMPNO) перед служащими (определяемых в MGR). CONNECT BY EMPNO=PRIOR MGR означает, что теперь служащие будут выдаваться перед менеджерами.
Количество уровней фразы CONNECT BY ограничивается доступной пользователю памятью.
Фразу CONNECT BY нельзя использовать вместе с подзапросами и объединениями.
Start with
Фраза START WITH идентифицирует строки (или строку), которые будут использоваться в качестве корня дерева, назначая условие, которому они должны удовлетворять. Отсутствие этой фразы означает начало со всех столбцов, удовлетворяющих условию фразы WHERE.
Во фразе START WITH допустимы подзапросы.
Если в операторе SELECT используется фраза CONNECT BY, в нем же можно воспользоваться псевдостолбцом LEVEL, который возвращает 1 для корня, 2 - для вершины, порожденной корнем, 3 - для внука и т.д.
Использование order by
Использование ORDER BY нарушает порядок, в котором CONNECT BY возвращает строки. При использовании CONNECT BY существует неявный порядок (ORDER BY). Если уровень строки меньше, чем уровень предыдущей строки, она рассматривается как дочерняя к предыдущей. Однако, ORDER BY маскирует неявный порядок выдачи строк помощью CONNECT BY. Хотя ошибки и не выдается, использование ORDER BY отрицает результаты работы CONNECT BY.
Пример SELECT LPAD(' ',2*LEVEL) || ENAME ORG_CHART, EMPNO,MGR, JOB
FROM EMP
CONNECT BY PRIOR EMPNO = MGR
START WITH ENAME = 'KING'
ORG_CHART ENPNO MGR JOB
--------------- --------- ------ ----------
KING 7839 PRESIDENT
JONES 7566 7839 MANAGER
SCOTT 7788 7566 ANALYST
ADAMS 7876 7788 CLERK
FORD 7902 7566 ANALYST
SMITH 7369 7902 CLERK
BLAKE 7698 7839 MANAGER
ALLEN 7499 7698 SALESMAN
WARD 7521 7698 SALESMAN
MARTIN 7654 7698 SALESMAN
TURNER 7844 7698 SALESMAN
JAMES 7900 7698 CLERK
CLARK 7782 7839 MANAGER
MILLER 7934 7782 CLERK