Можно ли иметь несколько строк с SELECT FROM DUAL? - PullRequest
0 голосов
/ 07 мая 2018

Могу ли я иметь что-то вроде

SELECT (1, 2, 4542, 342) FROM DUAL;

и вот так?

  |  1    |
  |  2    |
  |  4542 |
  |  342  |

Ответы [ 5 ]

0 голосов
/ 08 мая 2018

Вместо DUAL объедините оператор TABLE с предварительно созданной коллекцией, чтобы получить несколько строк. Это решение имеет небольшой синтаксис, исключает преобразования типов и позволяет избежать потенциально медленных рекурсивных запросов. Но хорошо понимать и другие решения, все они полезны в разных контекстах.

select * from table(sys.odcinumberlist(1, 2, 4542, 342));
0 голосов
/ 07 мая 2018
select decode(level,3,4542,4,342,level) lvl from dual connect by level <= 4
0 голосов
/ 07 мая 2018

Ну, если бы (1, 2, 4542, 342) была строкой, вы могли бы сделать это:

with cte as (
    SELECT '1, 2, 4542, 342' as str 
    FROM DUAL
)
select regexp_substr(str,'[^,]+',1,level) 
from cte
connect by level <= regexp_count(str, ',')+1
/
0 голосов
/ 07 мая 2018

Двойная таблица - это в основном фиктивная таблица, которая имеет одну строку и один столбец и существует в схеме sys

SELECT (1,2, 4542, 342) FROM DUAL;

Это даст вам ошибку, потому что вы прошли более одного столбца в этой таблице. 1,2,4542,342 рассматривается как отдельный столбец. Попробуйте следующий запрос: -

SELECT ('1,2, 4542, 342') FROM DUAL;

'1,2, 4542, 342' будет рассматриваться как одна строка.

Для получения требуемого результата мы можем использовать оператор UNION ALL . Попробуйте следующий запрос: -

SELECT 1 FROM DUAL UNION ALL SELECT 2 FROM DUAL UNION ALL SELECT 4542 FROM DUAL UNION ALL SELECT 342 FROM DUAL;

0 голосов
/ 07 мая 2018

Нет. dual имеет только одну строку, но вы можете использовать union all:

SELECT 1 FROM DUAL UNION ALL
SELECT 2 FROM DUAL UNION ALL
SELECT 4542 FROM DUAL UNION ALL
SELECT 342 FROM DUAL;

Это всего лишь один из способов создания таблицы «на лету» в Oracle.

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