CREATE GLOBAL TEMPORARY TABLE sentencia

La sentencia CREATE GLOBAL TEMPORARY TABLE crea una descripción de una tabla temporal en el servidor actual.

Invocación para CREATE GLOBAL TEMPORARY TABLE

Esta sentencia puede incorporarse en un programa de aplicación o emitirse de forma interactiva. Se trata de una sentencia ejecutable que puede prepararse de forma dinámica.

Autorización para CREATE GLOBAL TEMPORARY TABLE

El conjunto de privilegios que se define a continuación debe incluir al menos uno de los siguientes:

  • El privilegio del sistema CREATETMTAB
  • El privilegio de base de datos CREATETAB para cualquier base de datos
  • Autoridad DBADM, DBCTRL o DBMAINT para cualquier base de datos
  • Autorización SYSADM o SYSCTRL
  • DBADM del sistema
  • Inicio del cambioAutoridad de instalación SYSOPR (cuando el SQLID actual del proceso está configurado como SYSINSTL)fin del cambio

Sin embargo, la autoridad DBADM, DBCTRL o DBMAINT no es suficiente si está creando una tabla temporal para otra persona y el calificador de tabla no es su ID de autorización.

Pueden ser necesarios privilegios adicionales cuando el tipo de datos de una columna es un tipo distinto o se especifica la cláusula LIKE. Consulte la descripción de tipo distinto y LIKE para obtener más detalles.

Conjunto de privilegios:

El conjunto de privilegios es el mismo que el conjunto de privilegios para la sentencia CREATE TABLE. Consulte la información sobre CREATE TABLE Authorization para obtener más detalles.

Sintaxis para CREATE GLOBAL TEMPORARY TABLE

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visual CREATE GLOBAL TEMPORARY TABLE nombre-tabla (,definición-columna)LIKEnombre-tablanombre-vistaCCSIDASCIIEBCDICUNICODE

definición de columna:

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visual nombre-columna tipo de datos NOT NULL

tipo de datos:

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visualtipo-incorporadonombre-tipo-diferenciado

tipo integrado:

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visualSMALLINTINTEGERINTBIGINTDECIMALDECNUMERIC(5,0)( entero, entero)FLOAT(53)( entero)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1)( entero)VARCHARCHARACTERCHARVARYING( entero)FORSBCSMIXEDBITDATACCSID 12081GRAPHIC(1)( entero)VARGRAPHIC( entero)CCSID 12001BINARY(1)( entero)BINARY VARYINGVARBINARY( entero)DATETIMETIMESTAMP(6)(entero)WITHOUT TIME ZONEWITH TIME ZONE
Notas:
  • 1 La cláusula CCSID solo debe especificarse para una cadena de caracteres o una columna de cadena gráfica en una tabla temporal global creada en EBCDIC.

descripción para CREATE GLOBAL TEMPORARY TABLE

nombre-tabla
Designa la tabla temporal. El nombre, incluido el calificador implícito o explícito, no debe identificar una tabla, vista, alias, sinónimo o tabla temporal que exista en el servidor de la base de datos, ni una tabla que exista en la tabla de catálogo de SYSIBM.SYSPENDINGOBJECTS.

Las reglas de calificación para una mesa temporal son las mismas que para otras mesas.

El propietario adquiere TODOS LOS PRIVILEGIOS en la mesa CON OPCIÓN DE CONCESIÓN y la autoridad para abandonar la mesa.

Para más información, consulte Directrices para los nombres de las tablas.

definición-columna
Define los atributos de una columna para cada instancia de la tabla. El número de columnas definidas no debe exceder las 750. El tamaño máximo de registro no debe exceder los 32714 bytes. El tamaño máximo de fila no debe exceder los 32706 bytes (8 bytes menos que el tamaño máximo de registro).
nombre-columna
Nombra la columna. El nombre no debe estar cualificado y no debe ser el mismo que el nombre de otra columna de la tabla.
tipo-datos
Especifica el tipo de datos de la columna. El tipo de datos puede ser un tipo de datos incorporado o un tipo distinto.
tipo integrado
El tipo de datos de la columna es un tipo de datos integrado.

Para obtener más información sobre los tipos de datos y las reglas que se aplican a ellos, consulte built-in-type.

tipo distinto
Cualquier tipo distinto, excepto uno que se base en un tipo de datos LOB o ROWID. El conjunto de privilegios debe incluir implícita o explícitamente el privilegio USAGE en el tipo distinto.
NO NULL
Especifica que la columna no puede contener valores nulos. La omisión de NOT NULL indica que la columna puede contener valores nulos.
ME GUSTA nombre-tabla o nombre-vista
Especifica que las columnas de la tabla que se identifica en la cláusula CREATE GLOBAL TEMPORARY TABLE table-name tienen exactamente el mismo nombre y descripción que las columnas que se identifican en la cláusula LIKE table-name o LIKE view-name. El nombre que se especifica después de LIKE debe identificar una tabla, vista o tabla temporal que exista en el servidor actual. El nombre que se especifica después de LIKE no debe ser una tabla de solo acelerador. Una vista no puede contener columnas de longitud 0.

El conjunto de privilegios debe incluir implícita o explícitamente el privilegio SELECT en la tabla o vista identificada.

Si la tabla que se identifica en la cláusula LIKE table-name no es una tabla temporal creada, o la vista que se identifica en la cláusula LIKE view-name no se basa en una tabla temporal creada:
  • Si alguna columna de la tabla o vista identificada en la cláusula LIKE table-name o LIKE view-name tiene un valor de atributo que no está permitido para una columna en una tabla temporal, ese valor de atributo se ignora cuando se crea la tabla temporal. La columna de la tabla temporal recién creada que se corresponde con la columna en LIKE nombre-tabla o LIKE nombre-vista tiene el valor predeterminado para ese atributo, a menos que se indique lo contrario.
  • Si alguna columna de la tabla o vista identificada en la cláusula LIKE table-name o LIKE view-name permite un valor predeterminado distinto de NULL, ese valor predeterminado se ignora cuando se crea la nueva tabla temporal. La columna de la tabla temporal recién creada que se corresponde con la columna de nombre-tabla o nombre-vista no tiene valor predeterminado porque no se permite un valor predeterminado distinto de nulo para ninguna columna de una tabla temporal creada.
  • Inicio del cambioSi alguna columna de la tabla o vista que se identifica en la cláusula LIKE table-name o LIKE view-name es una columna anulable con DEFAULT NULL, DEFAULT NULL se ignora cuando se crea la tabla temporal. La columna de la tabla temporal que corresponde a la columna de nombre-tabla o nombre-vista no tiene valor por defecto.fin del cambio
Esquema de codificación CCSID
Especifica el esquema de codificación para los datos de serie almacenados en la tabla.
ASCII
Especifica que los datos deben codificarse utilizando los CCSID ASCII del servidor.

Se produce un error si no se ha especificado un CCSID ASCII válido para la instalación.

EBCDIC
Especifica que los datos deben codificarse utilizando los CCSID EBCDIC del servidor.

Se produce un error si no se ha especificado un CCSID EBCDIC válido para la instalación.

UNICODE
Especifica que los datos deben codificarse utilizando los CCSID del servidor para Unicode.

Se produce un error si no se ha especificado un CCSID válido para Unicode para la instalación.

Por lo general, cada esquema de codificación requiere un solo CCSID. Se necesitan CCSID adicionales cuando se utilizan datos mixtos, gráficos o Unicode. Se produce un error si no se han definido los CCSID.

Inicio del cambioLa cláusula CCSID puede especificarse para la tabla temporal creada o para columnas individuales de la tabla temporal creada. Si se especifica una cláusula CCSID para la tabla, ese CCSID especifica el esquema de codificación para la tabla, independientemente de si también se especifica la cláusula LIKE. Si no se especifica una cláusula CCSID para la tabla, el esquema de codificación de la tabla es EBCDIC.fin del cambio

Inicio del cambioSi se especifica una cláusula CCSID para una columna, el esquema de codificación de la tabla temporal creada debe ser EBCDIC. Si no se especifica una cláusula CCSID para una columna y no se especifica la cláusula LIKE para la tabla, el CCSID de la columna es el mismo que el CCSID de la tabla. Si se especifica la cláusula LIKE y la tabla de origen que se especifica en la cláusula LIKE es una tabla EBCDIC con columnas Unicode, las columnas de la tabla temporal creada que corresponden a las columnas Unicode de la tabla de origen también son Unicode.fin del cambio

Notas para CREAR UNA TABLA TEMPORAL GLOBAL

Privilegios de propietario

El propietario de la tabla tiene todos los privilegios de la tabla (véase la sentencia GRANT (privilegios de tabla o vista) ) con la capacidad de conceder estos privilegios a otros. Para obtener más información sobre la propiedad del objeto, consulte Autorización, privilegios, permisos, máscaras y propiedad del objeto.

Instanciación y terminación
Sea T una tabla temporal definida en el servidor actual y sea P un proceso de aplicación:
  • Se crea una instancia vacía de T como resultado de la primera referencia implícita o explícita a T en una operación de cambio de datos OPEN, SELECT INTO o SQL que es ejecutada por cualquier programa en P.
  • Cualquier programa en P puede hacer referencia a T y cualquier referencia a T por un programa en P es una referencia a esa instancia de T.

    Cuando una operación de consignación finaliza una unidad de trabajo en P y ningún programa en P tiene un cursor CON RETENCIÓN abierto que dependa de T, la consignación incluye la operación BORRAR DE T.

  • Cuando una operación de reversión finaliza una unidad de trabajo en P, la reversión incluye la operación BORRAR DE T.
  • Cuando finaliza la conexión con el servidor de base de datos en el que se creó una instancia de T, la instancia de T se destruye. Sin embargo, la definición de T permanece. Se debe ejecutar una instrucción DROP TABLE para eliminar la definición de T.
Restricciones y ampliaciones
Sea T una tabla temporal:
  • Las columnas de T no pueden tener valores predeterminados distintos de nulos.
  • Una columna de T no puede tener un tipo de datos LOB o ROWID (o un tipo distinto basado en uno).
  • T no puede tener restricciones únicas, restricciones referenciales ni restricciones de verificación.
  • T no puede definirse como el padre en una restricción referencial.
  • No se puede hacer referencia a T en:
    • Una instrucción CREATE INDEX.
    • Una sentencia LOCK TABLE.
    • Como objeto de una instrucción UPDATE en la que el objeto es T o una vista de T. Sin embargo, puede hacer referencia a T en la cláusula WHERE de una sentencia UPDATE (incluida la operación de actualización de la sentencia MERGE).
    • Db2 comandos de utilidad.
  • Si se hace referencia a T en el fullselect de una sentencia CREATE VIEW, no se puede especificar una cláusula WITH CHECK OPTION en la sentencia CREATE VIEW.
  • ALTER TABLE T solo es válido si la sentencia se utiliza para añadir una columna a T. Cualquier columna que añada a T debe tener un valor predeterminado de nulo.

    Cuando se modifica T, cualquier paquete que haga referencia a la tabla queda invalidado, y Db2 vuelve a vincular automáticamente los paquetes la próxima vez que se ejecuten.

  • DELETE FROM T o una vista de T es válida solo si la sentencia no incluye una cláusula WHERE o WHERE CURRENT OF. Además, DELETE FROM view of T sólo es válido si la vista se creó (CREATE VIEW) sin la cláusula WHERE. Una instrucción DELETE FROM elimina todas las filas de la tabla o vista.
  • Puede hacer referencia a T en la cláusula FROM de cualquier subselección. Si hace referencia a T en la primera cláusula FROM de una sentencia select, no puede especificar una cláusula FOR UPDATE.
  • No puede utilizar una instrucción DROP DATABASE para eliminar implícitamente T. Para eliminar T, haga referencia a T en una instrucción DROP TABLE.
  • Otra sentencia SQL que utilice el mismo nombre en el mismo proceso de aplicación podrá acceder a una tabla temporal instanciada por una sentencia SQL que utilice un nombre de tabla de tres partes, siempre y cuando no se interrumpa la conexión e Db2 , que estableció la instanciación.
  • CONCEDER TODOS LOS PRIVILEGIOS EN T es válido, pero no puede conceder privilegios específicos en T.

    De TODOS los privilegios, solo los privilegios ALTER, INSERT, DELETE y SELECT se pueden usar en realidad en T.

  • REVOCAR TODOS LOS PRIVILEGIOS EN T es válido, pero no puede revocar privilegios específicos de T.
  • Una operación COMMIT elimina todas las filas de cada tabla temporal del proceso de aplicación, pero las filas de T no se eliminan si algún programa del proceso de aplicación tiene un cursor WITH HOLD abierto que depende de T. Además, si RELEASE(COMMIT) está en efecto y ningún cursor abierto CON RETENCIÓN depende de T, también se eliminan todos los archivos de trabajo lógicos para T.
  • Una operación ROLLBACK elimina todas las filas y todos los archivos de trabajo lógicos de cada tabla temporal del proceso de aplicación.
  • Puede reutilizar los hilos cuando utilice una tabla temporal, y un archivo de trabajo lógico para un nombre de tabla temporal permanece disponible hasta la desasignación. No se asigna un nuevo archivo de trabajo lógico para ese nombre de tabla temporal cuando se reutiliza el hilo.
  • Puede consultar T en las siguientes declaraciones:
    Sentencia Sentencia Sentencia
    • ALTER FUNCTION
    • ALTER PROCEDURE
    • COMENTAR
    • CREATE ALIAS
    • CREATE FUNCTION
    • CREATE PROCEDURE
    • CREATE SYNONYM
    • Crear tabla como
    • CREATE VIEW
    • DESCRIBE TABLE
    • DECLARE TABLE
    • DELETE (si no incluye una cláusula WHERE)
    • DROP TABLE
    • INSERT
    • ETIQUETA
    • SELECT INTO

Sintaxis alternativa y sinónimos : para compatibilidad con versiones anteriores de Db2, puede especificar LONG VARCHAR como sinónimo de VARCHAR(entero) y LONG VARGRAPHIC como sinónimo de VARGRAPHIC(entero) al definir el tipo de datos de una columna. Sin embargo, no se recomienda el uso de estos sinónimos porque, una vez procesada la sentencia, Db2 considera que una columna LONG VARCHAR es VARCHAR y una columna LONG VARGRAPHIC es VARGRAPHIC.

Ejemplos para CREATE GLOBAL TEMPORARY TABLE

Ejemplo 1 : Crear una tabla temporal, CURRENTMAP. Asignar un nombre a dos columnas, CODE y MEANING, ninguna de las cuales puede contener nulos. CODE contiene datos numéricos y MEANING tiene datos de caracteres. Asumiendo un valor de NO para el campo MIXED DATA en el panel de instalación DSNTIPF, la columna MEANING tiene un subtipo de SBCS:
CREATE GLOBAL TEMPORARY TABLE CURRENTMAP
     (CODE INTEGER NOT NULL, MEANING VARCHAR(254) NOT NULL);
Ejemplo 2 : Crear una tabla temporal, EMP:
CREATE GLOBAL TEMPORARY TABLE EMP
     (TMPDEPTNO   CHAR(3)     NOT NULL,
      TMPDEPTNAME VARCHAR(36) NOT NULL,
      TMPMGRNO    CHAR(6)             ,
      TMPLOCATION CHAR(16)            );