Иллюстрированный самоучитель по SQL для начинающих

Курсоры

Выражение запроса

Выражением запроса может быть любой допустимый оператор SELECT. Оператор SELECT выводит строку, на которую указывает курсор в данный конкретный момент времени. Эти строки представляют собой область действия курсора.

Помни:
Запрос не будет выполняться сразу же после выполнения оператора DECLARE CURSOR. Выборка данных обязательно начинается с оператора OPEN. Построчная обработка данных осуществляется в цикле с использованием оператора FETCH
.

Предложение ORDER BY

В зависимости от того, что программный код должен делать с данными, иногда требуется обрабатывать выбранные данные в определенном порядке. Сортировку строк перед их обработкой можно выполнять с помощью предложения ORDER BY (упорядочить по). Его синтаксис имеет следующий вид:

ORDER BY спецификация_сортировки [, спецификация_сортировки]…

Существует множество спецификаций сортировки, каждая из которых имеет следующий синтаксис:

(имя_столбца) [ COLLATE BY имя_сопоставления ] [ ASC | DESC ]

Для сортировки по столбцу данный столбец должен присутствовать в списке выборки в выражении запроса. Сортировку по столбцам таблицы, не вошедшим в список запроса, выполнить нельзя. Например, требуется произвести операцию, не поддерживаемую SQL, со строками таблицы CUSTOMER. В данном случае можно использовать курсор:

DECLARE custl CURSOR FOR
SELECT CustID, FirstName,LastName, City, State, Phone
FROM CUSTOMER
ORDER BY State, LastName, FirstName

В этом примере оператор SELECT выводит строки, упорядоченные вначале по штату (State), затем по фамилии (LastName) и по имени (FirstName). Перед тем как перейти к первому заказчику из штата Алабама (AL), выбираются все заказчики из штата Аляска (АК). Затем все записи о заказчиках из Аляски сортируются по их фамилиям (Aaron предшествует Abbot). Там, где фамилии совпадают, сортировка производится по имени (George Aaron предшествует Нету Aaron).

Приходилось ли вам когда-нибудь делать 40 копий документа, состоящего из 20 страниц, на копировальном аппарате без сортировщика? Ужас, до чего противная работа! Необходимо организовать место для 20 кучек, которые будут соответствовать 20 страницам документа, и ходить между ними 40 раз туда и обратно, раскладывая 40 копий по этим кучкам. Такой процесс называется сопоставлением. Аналогичный процесс возможен и в SQL.

Сопоставление – это набор правил, определяющих порядок сортировки строк данных. Сортировка по алфавитному порядку установлена по умолчанию. Однако можно выбрать отличный от установленного по умолчанию порядок, по которому будут упорядочиваться данные. Для этого следует использовать необязательный оператор COLLATE BY (использовать сопоставление). Любая реализация изначально поддерживает несколько часто встречающихся сопоставлений. Можно выбрать одно из них, указав лишь, как нужно упорядочивать данные – по возрастанию или по убыванию. Для этого в конце предложения нужно добавить ключевое слово ASC или DESC соответственно.

В операторе DECLARE CURSOR можно использовать столбец, рассчитанный на основе существующих столбцов таблицы. У такого столбца нет имени, которое может использоваться в предложении ORDER BY. Чтобы иметь возможность сослаться на этот столбец, его имя нужно определить в выражении запроса оператора DECLARE CURSOR. Рассмотрим следующий пример:

DECLARE revenue CURSOR FOR
SELECT Model, Units, Price,
Units * Price AS ExtPrice
FROM TRANSDETAIL
ORDER BY Model, ExtPrice DESC;

В этом примере нет ни одного оператора COLLATE BY в предложении ORDER BY, таким образом, использовалось сопоставление по умолчанию. В четвертом столбце, ExtPrice (общая цена), находятся данные о совокупной цене изделий определенной модели. В предложении ORDER BY задается вначале сортировка по названию модели Model, затем по общей цене ExtPrice. Сортировка по столбцу ExtPrice производится по убыванию (ключевое слово DESC), т.е. вначале обрабатываются более дорогие транзакции.

В предложении ORDER BY по умолчанию используется порядок сортировки по возрастанию. Если в списке спецификаций присутствует сортировка DESC и следующая сортировка также должна производиться по убыванию, для нее следует указать ключевое слово DESC в явном виде. Например, выражение:

ORDER BY А, В DESC, С, D, E, F

…эквивалентно такому:

ORDER BY A ASC, В DESC, С ASC, D ASC, E ASC, F ASC
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.