Преобразование большого количества строк - PullRequest
1 голос
/ 15 ноября 2010

Я должен запланировать преобразование для таблицы.Структура таблицы примерно такая:

COULMN1    CHAR(1)
COLUMN2    VARCHAR2(20)
COLUMN3    DATE

Мне нужно преобразовать эту таблицу в соответствии со следующей логикой:

  • IF COLUMN2 = 'XXX', затем обновить COLUMN1 = 'X'

Количество обновляемых строк огромно (в миллионах).Поэтому я не могу поместить простое заявление об обновлении, поскольку у меня есть ограниченное время для выполнения этого действия.Пока у меня есть идея создать временную таблицу с преобразованными значениями;удалите основную таблицу и переименуйте временную таблицу с исходной таблицей.

Есть ли у какого-нибудь другого тела какие-либо идеи?

Ответы [ 3 ]

2 голосов
/ 15 ноября 2010

Вы можете попробовать сделать их немного за раз, например ::10000

UPDATE atable
SET column1 = 'X'
WHERE (column1 != 'X' OR column1 IS NULL)
AND column2 = 'XXX'
AND ROWNUM <= 100000;

При необходимости будут обновлены первые 100 000 строк. Изменить номер по вкусу. Зафиксируйте, промойте и повторяйте, пока не появится сообщение «0 строк обновлено».

0 голосов
/ 15 ноября 2010

Если пользователи хотят видеть новые данные во время преобразования, вы можете использовать представление.

Переименуйте вашу таблицу, например, [table_old], и создайте новую таблицу [table_new], куда будут скопированы обновленные значения. Создайте представление, используя исходное имя таблицы [table], которая возвращает все строки [table_new] и любые строки из [table_old], отсутствующие в [table_new].

Как только все данные были преобразованы, удалите старую таблицу, и представление затем переименуете [table_new] обратно в исходное имя таблицы.

Надеюсь, это четкое описание!

0 голосов
/ 15 ноября 2010

Я не специалист по БД, и вот что я думаю.

Строки с XXX больше, чем у других?
Если это так, создайте таблицу для вывода строк с XXX и установите column1 с X.
Вставьте остальные строки, которые не являются XXX.
Обрезать старую таблицу.
Вставьте в старую таблицу содержимое новой таблицы.

Эксперты БД могут критиковать / комментировать этот подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...