miércoles, 19 de mayo de 2010

Cambiando el orden de las columnas

Como alguno de ustedes ya sabrá el proceso de cambiar el orden las columnas de una tabla en Oracle no se realiza con un simple ALTER TABLE.

Para poder llevar a cabo esta tarea a continuación vamos a ver una sucesión de pasos que nos van a ayudar a solucionar nuestra necesidad.

Cabe aclarar que si la tabla tiene indices asociados primero habría que relevarlos dado que los vamos a perder con este procedimiento.

SQL> create table EJEMPLO (col1 number, col2 number, col3 number);

Table created.

SQL> desc EJEMPLO;
Name          Null?     Type
---------- ------ ----------------
COL1 NUMBER
COL2 NUMBER
COL3 NUMBER

SQL> create table AUXILIAR as select col3, col2, col1 from EJEMPLO;

Table created.

SQL> drop table EJEMPLO;

Table dropped.

SQL> alter table AUXILIAR rename to EJEMPLO;

Table altered.

SQL> desc EJEMPLO;
Name          Null?     Type
---------- ------ ----------------
COL3 NUMBER
COL2 NUMBER
COL1 NUMBER

Espero les haya servido.

Saludos!
Gondalf

6 comentarios:

  1. y cuando tienes datos?

    ResponderEliminar
  2. No entendí bien tu pregunta, a que te refiere con cuando obtengo los datos?

    ResponderEliminar
  3. Hola Gonzalo, un pequeño aporte para sumar en este lindo blog...

    -El orden que mostrar en el 2º desc EJEMPLO no muestra el cambio, si no entendí mal debería ser col3,col2,col1.
    -Pregunta: ¿En el caso de que la tabla original (EJEMPLO) tenga índices o constraints creo que siguiendo estos pasos se perderían, con lo cual estaría bueno aclarar que con anterioridad al paso drop table se releven dichos objetos así no se sufre ninguna pérdida.

    Abrazo.

    ResponderEliminar
  4. Gracias Facundo... es muy buena tu aclaración, efectivamente se perderían dichos índices, por lo que primero habría que relevarlos.

    ResponderEliminar
  5. la pregunta seria si tengo en mi tabla q quiero reordenar las columnas mas de 1000 datos. muy aparte de el relevo de indices.. como seria la cuestion... supongo q seria el trasladar la data a la nueva tabla.. con un select insert into o me equivoco?'

    ResponderEliminar
  6. los SGDB no tienen alguna opción para hacerlo automático ?

    ResponderEliminar