sql >> Base de Datos >  >> RDS >> Oracle

Oracle 12c:¿Cómo puedo modificar una columna de clave principal existente a una columna de identidad?

No puede convertir una columna existente en una columna de identidad real, pero puede obtener un comportamiento similar usando una secuencia como predeterminada para la columna.

create sequence seq_tmp_identity_id
  start with 4
  increment by 1;

Luego usa:

alter table tmp_identity 
   modify id 
   default seq_tmp_identity_id.nextval;

para hacer que la columna use la secuencia como valor predeterminado. Si quieres puedes usar default on null para sobrescribir un null explícito valor proporcionado durante la inserción (esto es lo más cerca que puede llegar a una columna de identidad)

Si quieres un real columna de identidad, deberá eliminar el id actual columna y luego vuelva a agregarla como una columna de identidad:

alter table tmp_identity drop column id;

alter table tmp_identity 
     add id number(38) 
     generated always as identity;

Tenga en cuenta que no debe agregar el start with 4 en este caso, para que todas las filas obtengan un nuevo número único