Генерация возрастающих числовых значений столбцов во время оператора SELECT ВСТАВКИ

Я должен скопировать некоторые данные от одной таблицы до другого в 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;

Там путь состоит в том, чтобы сделать с, не создавая последовательность или какой-либо другой временный объект? А именно, это может быть сделано с автономным оператором SELECT ВСТАВКИ?

Полагайте, что триггер неопция.

Подробнее: Я хотел бы управлять порядком, что новые строки вставляются, и это не будет тот же порядок, они были созданы в старой таблице (обратите внимание, что я добавил пункт ORDER BY выше). Но я все еще хочу, чтобы мой новый последовательный столбец запустился от 1.

Существуют подобные вопросы, но я полагаю, что специфические особенности моего вопроса являются исходными к ТАК.

7
задан Igby Largeman 3 May 2010 в 19:54
поделиться

2 ответа

Вы можете использовать ROWNUM . Этот псевдостолбец нумерует строки в вашем результате:

Insert Into new_table (new_col, copied_col1, copied_col2)
    Select Rownum, old_col1, old_col2
    From old_table;

Если вы хотите, чтобы ваши записи были отсортированы, вам нужно использовать подзапрос:

Insert Into new_table (new_col, copied_col1, copied_col2)
    Select Rownum, old_col1, old_col2
    From (
        Select old_col1, old_col2
        From old_table
        Order By old_col1
    );
10
ответ дан 7 December 2019 в 03:13
поделиться

Почему бы вам не определить столбец new_col как primary_key или unique и не пометить его как автоинкремент? Таким образом, каждая вставка получит следующий высший "счет".

Я не очень хорошо знаком с Oracle, но готов поспорить, что в нем есть встроенная функция автоинкремента.

-1
ответ дан 7 December 2019 в 03:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: