Я думаю, что очень короткий ответ на ваш вопрос - использовать предложения WITH для генерации ваших собственных.
К сожалению, большие имена в базах данных не имеют встроенных запрашиваемых псевдотаблиц диапазона номеров. Или, в более общем смысле, простые функции генерации данных на чистом SQL. Лично я думаю, что это огромный сбой, потому что если бы они это сделали, можно было бы переместить много кода, который в настоящее время заблокирован в процедурных сценариях (T-SQL, PL / SQL и т. Д.) в чистый SQL, который имеет ряд преимуществ для производительности и сложности кода.
Так или иначе, похоже, что в общем смысле вам нужна возможность генерировать данные на лету.
Oracle и T-SQL поддерживают предложение WITH, которое можно использовать для этого. Они работают немного по-разному в разных СУБД, и MS называет их «общими табличными выражениями», но они очень похожи по форме. Используя их с рекурсией, вы можете довольно легко сгенерировать последовательность чисел или текстовых значений. Вот как это может выглядеть ...
В Oracle SQL:
WITH
digits AS -- Limit recursion by just using it for digits.
(SELECT
LEVEL - 1 AS num
FROM
DUAL
WHERE
LEVEL < 10
CONNECT BY
num = (PRIOR num) + 1),
numrange AS
(SELECT
ones.num
+ (tens.num * 10)
+ (hundreds.num * 100)
AS num
FROM
digits ones
CROSS JOIN
digits tens
CROSS JOIN
digits hundreds
WHERE
hundreds.num in (1, 2)) -- Use the WHERE clause to restrict each digit as needed.
SELECT
-- Some columns and operations
FROM
numrange
-- Join to other data if needed
Это, по общему признанию, довольно многословно. Функциональность рекурсии Oracle ограничена. Синтаксис неуклюжий, он не производительный, и он ограничен 500 (я думаю) вложенных уровней. Вот почему я решил использовать рекурсию только для первых 10 цифр, а затем перекрестных (декартовых) объединений, чтобы объединить их в реальные числа.
Я сам не использовал выражения общих таблиц SQL Server, но, поскольку они допускают самоссылку, рекурсия НАМНОГО проще, чем в Oracle. Сравнима ли производительность и каковы пределы вложенности, я не знаю.
В любом случае, рекурсия и предложение WITH являются очень полезными инструментами при создании запросов, которые требуют генерируемых на лету наборов данных. Затем, запрашивая этот набор данных, выполняя операции со значениями, вы можете получить всевозможные типы генерируемых данных. Агрегации, дублирования, комбинации, перестановки и т. Д. Вы даже можете использовать такие сгенерированные данные, чтобы помочь свернуть или развернуть другие данные.
ОБНОВЛЕНИЕ: Я просто хочу добавить, что, как только вы начнете работать с данными таким образом, это откроет вам новый взгляд на SQL. Это не просто язык сценариев. Это довольно надежный управляемый данными декларативный язык . Иногда это неудобно использовать, потому что в течение многих лет он испытывал недостаток усовершенствований, помогающих уменьшить избыточность, необходимую для сложных операций. Но, тем не менее, это очень мощный и довольно интуитивно понятный способ работы с наборами данных как с целью, так и с драйвером ваших алгоритмов.