Tengo un escenario específico en el que tengo que insertar dos columnas nuevas en una tabla existente en Oracle. No puedo hacer caer y volver a crear la mesa. Entonces, ¿se puede lograr de alguna manera?¿Cómo insertar una columna en una posición específica en el oráculo sin soltar y volver a crear la tabla?
Respuesta
Amit-
no creo que se puede añadir una columna en cualquier lugar, pero al final de la tabla una vez que se crea la tabla. Una solución podría ser la de intentar esto:
CREATE TABLE MY_TEMP_TABLE AS
SELECT *
FROM TABLE_TO_CHANGE;
eliminar la tabla que desea agregar columnas a:
DROP TABLE TABLE_TO_CHANGE;
Es en el punto que podría reconstruir la tabla existente desde cero añadiendo en las columnas donde deseo. Supongamos para este ejercicio que desea agregar las columnas llamadas "COL2 y COL3".
A continuación, introduzca los datos de nuevo en la nueva tabla:
INSERT INTO TABLE_TO_CHANGE (COL1, COL2, COL3, COL4)
SELECT COL1, 'Foo', 'Bar', COL4
FROM MY_TEMP_TABLE;
Cuando se inserta la tabla de datos en su "nuevo-viejo", se puede eliminar la tabla temporal.
DROP TABLE MY_TEMP_TABLE;
Esto es a menudo lo que hago cuando quiero agregar columnas en una ubicación específica. Obviamente, si se trata de un sistema de producción en línea, probablemente no sea práctico, sino solo una idea potencial.
-CJ
Usted (todavía) no puede elegir la posición de la columna usando ALTER TABLE: sólo se puede añadir al final de la tabla. Obviamente, puede seleccionar las columnas en el orden que desee, de modo que a menos que esté utilizando SELECT * FROM, el orden de las columnas no debería ser un gran problema.
Si realmente debe tener en un orden particular y no se puede descartar y volver a la mesa, entonces usted podría ser capaz de soltar y volver a crear columnas en su lugar: -
la primera copia de la mesa
CREATE TABLE my_tab_temp AS SELECT * FROM my_tab;
a continuación, colocar columnas que desea ser después de la columna se va a insertar
ALTER TABLE my_tab DROP COLUMN three;
Ahora añadir la nueva columna (dos en este ejemplo) y los ha extraído.
ALTER TABLE my_tab ADD (two NUMBER(2), three NUMBER(10));
Por último, añadir de nuevo los datos para la re-creado columnas
UPDATE my_tab SET my_tab.three = (SELECT my_tab_temp.three FROM my_tab_temp WHERE my_tab.one = my_tab_temp.one);
Obviamente su actualización será muy probablemente más complejo y que tendrá que manejar índices y restricciones y no podrá para usar esto en algunos casos (columnas LOB, etc.). Además, esta es una manera bastante espantosa de hacer esto, pero la tabla siempre existirá y terminarás con las columnas en el orden que quieras. Pero, ¿el orden de las columnas realmente importa tanto?
Aunque esto es algo antiguo, me gustaría agregar una versión ligeramente mejorada que realmente cambie el orden de las columnas.Estos son los pasos (suponiendo que tenemos una tabla TAB1 con columnas col1, col2, COL3):
- Añadir nueva columna a la tabla TAB1:
alter table TAB1 add (NEW_COL number);
- "copia" a temp nombrar mientras se cambia el orden de las columnas y cambiar el nombre de la nueva columna:
create table tempTAB1 as select NEW_COL as COL0, COL1, COL2, COL3 from TAB1;
- gota tabla existente:
drop table TAB1;
- de cambio de nombre temp nombredetabla a acaba de caer nombredetabla:
rename tempTAB1 to TAB1;
Eso sí, como esto:
alter table TABLE_NAME (COLUMN_NAME DATA_TYPE);
Una nueva columna ser agregado al final de la tabla.
- 1. Aumentar el valor de una columna de identidad en SQL Server sin descartar y volver a crear la tabla
- 2. ¿Cómo encriptar una columna específica en una tabla MySQL?
- 3. Cambiar el nombre de la columna sin volver a crear la tabla MySQL
- 4. Insertar fila sin volver a cargar la tabla
- 5. En Oracle, ¿es posible "insertar" una columna en una tabla?
- 6. Insertar en crear nueva tabla
- 7. ¿Insertar una nueva columna en la tabla en sqlite?
- 8. Agregue una nueva columna de tabla a la posición ordinal específica
- 9. volver a una actividad específica
- 10. ¿Cómo muevo el cursor a una fila y columna específica?
- 11. insertar un elemento en una posición específica de un vector
- 12. Insertar filas en una tabla con una columna IDENTITY solamente
- 13. Insertar en una columna seleccionando otra columna en otra tabla pero cómo llenar la segunda columna
- 14. ¿Cómo insertar una 'Cadena' en un 'JTextField' a una posición específica?
- 15. Agregue una columna a una posición específica en el servidor MSSQL
- 16. Columna específica de orientación en la tabla
- 17. SQL Server 2008 R2 Agregar columna a una ubicación específica
- 18. ¿Cómo empalmar una matriz para insertar una matriz en una posición específica?
- 19. Cómo insertar un objeto en una ArrayList en una posición específica
- 20. ¿Cómo puedo dividir una cadena y volver a unirme sin crear una lista intermedia en Python?
- 21. Cómo volver a asignar la columna AUTO_INCREMENT para cada fila en una tabla MySQL usando PHP
- 22. Cómo comparar dos tablas columna por columna en oráculo
- 23. Cómo insertar una columna en otra columna dentro de la misma tabla en SQL Server
- 24. En WPF, ¿cómo puedo vincular una columna de cuadrícula de datos a una columna específica de una tabla de datos?
- 25. ¿Cómo seleccionar una columna específica en LINQ?
- 26. volver a una confirmación específica luego volver al presente
- 27. Borrar, Truncar o Soltar para limpiar una tabla en MySQL
- 28. ¿Cómo se detecta si hay un índice para una columna específica en una tabla en Oracle?
- 29. ¿Cómo insertar una fila en una tabla que tiene solo una sola columna de autoincremento?
- 30. Cómo crear una tabla con la columna de identidad
En 12c hay un truco para hacerlo: http://tkyte.blogspot.com.au/2013/07/12c-silly-little-trick-with-invisibility.html (Nota, sin embargo, no hay razón lógica para cambiar el orden de las columnas.) –
¿No le gustaría agregar las columnas que es más probable que sean nulas al final de la tabla para ahorrar espacio? Ver https://community.oracle.com/thread/855964 –