Oracle выбирает из двойного с несколькими строками и столбцами

Мне нужно присоединиться к динамическому списку чисел, которые я извлекаю из своей программы динамически. Количество строк не фиксировано, равно как и используемые числа.

Я не нахожу лучшего способа сделать это, чем следующее (для моих целей временная таблица бесполезна):

select 111 as col1, 322 as col2 from dual
union all
select 3 as col1, 14 as col2 from dual
union all
select 56 as col1, 676 as col2 from dual;

Есть лучший способ сделать это? Я вижу, что есть оператор connect by, который может возвращать несколько строк, но я не вижу способа сделать несколько строк и столбцов.


person Jeremy    schedule 28.01.2015    source источник
comment
это действительно шаблон {1,2},{3,4},{5,6}?   -  person Conrad Frix    schedule 29.01.2015
comment
Нет, это набор чисел, который я получаю программно. Я заранее не знаю, какие цифры.   -  person Jeremy    schedule 29.01.2015
comment
Вы можете создать коллекцию PL/SQL, а затем выбрать из table(collection). Извините, у меня нет времени, чтобы написать пример. docs.oracle.com/database/121/SQLRF/   -  person Shannon Severance    schedule 29.01.2015
comment
Как будет использоваться этот запрос? Обычно не имеет смысла иметь запрос, который возвращает неизвестное количество столбцов, поэтому я предполагаю, что у вас здесь есть какая-то необычная потребность.   -  person Jon Heller    schedule 29.01.2015
comment
ряды, извините. вопрос отредактирован.   -  person Jeremy    schedule 29.01.2015


Ответы (2)


Вы можете использовать декодирование и подключение по уровню:

select decode(rownum, 1, 111, 2, 3, 3, 56) as col1,
       decode(rownum, 1, 322, 2, 14, 3, 676) as col2
  from dual
connect by level <= 3;
person B. Khan    schedule 02.05.2016

Вы можете использовать CONNECT BY здесь с небольшой математикой:

SELECT Level * 2 - 1 AS col1, Level * 2 AS col2
FROM DUAL
CONNECT BY LEVEL <= 3;

Это даст вам пример из трех строк. Отрегулируйте значение LEVEL <= ..., чтобы получить больше строк.

person Ed Gibbs    schedule 28.01.2015
comment
Извините, я не ищу конкретный шаблон - я обновил вопрос, чтобы указать это. Тем не менее, реквизит для умного решения. - person Jeremy; 29.01.2015
comment
Если вы получаете числа во время процедуры PL/SQL, вы можете вернуть их через конвейерную функцию. Пример здесь, и вы найдете множество других по поиску в гугле. Если вы получаете значения каким-то другим способом, то для чего это стоит, я бы сделал это точно так же, как вы сделали это в своем вопросе. Я знаю, что это неправильно, но это сработает :) - person Ed Gibbs; 29.01.2015