urgente cambio de tipo de dato a columna llena
Se puede cambiar el tipo de datode una columna que ya tiene datos de NUMBER A VARCHAR2, es urgente
Con lo siguiente puedes alterar tipos de datos, solo necesitas agregarle el nuevo tipo despues del nombre de la columna.
Alter table nombretabla modify(nombrecolumna tipodato);
Alter table nombretabla modify(nombrecolumna tipodato);
Si el campo está relleno no puedes cambiar el tipo de dato, tiene que estár vacio.
¿Es éste lo que quieres hacer?
SQL> create table andrew1
2 (my_letter varchar2(1),
3 my_number number)
4 /
Table created.
SQL> desc andrew1
Name Null? Type
----------------------------------------- -------- ----------------------------
MY_LETTER VARCHAR2(1)
MY_NUMBER NUMBER
SQL>
SQL> insert into andrew1 values('A',1)
2 /
1 row created.
SQL> insert into andrew1 values('B',2)
2 /
1 row created.
SQL> insert into andrew1 values('C',3)
2 /
1 row created.
SQL> select * from andrew1
2 /
M MY_NUMBER
- ----------
A 1
B 2
C 3
SQL> rem Éste no va a funcionar:
SQL> alter table andrew1 modify(my_number varchar2(1))
2 /
alter table andrew1 modify(my_number varchar2(1))
*
ERROR at line 1:
ORA-01439: column to be modified must be empty to change datatype
SQL> create table andrew2 as
2 select rowid my_rowid, my_number from andrew1
3 /
Table created.
SQL> update andrew1 set my_number = null
2 /
3 rows updated.
SQL> alter table andrew1 modify(my_number varchar2(1))
2 /
Table altered.
SQL> desc andrew1
Name Null? Type
----------------------------------------- -------- ----------------------------
MY_LETTER VARCHAR2(1)
MY_NUMBER VARCHAR2(1)
SQL>
SQL> update andrew1 x
2 set my_number =
3 (select my_number from andrew2
4 where my_rowid = x.rowid)
5 /
3 rows updated.
SQL> select * from andrew1
2 /
M M
- -
A 1
B 2
C 3
SQL> drop table andrew1
2 /
Table dropped.
SQL> drop table andrew2
2 /
Table dropped.
SQL>
SQL> create table andrew1
2 (my_letter varchar2(1),
3 my_number number)
4 /
Table created.
SQL> desc andrew1
Name Null? Type
----------------------------------------- -------- ----------------------------
MY_LETTER VARCHAR2(1)
MY_NUMBER NUMBER
SQL>
SQL> insert into andrew1 values('A',1)
2 /
1 row created.
SQL> insert into andrew1 values('B',2)
2 /
1 row created.
SQL> insert into andrew1 values('C',3)
2 /
1 row created.
SQL> select * from andrew1
2 /
M MY_NUMBER
- ----------
A 1
B 2
C 3
SQL> rem Éste no va a funcionar:
SQL> alter table andrew1 modify(my_number varchar2(1))
2 /
alter table andrew1 modify(my_number varchar2(1))
*
ERROR at line 1:
ORA-01439: column to be modified must be empty to change datatype
SQL> create table andrew2 as
2 select rowid my_rowid, my_number from andrew1
3 /
Table created.
SQL> update andrew1 set my_number = null
2 /
3 rows updated.
SQL> alter table andrew1 modify(my_number varchar2(1))
2 /
Table altered.
SQL> desc andrew1
Name Null? Type
----------------------------------------- -------- ----------------------------
MY_LETTER VARCHAR2(1)
MY_NUMBER VARCHAR2(1)
SQL>
SQL> update andrew1 x
2 set my_number =
3 (select my_number from andrew2
4 where my_rowid = x.rowid)
5 /
3 rows updated.
SQL> select * from andrew1
2 /
M M
- -
A 1
B 2
C 3
SQL> drop table andrew1
2 /
Table dropped.
SQL> drop table andrew2
2 /
Table dropped.
SQL>
Esto también te puede servir
ALTER TABLE TU_TABLA
ADD CAMPO_NUMBER_DUMMY NUMBER
/
UPDATE TU_TABLA SET CAMPO_NUMBER_DUMMY = TO_NUMBER(CAMPO_CHAR)
/
UPDATE TU_TABLA
SET CAMPO_CHAR = NULL
/
ALTER TABLE TU_TABLA
MODIFY CAMPO_CHAR NUMBER
/
UPDATE TU_TABLA
SET CAMPO_CHAR = CAMPO_NUMBER_DUMMY
/
ALTER TABLE TU_TABLA
DROP COLUMN CAMPO_NUMBER_DUMMY
/
Obviamente siempre y cuando los datos que están en el campo CHAR sean coherentes al tipo NUMBER
ALTER TABLE TU_TABLA
ADD CAMPO_NUMBER_DUMMY NUMBER
/
UPDATE TU_TABLA SET CAMPO_NUMBER_DUMMY = TO_NUMBER(CAMPO_CHAR)
/
UPDATE TU_TABLA
SET CAMPO_CHAR = NULL
/
ALTER TABLE TU_TABLA
MODIFY CAMPO_CHAR NUMBER
/
UPDATE TU_TABLA
SET CAMPO_CHAR = CAMPO_NUMBER_DUMMY
/
ALTER TABLE TU_TABLA
DROP COLUMN CAMPO_NUMBER_DUMMY
/
Obviamente siempre y cuando los datos que están en el campo CHAR sean coherentes al tipo NUMBER
