2011-12-06 13 views
8

Tengo un campo en una tabla que es varchar2, 4000 bytes. Hay más de 50000 filas. No todas las filas tienen datos en este campo. Pocos campos de datos tienen más de 255 bytes, pero algunos son 4000. Para colocar la tabla en una nueva aplicación, necesito acortar el campo a 255 bytes.¿Cómo hacer que un campo varchar2 sea más corto en Oracle?

¿Hay una instrucción SQL que reducirá la longitud a 255? Me doy cuenta de que se perderán los datos, eso es parte del costo de la nueva aplicación. El corte debe ser arbitrario, simplemente detener los datos en 255 sin importar la circunstancia.

+0

actualización y subcadena – xQbert

Respuesta

28
update b set text2 = substr(text2,1,255); 

continuación alter table para ajustar la longitud de la columna de 255:

alter table b MODIFY "TEXT2" varchar2(255 byte); 
+0

muchas gracias! – user761758

+8

, ya que solo hay unas pocas filas, solo actualizaría los registros que son demasiado grandes ... agregar 'WHERE LENGTH (text2)> 255' –

+1

PREGUNTA DE TEORÍA: Tengo curiosidad sobre cómo esto podría ayudar. a primera vista, estoy de acuerdo con que debería. Pero cuando empecé a pensar en eso comencé a preguntarme. con el where, tendría que hacer un primer tramo (performance hit) en CADA registro, ya que dudo que haya un índice sobre la longitud. entonces tiene a la subcadena. Entonces me parece que en realidad podría ser más lento. simplemente usando str, hace el recuento una vez para cada registro y se detiene en 255 o al final de la cadena cada vez. mientras que con la longitud tiene que contar todo. luego haz la subcadena. Solo comida para pensar. – xQbert

Cuestiones relacionadas