2010-04-19 28 views

Respuesta

99

Yep, oracle tiene tablas temporales. Aquí hay un enlace a un artículo AskTom que los describe.
Y here es el oráculo oficial CREAR TABLA documentación (desplácese hacia abajo a la sección TEMPORAL GLOBAL CREAR)
Y un ejemplo:

CREATE GLOBAL TEMPORARY TABLE today_sales 
    ON COMMIT PRESERVE ROWS 
    AS SELECT * FROM orders WHERE order_date = SYSDATE; 
+34

Sin downvote, pero nunca recomendaría un CREATE TABLE AS SELECT para una tabla temporal global - un desarrollador con menos experiencia podría hacerse una idea equivocada de que tienen que llenar GTT esta manera cada vez. Claro, esta es una forma conveniente de copiar la definición de otra tabla, pero el ejemplo probablemente confundirá a algunas personas. –

+0

Estoy totalmente de acuerdo con Jeffrey Kemp aquí, esta es solo una forma de crear esta tabla, me encontré con esto, y me di cuenta hombre, tengo que poner esta declaración seleccionada en mi DDL. –

+1

puede simplemente agregar "donde 1 = 0"; – Palcente

63

Sólo un consejo .. Las tablas temporales en Oracle son diferentes a SQL Server. Usted lo crea UNA VEZ y solo UNA VEZ, no todas las sesiones. Las filas que inserte en él son visibles solo para su sesión y se eliminan automáticamente cuando finaliza la sesión (o al final de la transacción, dependiendo de la cláusula "EN COMISIÓN" que utilice).

+12

No lo entiendo completamente. Dijo que lo creó una vez y solo una vez, y no todas las sesiones. Sin embargo, también dijo que la tabla temporal se elimina cada sesión. ¿Eso no significa que tendrá que crear la tabla temporal en cada sesión? – Chaos

+26

'DELETED', no' DROP'ped. –

+7

Usted No cree una tabla temporal en cada sesión, pero una vez. la tabla está disponible en todo el sistema. La tabla es accesible desde cualquier sesión que cree, incluidas las sesiones paralelas. pero cuando insertas datos desde el interior de una sesión, esos datos no son visibles desde otras sesiones paralelas en todo el sistema. Los datos de una sesión son propiedad de esa sesión solamente. Por lo tanto, los datos son específicos de la sesión, no son visibles en el sistema. Por lo tanto, cuando cierra una sesión, los datos de esa sesión se eliminan de la tabla. – SubhasisM

27
CREATE GLOBAL TEMPORARY TABLE Table_name 
    (startdate DATE, 
    enddate DATE, 
    class CHAR(20)) 
    ON COMMIT DELETE ROWS; 
+8

Tenga en cuenta que las filas siempre se eliminarán al final de la sesión; 'ON COMMIT DELETE ROWS' significa que se descartarán antes, si realiza incrementos durante una sesión. –

+1

¿Es posible eliminar filas manualmente durante la sesión? – zygimantus

+0

zygimantus, sí, puede eliminar manualmente durante la sesión. Durante la sesión, la tabla temporal se comporta exactamente como una tabla normal. La única diferencia entre una tabla temporal y una tabla real, desde la perspectiva de un usuario, es que todas las filas se eliminan una vez que la sesión finaliza y ninguna otra sesión puede leer el contenido de la tabla utilizada por la sesión.Hay una instancia de la tabla por sesión; dos sesiones pueden usar la misma tabla temporal al mismo tiempo y tienen dos conjuntos diferentes de filas, sin ningún conflicto. –

Cuestiones relacionadas