que - oracle ya
Agregue una clave primaria de incremento automático a la tabla existente en Oracle (4)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo crear ID con AUTO_INCREMENT en Oracle? 16 respuestas
Quiero agregar una nueva columna primaria de incremento automático a una tabla existente que tenga datos. ¿Cómo puedo hacer eso?
Primero agregué una columna y luego intenté agregar una secuencia después de eso, perdí la forma de insertar y hacer esa columna como clave principal.
Atrapado en los foros de Oracle OTN
Use la tabla alter para agregar una columna, por ejemplo:
alter table tableName add(columnName NUMBER);
Luego crea una secuencia:
CREATE SEQUENCE SEQ_ID
START WITH 1
INCREMENT BY 1
MAXVALUE 99999999
MINVALUE 1
NOCYCLE;
y, la update
uso para insertar valores en una columna como esta
UPDATE tableName SET columnName = seq_test_id.NEXTVAL
Puede usar Oracle Data Modeler para crear claves de sustitución automáticas.
Paso 1. - Crea un diagrama relacional
Primero puede crear un Diagrama Lógico e Ingeniero para crear el Diagrama Relacional o puede crear el Diagrama Relacional inmediatamente.
Agregue la entidad (tabla) que requiere tener PK auto incrementado, seleccione el tipo de PK como entero.
Paso 2. - Editar propiedad de columna PK
Obtenga las propiedades de la columna PK. Puede hacer doble clic en el nombre de la columna o hacer clic en el botón ''Propiedades''.
Aparece el cuadro de diálogo Propiedades de columna.
Seleccione la pestaña General (Selección predeterminada por primera vez). Luego seleccione las casillas de verificación ''Aumento automático'' y ''Columna de identidad''.
Paso 3. - Información adicional
Se puede especificar información adicional relacionada con el incremento automático seleccionando la pestaña ''Aumento automático''.
- Empezar con
- Incrementar por
- Valor mínimo
- Valor máximo
- Ciclo
- Deshabilitar caché
- Orden
- Nombre de la secuencia
- Nombre del disparador
- Generar disparador
Por lo general, es una buena idea mencionar el nombre de la secuencia, de modo que sea útil en PL / SQL.
Haga clic en Aceptar (Aplicar) al cuadro de diálogo Propiedades de columna.
Haga clic en Aceptar (Aplicar) al cuadro de diálogo Propiedades de la tabla.
La tabla aparece en el diagrama relacional.
Si tiene la columna y la secuencia, primero debe llenar una nueva clave para todas las filas existentes. Suponiendo que no le importa qué tecla se asigna a qué fila
UPDATE table_name
SET new_pk_column = sequence_name.nextval;
Una vez hecho esto, puede crear la restricción de clave primaria (esto supone que no existe una restricción de clave primaria o que ya ha descartado la restricción de clave primaria existente)
ALTER TABLE table_name
ADD CONSTRAINT pk_table_name PRIMARY KEY( new_pk_column )
Si desea generar la clave automáticamente, deberá agregar un disparador
CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
:new.new_pk_column := sequence_name.nextval;
END;
Si está en una versión anterior de Oracle, la sintaxis es un poco más engorrosa
CREATE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
SELECT sequence_name.nextval
INTO :new.new_pk_column
FROM dual;
END;
Supongamos que su tabla se llama t1
y su clave principal se llama id
Primero, crea la secuencia:
create sequence t1_seq start with 1 increment by 1 nomaxvalue;
Luego crea un disparador que se incrementa al insertar:
create trigger t1_trigger
before insert on t1
for each row
begin
select t1_seq.nextval into :new.id from dual;
end;