|
Программирование >> Преобразование значений null
Оператор 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, на момент написания запроса не известны. Они формируются подзапросами при выполнении основного запроса.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |