#oracle #oracle11g
#Oracle #oracle11g
Вопрос:
У меня есть таблица, в которой более 500 000 строк. Вот что мне нужно — для каждых 1000 строк мне нужно обновить значение столбца до последовательных чисел, начиная с 1. Например, таблица ниже:
ID | NAME | EMAIL | PHONE | FLAG
1 | Peter | pete@mail.com | 12345678 |
.
.
.
.
500000 | Josef | jos@mail.com | 987654321 |
Итак, для первых 1000 строк мне нужно, чтобы значение столбца FLAG
было равно 1, следующие 1000 строк — 2 и т. Д., А последняя группа из 1000 или менее 1000 строк — следующему порядковому номеру
Конечный результат, который мне нужен, выглядит следующим образом:
ID | NAME | EMAIL | PHONE | FLAG
1 | Peter | pete@mail.com | 12345678 | 1
.
.
1000 | Sashi | sash@mail.com | 2353553 | 1
1001 | Veer | veer@mail.com | 33453453 | 2
.
.
2000 | Ash | ash@mail.com | 235427127 | 2
.
.
499001 | Duster| dust@mail.com | 3434343 | 500
500000 | Josef | jos@mail.com | 987654321 | 500
.
.
Я могу написать этот запрос
update table
set flag = 1
where rownum <= 1000 and flag is null;
Приведенный выше запрос занимает много времени вручную. В любом случае я могу использовать какой-то цикл for для выполнения этого или любого лучшего запроса. Надеюсь, мой вопрос понятен.
Ответ №1:
Попробуйте это:
update table
set flag = trunc((id - 1) / 1000) 1;