Как авто-наполнять поле в таблице Oracle?

Я проиллюстрирую то, что я хочу сделать с простым примером:

У меня есть следующая таблица, поле “ТЕСТ” типа NUMBER новое и у него нет стоимости:

|ID |    NAME    | TEST |
|---|------------|------|
|1  | Stark      |      |
|5  | Targaryen  |      |
|9  | Lannister  |      |

Нуждался в том, чтобы авто-наполнить поле ТЕСТ числами последующими инициализируясь под 1. А именно получать что-то как:

|ID |    NAME    | TEST |
|---|------------|------|
|1  | Stark      |   1  |
|5  | Targaryen  |   2  |
|9  | Lannister  |   3  |

Я использую базу данных ORACLE 11g и присоединяюсь посредством Toad.

3
задан 18.12.2015, 19:36
3 ответа

Если ты только что создал новую колонну со стоимостью, ты можешь делать следующее

UPDATE mitabla SET test = ROWNUM;

В Oracle ROWNUM это псевдоколонна, которая в этом случае возвратится в числе линии и это распределит в твою колонну. Этот метод применись для единственного использования, потому что, если ты удаляешь промежуточные линии и будешь продолжать добавлять, что линии могут происходить неосновательность в нумерации. Но он очень полезный, если ты не хочешь создать объект схемы.

1
ответ дан 24.11.2019, 15:05

То, что ты должен делать, состоит в том, чтобы создавать одну secuencia и обновлять твою таблицу используя вышеупомянутую последовательность. Ты можешь делать это так:

create sequence seq1;

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

create sequence seq1 start with 1 increment by 1 minvalue 1 maxvalue 100000;

Потом ты обновляешь твою таблицу:

update tu_tabla set test=seq1.nextval; 

Если уже есть стоимость, введенная в колонне test по какому-то разуму, я предлагаю использовать эту версию:

    update tu_tabla set test=seq1.nextval where test is null;

Результат должен бы быть нечто похожим:

|ID |    NAME    | TEST |
|---|------------|------|
|1  | Stark      |   1  |
|5  | Targaryen  |   2  |
|9  | Lannister  |   3  |

Также ты можешь делать это, как предложи enrique:

UPDATE mitabla SET test = ROWNUM;

но есть что-то, что мне не нравится этого и есть что, если по какому-то разуму ты удалишь промежуточную линию, и ты продолжаешь добавлять стоимость к таблице, тогда будет сделан беспорядок в поле test потому что он не выполнит число линии.

С другой стороны, если ты удаляешь промежуточную стоимость используя последовательность, следующая стоимость последовательности держится, хотя ты удалишь предыдущие какие-то.

4
ответ дан 24.11.2019, 15:05

PodrГ-схвати манипулировать этим с последовательностью:

CREATE SEQUENCE NOMBRE_SECUENCIA START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999999999; -- Aquí tu máximo valor

И потом ты обновляешь поле

UPDATE TuTabla SET TEST = NOMBRE_SECUENCIA.NEXTVAL;
COMMIT;
0
ответ дан 24.11.2019, 15:05