С точки зрения производительности эти запросы идентичны.
UNION ALL
не повлияет на производительность, поскольку Oracle
оценивает UNION
'ed запрос только тогда, когда он ему нужен, сначала он не кэширует результаты.
Синтаксис
SELECT
более гибок в том смысле, что вы можете проще манипулировать запросом SELECT
, если хотите что-то изменить.
Например, этот запрос:
insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
select 8000,0,'Multi 8000',1 from dual
union all select 8001,0,'Multi 8001',1 from dual
можно переписать как
INSERT
INTO pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
SELECT 7999 + level, 0, 'Multi ' || 7999 + level, 1
FROM dual
CONNECT BY
level <= 2
Заменив 2
на соответствующее число, вы можете получить любое количество строк.
В случае INSERT ALL
вам придется продублировать описание таблицы назначения, которое будет менее читабельным, если вам понадобится, например, 40
строки.