SQL (Oracle) Выберите без фактической таблицы, содержащей статические данные - PullRequest
4 голосов
/ 27 февраля 2012

Я ищу возможность запуска (Oracle) SQL без запроса реальной таблицы. Здесь я нашел подсказку с таблицей ДВОЙНОЙ .Это очень хорошо.Но я ищу короткое решение для выбора НЕСКОЛЬКИХ строк из «ниоткуда».Это возможно?Вот самый короткий запрос, который я могу придумать, который делает то, что мне нужно:

Select 1, 'foo' FROM DUAL union 
Select 2, 'bar' FROM DUAL union  
Select 3, 'more stuff' FROM DUAL

Но если я хочу, чтобы в моем результате было больше строк, это довольно неудобно.Есть ли более короткий путь?Что-то вроде

Select 1, 'foo'; 2, 'bar'; 3, 'more stuff' from dual 
or 
Select * from (1, 'foo') union (2, 'bar') union (3, 'more stuff') 

Я знаю, это не работает, но у вас есть идея?Есть ли простой способ перенести результат запроса?Что-то вроде:

Select transposed (1, 'foo', 2, 'bar', 3, 'more stuff') from dual 

Я хочу, чтобы количество «служебных символов» было минимальным.

Ответы [ 2 ]

7 голосов
/ 27 февраля 2012

Вы можете использовать connect by level для создания большего количества записей - что-то вроде:

select level, decode(level, 1,'foo', 2,'bar', 3,'more stuff')
from dual connect by level <= 3
2 голосов
/ 26 сентября 2013

Если есть несколько столбцов - тогда это тоже работает -

select
  REGEXP_SUBSTR (jango,'^[^#]*') as f1,
  REGEXP_SUBSTR(REGEXP_REPLACE(jango,'^([^#]*#){1}', ''),'^[^#]*') as f2,
  REGEXP_REPLACE(jango,'^([^#]*#){2}', '') as f3
from
  (
  Select decode(level,
    1, 'foo#koo#joo',
    2, 'bar#loo#too' ,
    3, 'more stuff#doo#dingo') as jango
  from dual connect by level <= 20
  )

Вот как это работает - внутренний запрос такой же, как и выше. Я добавил несколько столбцов с помощью # - нужно позаботиться о том, чтобы это не было частью семейства regex, иначе нам нужно его избежать.

  Select decode(level,
    1, 'foo#koo#joo',
    2, 'bar#loo#too' ,
    3, 'more stuff#doo#dingo') as jango
  from dual connect by level <= 20

Дает следующее -

             Jango
-------------------
foo#koo#joo
bar#loo#too
more stuff#doo#dingo

Теперь следующий фрагмент выбирает из выходного столбца - 'jango', что-нибудь до #

  REGEXP_SUBSTR (jango,'^[^#]*') as f1,

  O/p --> foo

для второго столбца мы удаляем содержимое 1-го столбца, за которым следует #

  REGEXP_REPLACE(jango,'^([^#]*#){1}', '')

  we get --> koo#joo

Теперь 1-й шаг - получить первое поле.

для дополнительных полей {1} можно увеличить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...