Программирование >>  Преобразование значений null 

1 ... 119 120 121 [ 122 ] 123 124 125 ... 219


Оператор MODEL не только обеспечивает возможность доступа к строкам, как к элементам массива, он позволяет создавать или возвра-

В SQL Server, чтобы сформировать одну строку, можно указать SELECT без FROM части. - Примеч. науч.ред.

3 model

4 dimension by (0 idx)

5 measures(1 array)

6 rules iterate (10) (

7 array[iteration number] = iteration number+1

PostgreSQL

Используйте очень удобную функцию GENERATE SERIES, которая разработана именно для формирования строк:

1 select id

2 from generate series (1,10) x(id)

Обсуждение

DB2 и SQL Server

Рекурсивный оператор WITH увеличивает ID (начиная с 1) до тех пор, пока не будет выполнен предикат WHERE. Для начала необходимо получить одну строку со значением 1. Сделать это можно с помощью таблицы, состоящей из одной строки, или в случае с DB2, используя оператор VALUES, который создаст результирующее множество, содержащее одну строку.1

Oracle

В этом решении CONNECT BY помещен в конструкцию WITH. Строки будут формироваться до тех пор, пока не выполнится предикат WHERE. Oracle автоматически увеличивает значение псевдостолбца LEVEL.

В решении с использованием оператора MODEL применяется явная команда ITERATE, которая обеспечивает формирование множества строк. Без конструкции ITERATE возвращена будет лишь одна строка, поскольку в DUAL всего одна строка. Например:

select array id from dual model

dimension by (0 idx) measures(1 array) rules ()



array[0] = 1 array[1] = 2 array[2] = 3 array[3] = 4 array[4] = 5 array[5] = 6 array[6] = 7 array[7] = 8

array[8] = 9 array[9] = 10

PostgreSQL

Всю работу выполняет функция GENERATE SERIES. Она принимает три параметра, все они являются числовыми значениями. Первый параметр - начальное значение, второй - конечное значение, и третий необязательный параметр - шаг (какое приращение получает каждое значение). Если третий параметр опущен, по умолчанию приращение равно 1.

Функция GENERATE SERIES обладает достаточной гибкостью, что позволяет не прописывать в коде передаваемые в нее параметры. Например, стоит задача возвратить пять строк, начиная со значения 10, заканчивая значением 30, с шагом 5. Чтобы получить следующее результирующее множество:

щать строки, даже если их нет в таблице, из которой производится выбор строк. В данном решении IDX - это индекс массива (местоположение конкретного значения в массиве), и ARRAY (под псевдонимом ID) -это массив строк. Первая строка по умолчанию получает значение 1, к ней можно обратиться через ARRAY[0]. Oracle предоставляет функцию ITERATION NUMBER, с помощью которой можно отслеживать количество выполненных итераций. В решении выполняется 10 итераций, таким образом, ITERATION NUMBER возвращает значения от 0 до 9. Добавляя 1 к каждому из этих значений, получаем результаты от 1 до 10.

Cледующий запрос поможет наглядно представить, что происходит с конструкцией MODEL:

select array[idx] = array as output from dual model

dimension by (0 idx) measures(1 array) rules iterate (10) ( array[iteration number] = iteration number+1

OUTPUT



10 15

20 25 30

можно применить творческий подход и сделать что-то такое:

select id from generate series(

(select min(deptno) from emp), (select max(deptno) from emp), 5

) x(id)

Обратите внимание, что здесь фактические значения, передаваемые в GENERATE SERIES, на момент написания запроса не известны. Они формируются подзапросами при выполнении основного запроса.



1 ... 119 120 121 [ 122 ] 123 124 125 ... 219

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика