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
copiarNUMBER
dentroVARCHAR2
- Soltar
NUMBER
columna - Rebautizar
VARCHAR2
columna
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)