Oracle: копировать строку при обновлении одного поля

Обратите внимание: я задаю вопрос, на который я хочу ответить. Я знаю, что этот вопрос означает, что база данных настроена плохо. Поэтому я проголосую за любые ответы, предлагающие изменить способ настройки таблицы.

Мне нужно дублировать кучу строк при изменении одного значения.

name   col1 col2
dave   a    nil
sue    b    nil
sam    c    5

должно стать:

name   col1 col2
dave   a    nil
dave   a    a
sue    b    nil
sue    b    a
same   c    5

IE для всех записей в этой таблице, где col2 is null, создайте новую запись в таблице, где скопированы name и col1, а col2 - a.

Ответы

Ответ 1

Использование:

INSERT INTO table
  (name, col1, col2)
SELECT t.name, t.col1, 'a'
  FROM TABLE t
 WHERE t.col2 IS NULL

Предположим, что ни столбцы name, ни col1 не являются первичным ключом, либо имеют уникальное ограничение.

Ответ 2

Будет ли это делать?

INSERT INTO yourtable
       (SELECT name, col1, 'a'
          FROM yourtable 
         WHERE col2 is NULL);

Ответ 3

Если количество столбцов велико, вы можете скопировать нужные данные во временную таблицу, изменить данные во временной таблице так, как вы хотели, а затем скопировать содержимое временной таблицы обратно в исходное и удалить временная таблица.