English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Explicación detallada de las tablas temporales en Oracle y ejemplos

En Oracle8A partir de la versión i o superior, se pueden crear dos tipos de tablas temporales:

1。Tabla temporal específica de sesión

CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <especificación de columna> )
ON COMMIT PRESERVE ROWS; 

2。Tabla temporal específica de transacción

CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <especificación de columna> )
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE MyTempTable  

La tabla temporal que se ha creado existe, pero pruebe a insertar un registro y luego conectarse a través de otra conexión para seleccionar, el registro está vacío, ¿entiende? Vuelvo a pegar las siguientes dos frases:

--ON COMMIT DELETE ROWS indica que la tabla temporal está especificada por la transacción, y ORACLE cortará la tabla (eliminar todas las filas) después de cada compromiso.
--ON COMMIT PRESERVE ROWS indica que la tabla temporal está especificada por la sesión, y cuando se interrumpe la sesión, ORACLE cortará la tabla.

No es necesario considerar el problema de conflicto.

La tabla temporal solo almacena los datos utilizados por la sesión actual (session), y los datos solo existen durante el período de transacción o sesión.

Se crea una tabla temporal mediante la orden CREATE GLOBAL TEMPORARY TABLE, para las tablas temporales de tipo transacción, los datos solo existen durante el período de transacción, y para las tablas temporales de tipo sesión, los datos existen durante el período de sesión.

Los datos de la sesión son privados para la sesión actual. Cada sesión solo puede ver y modificar sus propios datos. No se aplican bloqueos DML a los datos de la tabla temporal. Las siguientes sentencias controlan la existencia de las filas.

● La tabla de filas de ON COMMIT DELETE ROWS solo es visible durante el período de transacción
● ON COMMIT PRESERVE ROWS: Las filas del nombre de la tabla son visibles durante todo el período de la sesión

Se pueden crear índices, vistas y disparadores en tablas temporales, y se pueden importar y exportar la definición de la tabla utilizando las herramientas export e import, pero no se puede exportar los datos. La definición de la tabla es visible para todas las sesiones.

Tablas temporales (Temporary Tables)

1Introducción

Además de poder guardar tablas permanentes, la base de datos ORACLE también puede crear tablas temporales (tablas temporales). Estas tablas temporales se utilizan para guardar los datos de una sesión SESSION,

o almacenados en una transacción que necesita los datos. Cuando finaliza la sesión o el usuario realiza un commit y un rollback de la transacción, los datos de la tabla temporal se borran automáticamente,
pero la estructura y metadatos de la tabla temporal aún se almacenan en el diccionario de datos del usuario.

Las tablas temporales solo están disponibles en oracle8i y versiones posteriores del producto son compatibles.

2Descripción detallada

Las tablas temporales de Oracle se dividen en tablas temporales de nivel de sesión y tablas temporales de nivel de transacción.

Las tablas temporales de nivel de sesión son las que tienen los datos en la tabla temporal solo durante la vida de la sesión. Cuando termina la sesión del usuario, Oracle borra automáticamente los datos de la tabla temporal.
Las tablas temporales de nivel de transacción son las que tienen los datos en la tabla temporal solo durante la vida de la transacción. Cuando termina una transacción (commit o rollback), Oracle borra automáticamente los datos de la tabla temporal.

Los datos de la tabla temporal solo son válidos para la sesión actual, cada sesión tiene sus propios datos temporales y no puede acceder a los datos temporales de otras sesiones. Por lo tanto,

Las tablas temporales no necesitan bloqueos DML. Cuando una sesión termina (salida normal del usuario, salida anormal o colapso del ejemplo ORACLE) o cuando termina una transacción, Oracle borra los datos de la sesión.

La sentencia TRUNCATE de la tabla borra los datos de la tabla temporal. Pero no borra los datos de otras tablas temporales de sesiones.

Puedes crear índices en tablas temporales y vistas basadas en tablas temporales. Del mismo modo, los índices creados en tablas temporales también son temporales y solo son válidos para la sesión actual o la transacción.

Las tablas temporales pueden tener disparadores.

3Crear tabla temporal

La definición de la tabla temporal es visible para todas las sesiones SESSION, pero los datos de la tabla solo son válidos para la sesión actual o la transacción.

Método de creación:

1) ON COMMIT DELETE ROWS define el método de creación de tablas temporales de nivel de transacción.

CREATE GLOBAL TEMPORARY TABLE admin_work_area 
(startdate DATE, 
enddate DATE, 
class CHAR(20)) 
ON COMMIT DELETE ROWS; 

EJEMPLO:

SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area 
 (startdate DATE, 
enddate DATE, 
class CHAR(20)) 
ON COMMIT DELETE ROWS; 
SQL> create table permanente( a número); 
SQL> insert into admin_work_area values(sysdate,sysdate, ‘table temporal ‘); 
SQL> insert into permernate values(1); 
SQL> commit; 
SQL> select * from admin_work_area; 
SQL> select * from permernate; 
A 
1 

2)ON COMMIT PRESERVE ROWS define el método para crear tablas temporales de nivel de sesión.

CREATE GLOBAL TEMPORARY TABLE admin_work_area 
(startdate DATE, 
enddate DATE, 
class CHAR(20)) 
ON COMMIT PRESERVE ROWS; 
EJEMPLO:

Sesión1:

SQL> drop table admin_work_area; 
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area 
2 (startdate DATE, 
3 enddate DATE, 
4 class CHAR(20)) 
5 ON COMMIT PRESERVE ROWS; 
SQL> insert into permernate values(2); 
SQL> insert into admin_work_area values(sysdate,sysdate, ‘session temperary ‘); 
SQL> commit; 
SQL> select * from permernate;
A 
---------- 
1 
2
SQL> select * from admin_work_area;
STARTDATE ENDDATE CLASS 
---------- ---------- -------------------- 
17-1;63;63; -03 17-1;63;63; -03 session temperary

Sesión2:

SQL> select * from permernate;
A 
---------- 
1 
2
SQL> select * from admin_work_area;

No se seleccionaron filas.

Sesión2Invisible para la sesión1. Los datos de las tablas temporales

4 Diferencias entre tablas temporales ORACLE y SQLSERVER

Tablas temporales de SQL SERVER

También se puede crear tablas temporales. Las tablas temporales son similares a las tablas permanentes, pero se almacenan en tempdb y se eliminan automáticamente cuando ya no se utilizan.
Existen dos tipos de tablas temporales: local y global, que difieren en nombre, visibilidad y disponibilidad. Los nombres de las tablas temporales locales comienzan con un símbolo de número (#);
Sólo son visibles para la conexión de usuario actual; cuando el usuario se desconecta de Microsoft63; SQL Server63; 2000 Se elimina cuando se desconecta una instancia. Los nombres de las tablas temporales globales comienzan con símbolos matemáticos

(##) Comienza con un guión, es visible para cualquier usuario después de su creación y se elimina cuando todos los usuarios que lo引用 se desconectan de SQL Server.
Por ejemplo, si se crea una tabla llamada employees, cualquier persona que tenga permisos de seguridad para usar la tabla en la base de datos puede usarla, a menos que ya se haya eliminado.
Si se crea una tabla temporal local llamada #employees, solo usted puede realizar operaciones en la tabla y se eliminará cuando se desconecte. Si se crea una tabla temporal global llamada ##employees

Cualquier usuario en la tabla de datos puede realizar operaciones en la tabla. Si la tabla no es utilizada por otros usuarios después de su creación, se eliminará cuando se desconecte.

Después de que otros usuarios las utilicen, SQL Server las eliminará después de que todos los usuarios se desconecten.

Diferencias:

1. Las tablas temporales de SQL SERVER son una "tabla en memoria", la tabla se almacena en memoria. Las tablas temporales de ORACLE se conservarán en el diccionario de datos a menos que se ejecute DROP TABLE.

2. Las tablas temporales de SQL SERVER no tienen una función similar a la de nivel de transacción de las tablas temporales de ORACLE.

3 Las tablas temporales locales de SQL SERVER (#) son similares a las tablas temporales de nivel de sesión de ORACLE, pero ORACLE no elimina la tabla al finalizar la sesión.

4 Las tablas temporales globales de SQL SERVER (##) se refieren a una porción compartida de memoria entre múltiples conexiones. Cuando no hay referencias al área de memoria, SQL SERVER libera automáticamente las tablas temporales globales.

5 Dado que Oracle no es una base de datos en memoria, por lo que si Oracle realiza con frecuencia la creación y eliminación de tablas temporales como SQL SERVER, ciertamente afectará el rendimiento.
Por lo tanto, Oracle conservará la definición de la tabla temporal hasta que el usuario DROP TABLE.

6 En Oracle, si se necesita que varios usuarios compartan una tabla (al estilo de las tablas temporales globales de SQL SERVER ##), se puede utilizar una tabla permanente,

Y agregue algunas columnas que puedan identificar de manera única a los usuarios en la tabla. Utilice disparadores y vistas. Al salir el usuario, elimine los datos correspondientes de la tabla según la información única de inicio de sesión del usuario.

Este método le ha introducido una cierta cantidad de carga a Oracle.

Aquí está la recopilación de información sobre las tablas temporales de Oracle, continuaremos complementando la información relevante, gracias por el apoyo a nuestro sitio!

Te gustará