Классика баз данных - статьи

       

FLWOR-выражение


FLWR-выражение (for, let, where, return) стало FLWOR-выражением (где "O" обозначает "order by").

Каждый раздел order by может содержать несколько ключей сортировки, каждый из которых включает выражение и может включать указания, должна ли быть сортировка устойчивой, должна ли она производиться по возрастанию или же по убыванию, считается ли пустая последовательность большей или же меньшей любого айтема, и должна ли использоваться схема сортировки (collation sequence), отличная от схемы, применяемой по умолчанию.

Каждое выражение в разделе order by вычисляется для каждого связывания переменных в разделах for и let, которое не исключается разделом where. Если какое-либо выражение производит последовательность из более чем одного айтема, то возвращается ошибка. Все значения типа xdt:untypedAtomic приводятся к xs:string. Если для какого-либо ключа сортировки типы значений различаются (после подстановки подтипа и расширения типа), то возвращается ошибка. Следующий запрос возвращает данные о недавно нанятых служащих, упорядоченные сначала по длительности обучения, а затем по номерам отделов. for $e in doc('employees.xml')//employee where current-date() - $e/hireDate       < xdt:dayTimeDuration('P60D') order by    $e/HSYears + $e/CollegeYears descending,    $e/dept empty greatest return $e

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

В FLWOR-выражении также появился раздел at, который связывает позицию айтема в последовательности одновременно со связыванием значения этого айтема.

Следующий запрос возвращает данные о десяти служащих, работающих в компании дольше всех других служащих: for $e at $p in    (for $oe in //employee     order by $oe/@hireDate descending     return $oe) where $p <= 10 return $e



Содержание раздела