2011-07-27 29 views
16

Tengo una columna detalles diseñada como varchar en Oracle DB, este DB se está utilizando ahora para clientes y algunas filas ya tienen datos almacenados.Cómo cambiar columna varchar a clob en oráculo

Ahora quiero cambiar la columna detalles a una columna Clob. ¿Cuál es una manera inteligente para lograr esto?

Respuesta

11
  1. añadir una columna CLOB a la mesa
  2. columna CLOB actualización de los valores de la columna varchar
  3. columna
  4. caída de la columna varchar
  5. renombrar CLOB a varchar columnas nombrar
51

(como la respuesta anterior) y aquí está el código:

ALTER TABLE atable 
ADD (tmpdetails CLOB); 

UPDATE atable SET tmpdetails=details; 
COMMIT; 

ALTER TABLE atable DROP COLUMN details; 

ALTER TABLE atable 
RENAME COLUMN tmpdetails TO details; 
+6

1 Si estamos haciendo esto en una sola sesión del COMMIT es innecesaria, ya que la sentencia ALTER TABLE posterior emite cometer un implícito (dos, en realidad). – APC

+0

Pero esto no mantendrá la posición de su columna. Moverá tu columna al final de la tabla. Entonces, si desea mantener la posición de su columna también, siga estos pasos. –

+2

Lo siento, simplemente estaba respondiendo la pregunta, supongo que si está utilizando una selección * en una tabla, entonces el orden de las columnas sería importante, pero en primer lugar cuestionaría la cordura de tal enfoque. –

7

Pero esto no va a mantener la posición de su columna. Moverá tu columna al final de la tabla. Entonces, si desea mantener la posición de su columna también, siga estos pasos.

alter table atable add (tempdetails varchar2(4000)); 
update atable set tempdetails = details; 
update atable set details = null; -- this is necessary to change data type 
alter table atable modify details long; -- this is required because you can not change directly to clob. 
alter table atable modify details clob; 
update atable set details=tempdetails; 
alter table atable drop column tempdetails; 

Ésta es la manera en la que usted va a mantener los datos y la posición de la columna intacta incluso después de cambiar el tipo de datos. Para obtener información detallada con el ejemplo ver aquí: http://www.oraclebin.com/2012/12/how-to-change-varchar2-to-clob-datatype.html

+0

Hola, esta respuesta es válida, pero la tercera declaración debe ser cambiado de la siguiente manera: Actualizar datos del conjunto inflable = NULL; - esto es necesario para cambiar el tipo de datos –

Cuestiones relacionadas