Быстрый и грязный способ, если вы не возражаете повторить some_condition
и где some_condition
не зависит от значений в таблице2, это:
insert into table1 (c1,c2,c3)
select c1, c2, c3 from table2 where some_condition
union select defaultvalue1, defaultvalue2, defaultvalue3 from dual where not (some_condition)
Если some_condition
зависит от значений в таблице2, то вы можете сделать (не проверено):
insert into table1 (c1,c2,c3)
select nvl(t2.c1, defaultvalue1), nvl(t2.c2, defaultvalue2), nvl(t2.c2, defaultvalue3)
from dual left join (select c1,c2,c3 from table2 where some_condition) t2
on 1 = 1
Если я прав, этот запрос всегда будет возвращать хотя бы одну строку, но если с правой стороны не будет отображено ни одной строки, то все значения t2 будут возвращены как нулевые, и поэтому nvl
можно использовать для укажите ваши значения по умолчанию.
Редактировать : Небольшая оговорка. Это предполагает, что значения, возвращаемые из таблицы2, не будут нулевыми или что если они будут, вам нужны значения по умолчанию.