Saltar al contenido

Oracle SQL para cambiar el tipo de columna de número a varchar2 mientras contiene datos

Solución:

create table temp_uda1 (test1 integer);
insert into temp_uda1 values (1);

alter table temp_uda1 add (test1_new varchar2(3));

update temp_uda1 
   set test1_new = to_char(test1);

alter table temp_uda1 drop column test1 cascade constraints;
alter table temp_uda1 rename column test1_new to test1;

Si había un índice en la columna, debe volver a crearlo.

Tenga en cuenta que la actualización fallará si tiene números en la columna anterior que son mayores que 999. Si lo hace, debe ajustar el valor máximo para el varchar columna

Agregue una nueva columna como varchar2, copie los datos en esta columna, elimine la columna anterior, cambie el nombre de la nueva columna como el nombre de la columna real:

ALTER TABLE UDA1
ADD (TEST1_temp  VARCHAR2(16));

update UDA1 set TEST1_temp = TEST1;

ALTER TABLE UDA1 DROP COLUMN TEST1;

ALTER TABLE UDA1 
RENAME COLUMN TEST1_temp TO TEST1;

Mira el paquete de Oracle DBMS_REDEFINE. Con un poco de suerte, puede hacerlo en línea sin tiempo de inactividad, si es necesario. De lo contrario, puede:

  • Agregar nuevo VARCHAR2 columna
  • Usar update copiar NUMBER dentro VARCHAR2
  • Soltar NUMBER columna
  • Rebautizar VARCHAR2 columna
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *