Мне нужно скопировать некоторые данные из одной таблицы в другую в Oracle, одновременно генерируя инкрементные значения для числового столбца в новой таблице. Это однократное упражнение с тривиальным числом строк (100).
У меня есть адекватное решение этой проблемы, но мне любопытно узнать, есть ли более элегантный способ.
Я делаю это с временной последовательностью, вот так:
CREATE SEQUENCE temp_seq
START WITH 1;
INSERT INTO new_table (new_col, copied_col1, copied_col2)
SELECT temp_seq.NEXTVAL, o.*
FROM (SELECT old_col1, old_col2
FROM old_table,
ORDER BY old_col1) o;
DROP SEQUENCE temp_seq;
Есть ли способ обойтись без создания последовательности или любого другого временного объекта? В частности, можно ли это сделать с помощью отдельного оператора INSERT SELECT?
Пожалуйста, сочтите, что триггер не вариант.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Я хотел бы контролировать порядок вставки новых строк, и порядок их создания в старой таблице будет отличаться (обратите внимание, что я добавил ЗАКАЗ BY пункт выше). Но я все еще хочу, чтобы мой новый последовательный столбец начинался с 1.
Есть похожие вопросы, но я считаю, что особенности моего вопроса являются оригинальными для SO.