urgente cambio de tipo de dato a columna llena

gu
24 de Noviembre del 2005
Se puede cambiar el tipo de datode una columna que ya tiene datos de NUMBER A VARCHAR2, es urgente

edgar
24 de Noviembre del 2005
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);

Jor-El
24 de Noviembre del 2005
Si el campo está relleno no puedes cambiar el tipo de dato, tiene que estár vacio.

andrewsreid
24 de Noviembre del 2005
¿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>

Jor-El
24 de Noviembre del 2005
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

gu
24 de Noviembre del 2005
este es el error que me sale cuando intento cambiar el tipo de dato

Failed to commit: ORA-02267: tipo de columna incompatible con tipo de columna a la que se hace referencia

y la columna ya esta vacia