Pregunta: | 28757 - ORACLE: CAMBIO DE TIPO EN UNA PRIMARY KEY |
Autor: | Teoriko Oko |
Supongamos que tengo una primary key definida como: DNI number(8) , constraint clave primary key(DNI); como puedo pasar a NIF varchar2(9) <------- ya que quiero añadir una letra a la secuencia de numeros de DNI. Ademas quiero que los datos de otras tablas que referenciaban a DNI ahora referencien a NIF . ¿Es posible realizar ese cambio sin usar PL/SQL ? ¿Como? Y si no es posible, podríais señalarme los pasos a seguir? GRACIAS |
Respuesta: | Alixandro Florian |
Sr. Oko, Tienes que convertir el campo DNI a varchar2, ademas borrar el constraint que hace referencia al Pk ( debes saber como se llama el Pk) y crearlo de nuevo cuando haya hecho el cambio a varchar2. Para Cambiar a varchar2: alter table nombre_tabla modify DNI varchar2(9); Para borrar el constraint del pk: alter table nombre_table drop constraint nombre_constraint cascade; Para crear el constraint : alter table nombre_tabla add constraint pk_xxxxxxxx primary key (DNI); Nota: Debes conocer la regla para convertir campos de varchar a number o de number a varchar. Si te da este error: SQL> alter table oko modify DNI varchar2(9); alter table oko modify DNI varchar2(9) * ERROR at line 1: ORA-01439: column to be modified must be empty to change datatype es porque el campo ''la tabla'' tienes que estar vacia. para vaciar la tabla: delete nombre_tabla cascade; /* esto borra todas las columnas */ Si los datos son importante debes crear una copia de la tabla original, para conservar los datos, para luego insetarlo. para crear copia: create table nombre_tabla_copia as select * from nombre_tabla_original; suerte. |