Sentencia CREATE TABLE

La sentencia CREATE TABLE define una tabla. Esta definición debe incluir el nombre de la tabla y los nombres y atributos de sus columnas. La definición puede incluir otros atributos de la tabla, como su clave primaria o restricciones de comprobación.

Para crear una tabla temporal creada, utilice la sentencia CREATE GLOBAL TEMPORARY TABLE. Para declarar una tabla temporal declarada, utilice la sentencia DECLARE GLOBAL TEMPORARY TABLE.

Invocación

Esta sentencia se puede incorporar en un programa de aplicación o bien emitirse utilizando sentencias de SQL dinámico. Es una sentencia ejecutable que puede prepararse de forma dinámica sólo si el comportamiento de ejecución de DYNAMICRULES está en vigor para el paquete (SQLSTATE 42509).

Autorización

El ID de autorización de la sentencia debe tener la autorización DBADM o debe tener la autorización CREATETAB junto con la autorización adicional siguiente:
  • Uno de estos privilegios o autorizaciones:
    • Privilegio USE en el espacio de tablas
    • Autorización SYSADM
    • Autorización SYSCTRL
  • Más uno de estos privilegios o autorizaciones:
    • Autorización IMPLICIT_SCHEMA en la base de datos, si el nombre de esquema implícito o explícito de la tabla no existe.
    • Privilegio CREATEIN para el esquema, si el nombre de esquema de la tabla hace referencia a un esquema existente.
    • Autorización SCHEMAADM en el esquema, si el nombre de esquema de la tabla hace referencia a un esquema existente
Si se está definiendo una subtabla, al menos se debe cumplir una de las condiciones siguientes:
  • El ID de autorización debe ser el mismo que el propietario de la tabla raíz de la jerarquía de tablas.
  • Los privilegios que tiene el ID de autorización deben incluir la autorización SCHEMAADM en el esquema que contiene la tabla raíz de la jerarquía de tabla.
  • Los privilegios que tiene el ID de autorización deben incluir la autorización DBADM.
Para definir una clave foránea, el ID de autorización de la sentencia debe tener uno de los privilegios siguientes para la tabla padre:
  • Privilegio REFERENCES para la tabla
  • Privilegio REFERENCES para todas las columnas de la clave padre especificada
  • Privilegio CONTROL sobre la tabla
  • Autorización SCHEMAADM en el esquema, si el nombre de esquema de la tabla padre hace referencia a un esquema existente
  • Autorización DBADM
Para definir una tabla de consulta materializada, se deben cumplir las condiciones siguientes:
  • El ID de autorización de la sentencia debe tener, como mínimo, uno de los siguientes privilegios para cada tabla o vista identificada en la selección completa (excluyendo los privilegios de grupos):
    • Privilegio SELECT para la tabla o vista
    • Privilegio CONTROL sobre la tabla o vista
    • Privilegio SELECTIN para el esquema que contiene la tabla o vista
    • Autorización DATAACCESS para el esquema que contiene la tabla o vista
    • Autorización DATAACCESS
  • El ID de autorización de la sentencia debe tener, como mínimo, uno de los siguientes privilegios para cada tabla identificada en la selección completa (esto es necesario para alterar la tabla base para asociarla con la tabla de consulta materializada):
    • Privilegio ALTER para la tabla o vista
    • Privilegio CONTROL sobre la tabla o vista
    • Autorización SCHEMAADM en el esquema que contiene la tabla o vista
    • Autorización DBADM
Para definir una tabla de etapas que se asociada a una tabla de consulta materializada, el ID de autorización debe tener los privilegios siguientes:
  • Al menos uno de los privilegios siguientes para las tablas de consulta materializada:
    • Privilegio ALTER para la tabla de consulta materializada
    • Privilegio CONTROL para la tabla de consulta materializada
    • Autorización SCHEMAADM en el esquema que contiene la tabla de consulta materializada
    • Autorización DBADM
  • Al menos uno de los privilegios siguientes para cada tabla o vista que se identifique en la selección completa de la tabla de consulta materializada:
    • Privilegio SELECT para la tabla o vista
    • Privilegio CONTROL sobre la tabla o vista
    • Privilegio SELECTIN para el esquema que contiene la tabla o vista
    • Autorización DATAACCESS para el esquema que contiene la tabla o vista
    • Autorización DATAACCESS para la base de datos
    Asimismo, al menos uno de los privilegios siguientes en cada tabla o vista que se identifique en la selección completa de la tabla de consulta materializada:
    • Privilegio ALTER para la tabla o vista
    • Privilegio CONTROL sobre la tabla o vista
    • Autorización SCHEMAADM en el esquema que contiene la tabla o vista
    • Autorización DBADM

Sintaxis

Leer el esquema de sintaxisOmitir el esquema de sintaxis visual CREATE TABLE IF NOT EXISTS nombre-tabla Lista-elementosOF nombre-tipo1opciones-tabla-con-tipoLIKEnombre-tabla1nombre-vistaapodoopciones-copiatabla-resultados-asopciones-copiadefinición-consulta-materializadadefinición-tabla-etapas ? ORGANIZE BYROWCOLUMNROW USING1cláusula-dimensionesKEY SEQUENCEespec-clave-secuenciaINSERT TIME ? DATA CAPTURE NONECHANGES ? cláusulas-espacio-tablas ? cláusula-distribución ? cláusula-particionamiento ? COMPRESS YESADAPTIVECOMPRESS YES STATICCOMPRESS NO ? VALUE COMPRESSION ? WITH RESTRICT ON DROP ? NOT LOGGED INITIALLY ? CCSIDASCIIUNICODE ? SECURITY POLICYnombre política ? OPTIONS(,nombre-opción-tablaconstante-serie)
Element-list
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual ( ,definición-columnadefinición-periodorestricción-unicidadrestricción-referencialrestricción-comprobación )
Column-definition
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual nombre-columna tipo-datos2opciones-columna
Tipo-datos
Leer el esquema de sintaxisOmitir el esquema de sintaxis visualBuilt-in-typenombre-tipo-diferenciado3nombre-tipo-estructuradoREF( nombre2-tipo)
Built-in-type
Leer el esquema de sintaxisOmitir el esquema de sintaxis visualSMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)( entero-precisión,0, entero-escala)FLOAT(53)( entero)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1)( enteroOCTETSCODEUNITS32)VARCHARCHARACTERCHARVARYING( enteroOCTETSCODEUNITS32)FOR BIT DATA4CLOBCHARACTERCHARLARGE OBJECT(1M)( enteroKMGOCTETSCODEUNITS32)GRAPHIC(1)( enteroCODEUNITS16CODEUNITS32)VARGRAPHIC( enteroCODEUNITS16CODEUNITS32)DBCLOB(1M)( enteroKMGCODEUNITS16CODEUNITS32)NCHARNATIONALCHARCHARACTER(1)( entero)NVARCHARNCHAR VARYINGNATIONALCHARCHARACTERVARYING( entero)NCLOBNCHAR LARGE OBJECTNATIONAL CHARACTER LARGE OBJECT(1M)( enteroKMG)BINARY(1)( entero)VARBINARYBINARY VARYING(entero)BLOBBINARY LARGE OBJECT(1M)( enteroKMG)DATETIMETIMESTAMP(6)(entero)XMLBOOLEANSYSPROC.DB2SECURITYLABEL56
Opciones-columna
Leer el esquema de sintaxisOmitir el esquema de sintaxis visualNOT NULLLob-options7SCOPEnombre-tabla-con-tiponombre-vista-con-tipo8CONSTRAINTnombre-restricciónPRIMARY KEYUNIQUEReferences-clauseCHECK(condición-comprobación)atributos-restricción9Default-clausegenerated-clauseINLINE LENGTHentero10COMPRESS SYSTEM DEFAULTCOLUMNSECURED WITHnombre-etiqueta-seguridadNOT HIDDENIMPLICITLY HIDDEN
Lob-options
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual ? LOGGEDNOT LOGGED ? NOT COMPACTCOMPACT ?
References-clause
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual REFERENCES nombre-tablanombre-apodo (,nombre-columna)cláusula-reglaatributos-restricción
Rule-clause
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual ? ON DELETE NO ACTIONON DELETERESTRICTCASCADESET NULL ? ON UPDATE NO ACTIONON UPDATE RESTRICT ?
Constraint-attributes
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual ? NOT ENFORCEDTRUSTEDNOT TRUSTEDENFORCED ? ENABLE QUERY OPTIMIZATIONDISABLE QUERY OPTIMIZATION ?
Cláusula-predeterminada
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual WITH DEFAULT Default-values
Default-values
Leer el esquema de sintaxisOmitir el esquema de sintaxis visualconstanteregistro-especial-fecha-horaregistro-especial-usuarioCURRENT SCHEMACURRENT MEMBERNULLfunción-conversión(constanteregistro-especial-hora-fecharegistro-especial-usuarioCURRENT SCHEMA)EMPTY_CLOB()EMPTY_DBCLOB()EMPTY_NCLOB()EMPTY_BLOB()
Generated-clause
Leer el esquema de sintaxisOmitir el esquema de sintaxis visualGENERATEDALWAYSBY DEFAULTIdentity-optionsas-row-change-timestamp-clauseGENERATEDALWAYSas-generated-expression-clauseas-row-transaction-timestamp-clauseas-row-transaction-start-id-clause
Identity-options
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual AS IDENTITY (11START WITH1constante-numéricaINCREMENT BY1constante-numéricaNO MINVALUEMINVALUEconstante-numéricaNO MAXVALUEMAXVALUEconstante-numéricaNO CYCLECYCLECACHE 20NO CACHECACHEconstante-enteroNO ORDERORDER)
As-row-change-timestamp-clause
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual12 FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
As-generated-expression-clause
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual AS ( expresión-generación )
As-row-transaction-timestamp-clause
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual13 AS ROW BEGINEND
As-row-transaction-start-id-clause
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual14 AS TRANSACTION START ID
Period-definition
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual PERIOD SYSTEM_TIMEBUSINESS_TIME ( nombre-columna-inicio , nombre-columna-final )
Referential-constraint
Leer el esquema de sintaxisOmitir el esquema de sintaxis visualCONSTRAINTnombre-restricción FOREIGN KEY ( ,nombre-columna ) cláusula-referencias
Check-constraint
Leer el esquema de sintaxisOmitir el esquema de sintaxis visualCONSTRAINTnombre-restricción CHECK ( Check-condition ) atributos-restricción
Check-condition
Leer el esquema de sintaxisOmitir el esquema de sintaxis visualcondición-búsquedaFunctional-dependency
Functional-dependency
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual nombre-columna (,nombre-columna) DETERMINED BY nombre-columna (,nombre-columna)
Typed-table-options
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual HIERARCHYnombre-jerarquíaUnder-clause typed-element-list
Under-clause
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual UNDER nombre-supertabla INHERIT SELECT PRIVILEGES
Typed-element-list
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual ( ,OID-column-definitionwith-optionsunique-constraintcheck-constraint )
definición-columna-OID
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual REF IS nombre-columna-OID USER GENERATED
With-options
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual nombre-columna WITH OPTIONS opciones-columna
As-result-table
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual(,nombre-columna) AS ( selección_completa ) WITH NO DATAWITH DATA
Materialized-query-definition
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual(,nombre-columna) AS ( selección_completa ) refreshable-table-options
Copy-options
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual ? INCLUDINGEXCLUDINGCOLUMNDEFAULTS ? EXCLUDING IDENTITYCOLUMN ATTRIBUTESINCLUDING IDENTITYCOLUMN ATTRIBUTES ?
Refreshable-table-options
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual DATA INITIALLY DEFERRED REFRESH DEFERREDIMMEDIATE ? ENABLE QUERY OPTIMIZATIONDISABLE QUERY OPTIMIZATION ? MAINTAINED BY SYSTEMMAINTAINED BYUSERREPLICATIONFEDERATED_TOOL ?
Staging-table-definition
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual(,nombre-columna-etapas) FOR nombre-tabla2 PROPAGATE IMMEDIATE
Dimensions-clause
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual DIMENSIONS (, nombre-columna (,nombre-columna))
Sequence-key-spec
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual ( ,nombre-columnaSTARTINGFROMconstanteENDINGATconstante ) ALLOW OVERFLOWDISALLOW OVERFLOWPCTFREEentero
Tablespace-clauses
Leer el esquema de sintaxisOmitir el esquema de sintaxis visualIN,nombre-espacio-tablasCYCLENO CYCLE ? INDEX INnombre-espacio-tablas15LONG IN,nombre-espacio-tablas
Distribution-clause
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual DISTRIBUTE BY HASH(,nombre-columna)REPLICATIONRANDOM
Partitioning-clause
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual PARTITION BY RANGE Range-partition-spec
Range-partition-spec
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual ( ,partition-expression ) ( ,partition-element )
Partition-expression
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual nombre-columna NULLS LASTNULLS FIRST
Partition-element
Leer el esquema de sintaxisOmitir el esquema de sintaxis visualPARTITIONnombre-particiónBoundary-specpartition-tablespace-optionsespec-límiteEVERY(constanteduration-label16)constanteduration-label16
Boundary-spec
Leer el esquema de sintaxisOmitir el esquema de sintaxis visualStarting-clause17Ending-clause
Starting-clause
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual STARTING FROM (,constantMINVALUEMAXVALUE)constanteMINVALUEMAXVALUEINCLUSIVEEXCLUSIVE
Ending-clause
Leer el esquema de sintaxisOmitir el esquema de sintaxis visual ENDING AT (,constantMINVALUEMAXVALUE)constanteMINVALUEMAXVALUEINCLUSIVEEXCLUSIVE
Partition-tablespace-options
Leer el esquema de sintaxisOmitir el esquema de sintaxis visualINnombre-espacio-tablasINDEX INnombre-espacio-tablasLONG INnombre-espacio-tablas
Duration-label
Leer el esquema de sintaxisOmitir el esquema de sintaxis visualYEARYEARSMONTHMONTHSDAYDAYSHOURHOURSMINUTEMINUTESSECONDSECONDSMICROSECONDMICROSECONDS
Notas:
  • 1 Si especifica una cláusula de dimensiones, secuencia de clave o la hora de inserción, especificar ROW USING es opcional, a menos que la organización de tablas predeterminada para la base de datos sea COLUMN, en cuyo caso es obligatorio especificar ROW USING.
  • 2 Si la primera opción-columna elegida es una cláusula-generada una expresión-generación, el tipo-datos puede omitirse. Éste se determinará a partir del tipo de datos resultante de la expresión-generación.
  • 3 El tipo diferenciado especificado no puede tener ninguna restricción de tipo de datos y el tipo fuente no puede ser un tipo de datos anclados.
  • 4 La cláusula FOR BIT DATA se puede especificar en cualquier orden con las restricciones de columna siguientes. La cláusula FOR BIT DATA no se puede especificar con unidades de serie CODEUNITS32 (SQLSTATE 42613).
  • 5 DB2SECURITYLABEL es el tipo diferenciado incorporado que debe utilizarse para definir la columna de etiqueta de seguridad de fila de una tabla protegida.
  • 6 Una columna de tipo DB2SECURITYLABEL, NOT NULL WITH DEFAULT está implícita y no se puede especificar explícitamente (SQLSTATE 42842). El valor por omisión de una columna de tipo DB2SECURITYLABEL es la etiqueta de seguridad del ID de autorización de sesión correspondiente al acceso de grabación.
  • 7 La cláusula lob-options solo se aplica a tipos de objetos grandes (BLOB, CLOB y DBCLOB) y a tipos diferenciados basados en tipos de objetos grandes.
  • 8 La cláusula SCOPE sólo se aplica al tipo REF.
  • 9 La cláusula por omisión y la cláusula generada no se pueden especificar para la misma definición de columna (SQLSTATE 42614).
  • 10 INLINE LENGTH sólo se aplica a columnas definidas como tipos estructurados , XML o LOB.
  • 11 Una misma cláusula no se debe especificar más de una vez.
  • 12 El tipo de datos es opcional para una columna de indicación de fecha y hora de cambio de fila si la primera opción-columna especificada es una cláusula-generada. El valor por omisión de tipo de datos es TIMESTAMP(6).
  • 13 El tipo de datos es opcional para columnas de indicación de fecha y hora de inicio de fila y de fin de fila si la primera opción-columna especificada es una cláusula-generada. El valor por omisión de tipo de datos es TIMESTAMP(12).
  • 14 El tipo de datos es opcional para una columna de indicación de fecha y hora de ID de inicio de transacción si la primera opción-columna especificada es una cláusula-generada. El valor por omisión de tipo de datos es TIMESTAMP(12).
  • 15 Se puede especificar qué espacio de tablas contendrá los índices de una tabla al crearse la tabla. Si la tabla es una tabla particionada, el espacio de tablas de índice para un índice no particionado se puede especificar en la cláusula IN de la sentencia CREATE INDEX.
  • 16 Esta sintaxis para un elemento de partición es válida si solo existe una expresión de partición con un tipo de datos numérico o de fecha y hora.
  • 17 El primer elemento-partición debe contener una cláusula-inicial y el último elemento-partición debe incluir una cláusula-final.

Descripción

Las tablas de consulta materializada mantenidas por el sistema, mantenidas por el usuario, mantenidas por herramienta federada y mantenidas por duplicación (tablas duplicadas) se conocen por el término común tabla de consulta materializada, a menos que sea necesario identificar cada una por separado.

IF NOT EXISTS
Especifica que no se muestra ningún mensaje de error cuando la tabla no se puede crear porque ya existe una tabla con el nombre especificado en la base de datos y el esquema actuales. Normalmente, utilice esta opción para las aplicaciones con script que ejecutan mandatos SQL. Al suprimir el mensaje de error Tabla no encontrada, la aplicación con script no se ve afectada ni se detiene.
Las condiciones siguientes se aplican cuando se utiliza esta opción:
  • No puede utilizar la opción IF NOT EXISTS con la cláusula AS SELECT. La utilización de la opción IF NOT EXISTS con la cláusula AS SELECT provoca un error de sintaxis.
  • A menos que otros errores impidan la creación de la tabla, se devuelve un mensaje CREATE aunque no se haya creado ninguna tabla. La razón es que la anomalía se ignora si ya existe una tabla con el nombre especificado.
  • La tabla existente y la tabla especificada en el mandato no se comparan, es decir, las tablas podrían tener tamaños distintos. La tabla existente permanece tal cual con su tamaño actual. El contenido de las filas no se modifica. La aplicación debe garantizar que la tabla de destino y las filas son las previstas.
nombre-tabla
Indica el nombre de la tabla. El nombre, incluido el calificador implícito o explícito, no debe identificar una tabla, vista, apodo ni alias descrito en el catálogo. El nombre de esquema no debe ser SYSIBM, SYSCAT, SYSFUN ni SYSSTAT (SQLSTATE 42939).
lista-elementos
Define los elementos de una tabla, incluyendo las definiciones de columnas y restricciones en la tabla.
definición-columna
Define los atributos de una columna.
nombre-columna
Es el nombre de una columna de la tabla. El nombre no puede estar calificado y no puede utilizarse el mismo nombre para más de una columna de la tabla (SQLSTATE 42711).

Una tabla de organización en filas puede tener lo siguiente:

  • Páginas de un tamaño de 4K con un máximo de 500 columnas, donde el tamaño de las filas no puede ser superior a 4005.
  • Páginas de un tamaño de 8K con un máximo de 1012 columnas, donde el tamaño de las filas no puede ser superior a 8101.
  • Páginas de un tamaño de 16K con un máximo de 1012 columnas, donde el tamaño de las filas no puede ser superior a 16.293.
  • Páginas de un tamaño de 32K con un máximo de 1012 columnas, donde el tamaño de las filas no puede ser superior a 32.677.

Una tabla organizado en columnas puede tener un máximo de 1012 columnas, sin importar el tamaño de la página, en donde los conteos de bytes de las columnas no pueden ser mayores de 32.677. El soporte de tamaño de fila extendido no aplica a las tablas organizado en columnas.

Si desea más información, consulte Límite de tamaño de fila.

tipo-datos
Especifica el tipo de datos de la columna.
tipo-incorporado
Uno de los siguientes tipos de datos incorporados:
SMALLINT
Entero pequeño.
[INTEGER | INT]
Entero grande.
BIGINT
Entero muy grande.
[DECIMAL | DEC | NUMERIC | NUM](entero-precisión, entero-escala)
Un número decimal.
  • El entero de precisión especifica el número total de dígitos. Debe estar en el rango de 1 - 31. El valor predeterminado es 5.
  • El entero de escala especifica el número de dígitos a la derecha de la coma decimal. No puede ser negativo y no puede superar la precisión. El valor por omisión es 0.
FLOAT(entero)
Número de coma flotante individual o de doble precisión. Si la longitud especificada está en el rango:
  • 1 - 24, el número utiliza una precisión simple.
  • 25 - 53, el número utiliza la precisión doble.
En lugar de FLOAT, puede especificar:
REAL
Para especificar un valor de coma flotante de precisión simple.
DOUBLE
Para especificar coma flotante de precisión doble.
DOUBLE PRECISION
Para especificar coma flotante de precisión doble.
FLOAT
Para especificar coma flotante de precisión doble.
DECFLOAT(entero-precisión)
Número decimal de coma flotante. El entero de precisión especifica el número total de dígitos, puede ser 16 o 34. El valor por omisión es 34.
[CHARACTER | CHAR](entero [OCTETS | CODEUNITS32])
Serie de caracteres de longitud fija del número de unidades de código especificado. Este número puede estar en el rango de 1 - 255 OCTETS o de 1 - 63 CODEUNITS32. El valor por omisión es 1.
[VARCHAR | CHARACTER VARYING | CHAR VARYING](entero [OCTETS | CODEUNITS32])
Serie de caracteres de longitud variable del número de unidades de código especificado. Este número puede estar en el rango de 1 - 32672 OCTETS o de 1 - 8168 CODEUNITS32.
FOR BIT DATA
Especifica que el contenido de la columna se tratará como datos de bit (binarios). Durante el intercambio de datos con otros sistemas, no se efectúan conversiones de página de códigos. Las comparaciones se efectúan en binario, sin tener en cuenta el orden de clasificación de la base de datos.
[CLOB | CHARACTER LARGE OBJECT | CHAR LARGE OBJECT](entero [K | M | G] [OCTETS | CODEUNITS32])
Serie de objetos grandes de caracteres con una longitud máxima del número de unidades de código especificado. El valor predeterminado es 1.048.576 (1M) unidades de código.
Si desea multiplicar el entero de la longitud por 1024 (kilo), 1.048.576 (mega), o 1.073.741.824 (giga), especifique un multiplicador K (kilo), M (mega) o G (giga).
  • Independientemente del multiplicador que utilice, si lo utiliza, la longitud resultante está limitada a la longitud máxima de una columna CLOB, que es 2.147.483.646 (para OCTETS) o 536.870.911 (para CODEUNITS32). Si un múltiplo de K, M o G supera ligeramente esta longitud máxima, por ejemplo 2G = 2.147.483.648, en su lugar se utiliza la longitud máxima.
  • Se permite cualquier número de espacios (incluyendo los espacios de cero) entre el tipo de datos y la especificación de longitud o entre el entero de la longitud y el multiplicador K, M o G. Por ejemplo, las especificaciones siguientes son todas equivalentes y válidas:
    CLOB(50K)
    CLOB(50 K)
    CLOB (50   K)
  • El multiplicador K, M o G se puede especificar en mayúsculas o minúsculas.

Las unidades de serie predeterminadas son OCTETS.

OCTETS
Especifica que las unidades del atributo de longitud son bytes.
CODEUNITS32
Especifica que las unidades del atributo de longitud son unidades de código Unicode UTF-32 que aproximan el recuento en caracteres. Esto no afecta la página de códigos subyacente del tipo de datos. La longitud real del valor de datos se determina mediante el conteo de las unidades de código UTF-32 como si los datos se hubieran convertido a UTF-32.
GRAPHIC(entero [CODEUNITS16 | CODEUNITS32])
Serie gráfica de longitud fija de la longitud especificada, cuyo rango puede ser de 1 - 127 bytes dobles, 1 - 127 CODEUNITS16, or 1 - 63 CODEUNITS32. La longitud predeterminada es 1.
VARGRAPHIC(entero [CODEUNITS16 | CODEUNITS32])
Serie gráfica de longitud variable de la longitud máxima especificada, cuyo rango puede ser de 1 - 16336 bytes dobles, 1 - 16336 CODEUNITS16 o 1 - 8168 CODEUNITS32.
DBCLOB(entero [K | M | G] [CODEUNITS16 | CODEUNITS32])
Serie de gran objeto de caracteres de la longitud máxima especificada en bytes dobles, unidades de código Unicode UTF-16 o unidades de código Unicode UTF-32. El valor predeterminado es 1.048.576 (1M) unidades de código.
Si desea multiplicar el entero de la longitud por 1024 (kilo), 1.048.576 (mega), o 1.073.741.824 (giga), especifique un multiplicador K (kilo), M (mega) o G (giga).
  • Independientemente del mutiplicador que utilice, si lo utiliza, la longitud resultante está limitada a la longitud máxima de una columna DBCLOB, que es 1.073.741.823 (para doble bytes o CODEUNITS16) o 536.870.911 (para CODEUNITS32). Si un múltiplo de K, M o G supera ligeramente esta longitud máxima, por ejemplo 1G = 1.073.741.824, en su lugar se utiliza la longitud máxima.
  • Se permite cualquier número de espacios (incluyendo los espacios de cero) entre el tipo de datos y la especificación de longitud o entre el entero de la longitud y el multiplicador K, M o G. Por ejemplo, las especificaciones siguientes son todas equivalentes y válidas:
    DBCLOB(50K)
    DBCLOB(50 K)
    DBCLOB (50   K)
  • El multiplicador K, M o G se puede especificar en mayúsculas o minúsculas.

Las unidades de serie predeterminadas son CODEUNITS16.

CODEUNITS16
Especifica que las unidades del atributo de longitud son unidades de código Unicode UTF-16, que es lo mismo que contar en doble bytes.
CODEUNITS32
Especifica que las unidades del atributo de longitud son unidades de código Unicode UTF-32. Esto no afecta la página de códigos subyacente del tipo de datos. La longitud real de un valor de datos se determina contando las unidades de código UTF-32 como si los datos se hubieran convertido a UTF-32.
[NATIONAL CHARACTER | NATIONAL CHAR | NCHAR](entero)
Serie de longitud fija de la longitud especificada. La longitud predeterminada es 1.

El tipo NATIONAL CHARACTER se correlaciona con una serie de caracteres de longitud fija con unidades de serie CODEUNITS32.

[NATIONAL CHARACTER VARYING | NATIONAL CHAR VARYING | NCHAR VARYING | NVARCHAR](entero)
Serie de longitud variable de la longitud máxima especificada.

El tipo NATIONAL CHARACTER VARYING se correlaciona con una serie de caracteres de longitud variante con unidades de serie CODEUNITS32.

[NATIONAL CHARACTER LARGE OBJECT | NCHAR LARGE OBJECT | NCLOB](entero [K | M | G])
Serie de objeto grande de la longitud máxima especificada.

Este tipo de datos correlaciona un objeto grande de carácter (CLOB) con unidades de serie CODEUNITS32. Consulte la descripción del parámetro CLOB si desea información sobre los valores posibles para el entero de longitud y cómo utilizar un multiplicador K (kilo), M (mega) o G (giga).

BINARY(entero)
Serie binaria de longitud fija cuya longitud es la especificada y debe estar en el rango de 1 - 255 bytes. La longitud predeterminada es 1.
[VARBINARY | BINARY VARYING](entero)
Serie binaria de longitud variable cuya longitud es la especificada y debe estar en el rango de 1 - 32672 bytes.
[BLOB | BINARY LARGE OBJECT](entero [K | M | G])
Serie de objeto grande binario de la longitud máxima especificada. El valor predeterminado es 1.048.576 (1M) bytes.
Si desea multiplicar el entero de la longitud por 1024 (kilo), 1.048.576 (mega), o 1.073.741.824 (giga), especifique un multiplicador K (kilo), M (mega) o G (giga).
  • Independientemente del multiplicador que utilice, si lo utiliza, la longitud resultante está limitada a la longitud máxima de una columna BLOB, que es 2.147.483.647 bytes. Si un múltiplo de K, M o G supera ligeramente esta longitud máxima, por ejemplo 2G = 2.147.483.648, en su lugar se utiliza la longitud máxima.
  • Se permite cualquier número de espacios (incluyendo los espacios de cero) entre el tipo de datos y la especificación de longitud o entre el entero de la longitud y el multiplicador K, M o G. Por ejemplo, las especificaciones siguientes son todas equivalentes y válidas:
    BLOB(50K)    BLOB(50 K)    BLOB (50   K)
  • El multiplicador K, M o G se puede especificar en mayúsculas o minúsculas.
DATE
Fecha.
TIME
Hora.
TIMESTAMP(entero) o TIMESTAMP
Indicación de fecha y hora. El entero especifica la precisión de fracción de segundos de 0 (segundos) a 12 (picosegundos). El valor predeterminado es 6 (microsegundos).
XML
Documento XML. Solo se pueden insertar documentos XML con el formato correcto en una columna XML.
Una columna XML tiene las restricciones siguientes:
  • La columna no puede formar parte de ningún índice excepto un índice sobre datos XML. Por lo tanto, no puede incluirse como columna de una clave primaria ni de una restricción de unicidad (SQLSTATE 42962).
  • La columna no puede ser una clave foránea de una restricción de referencia (SQLSTATE 42962).
  • No se puede especificar un valor por omisión (WITH DEFAULT) para la columna (SQLSTATE 42613). Si la columna puede contener nulos, el valor por omisión de la columna es el valor nulo.
  • La columna no se puede utilizar como clave de distribución (SQLSTATE 42997).
  • La columna no se puede utilizar como clave de particionamiento de datos (SQLSTATE 42962).
  • La columna no se puede utilizar para organizar una tabla de clúster multidimensional (MDC)(SQLSTATE 42962).
  • No se puede emplear la columna en una tabla agrupada por clústeres de rangos (SQLSTATE 429BG).
  • No se puede hacer referencia a la columna en una restricción de comprobación excepto en un predicado VALIDATED (SQLSTATE 42621).

Cuando se crea una columna de tipo XML, se crea un índice de vías de acceso XML en esa columna. También se crea un índice de regiones XML en el nivel de tabla cuando se crea la primera columna de tipo XML. El nombre de estos índices es SQL seguido de una indicación de fecha y hora de caracteres (aammddhhmmssxxx). El nombre de esquema es SYSIBM.

BOOLEAN
Valor booleano.
SYSPROC.DB2SECURITYLABEL
Tipo diferenciado incorporado que debe utilizarse para definir la columna de etiqueta de seguridad de fila de una tabla protegida. El tipo de datos subyacente de una columna del tipo diferenciado incorporado DB2SECURITYLABEL es VARCHAR(128) FOR BIT DATA. Una tabla puede tener como máximo una columna de tipo DB2SECURITYLABEL (SQLSTATE 428C1).
nombre-tipo-diferenciado
Para un tipo definido por el usuario que es un tipo diferenciado. Si se especifica un nombre de tipo diferenciado sin un nombre de esquema, el nombre del tipo diferenciado se resuelve efectuando una búsqueda en los esquemas de la vía de acceso de SQL (definida por la opción de preproceso FUNCPATH en el caso del SQL estático y por el registro CURRENT PATH en el caso de SQL dinámico).

Si se define una columna con un tipo diferenciado, el tipo de datos de la columna es el tipo diferenciado. La longitud y la escala de la columna son la longitud y la escala del tipo de fuente del tipo diferenciado. El tipo diferenciado especificado no puede tener ninguna restricción de tipo de datos y el tipo fuente no puede ser un tipo de datos anclados (SQLSTATE 428H2).

Si una columna definida con un tipo diferenciado es la clave externa de una restricción de referencia, el tipo de datos de la columna correspondiente de la clave primaria debe tener el mismo tipo diferenciado.

nombre-tipo-estructurado
Para especificar un tipo definido por el usuario que es un tipo estructurado. Si se especifica un nombre de tipo estructurado sin un nombre de esquema, el nombre de tipo estructurado se resuelve buscando en los esquemas especificados en la vía de acceso de SQL (definida por la opción de preproceso FUNCPATH en el SQL estático y por el registro CURRENT PATH en el SQL dinámico).

Si se define una columna utilizando un tipo estructurado, el tipo de datos estáticos de la columna es el tipo estructurado. La columna puede incluir valores con un tipo dinámico que es un subtipo de nombre-tipo-estructurado.

Una columna definida utilizando un tipo estructurado no se puede utilizar en una clave primaria, restricción de unicidad, clave foránea, clave de índice o clave de distribución (SQLSTATE 42962).

Si se define una columna utilizando un tipo estructurado, y la columna contiene un atributo de tipo de referencia, a cualquier nivel de anidamiento, ese atributo no tiene ámbito. Para utilizar un atributo de esa clase en una operación de eliminación de referencia, es necesario especificar explícitamente un ámbito (SCOPE), utilizando una especificación CAST.

REF (nombre2-tipo)
Para una referencia a una tabla con tipo. Si se especifica nombre-tipo2 sin un nombre de esquema, el nombre de tipo se resuelve efectuando una búsqueda en los esquemas de la vía de acceso de SQL (definida por la opción de preproceso FUNCPATH en el caso de SQL estático y por el registro CURRENT PATH en el caso del SQL dinámico). El tipo de datos subyacente de la columna se basa en el tipo de datos de representación que se ha especificado en la cláusula REF USING de la sentencia CREATE TYPE para nombre-tipo2 o el tipo raíz de la jerarquía de tipos de datos que incluye a nombre-tipo2.
opciones-columna
Define opciones adicionales que están relacionadas con columnas de la tabla.
NOT NULL
Evita que la columna contenga valores nulos.

Si no se especifica NOT NULL, la columna puede contener valores nulos, y su valor por omisión es un valor nulo o bien el valor proporcionado por la cláusula WITH DEFAULT.

NOT HIDDEN o IMPLICITLY HIDDEN
Especifica si la columna ha de definirse como oculta. El atributo oculto determina si la columna se incluye como referencia implícita a la tabla o si se le puede hacer referencia de manera explícita en sentencias de SQL. El valor por omisión es NOT HIDDEN.
NOT HIDDEN
Especifica que la columna se incluye como referencia implícita a la tabla y que se puede hacer referencia a la columna de manera explícita.
IMPLICITLY HIDDEN
Especifica que la columna no es visible en sentencias de SQL a menos que se haga referencia a la columna de manera explícita por el nombre. Por ejemplo, suponiendo que una tabla incluye una columna definida con la cláusula IMPLICITLY HIDDEN, el resultado de SELECT * no incluye la columna oculta implícitamente. Sin embargo, el resultado de SELECT que haga referencia de manera explícita al nombre de una columna implícitamente oculta incluye dicha columna en la tala de resultados.

No debe especificarse IMPLICITLY HIDDEN para todas las columnas de la tabla (SQLSTATE 428GU).

opciones-lob
Especifica opciones para los tipos de datos LOB.
LOGGED
Especifica que los cambios que se han realizado en la columna se van a escribir en las anotaciones cronológicas. Acto seguido, los programas de utilidad de la base de datos (como RESTORE DATABASE) pueden recuperar los datos de estas columnas. LOGGED es el valor por omisión.
NOT LOGGED
Especifique que los cambios que se han realizado en la columna no se anotan de forma cronológica. Sólo se aplica a datos LOB que no están en línea.

NOT LOGGED no tiene ningún efecto en una operación de confirmación o retrotracción; es decir, la coherencia de la base de datos se mantiene incluso si una transacción se retrotrae, independientemente de que se anote cronológicamente el valor LOB o no. La implicación de no efectuar el registro es que durante una operación de avance, tras una operación de carga o de copia de seguridad, los datos de LOB se sustituirán por ceros en todos aquellos valores de LOB que hubieran generado entradas de la anotación cronológica que se habrían reproducido durante el avance. Durante la recuperación de anomalía general, todos los cambios confirmados y los cambios retrotraídos reflejarán los resultados esperados.

COMPACT
Especifica que los valores de la columna LOB deben ocupar el mínimo espacio de disco (liberar las páginas de disco sobrantes del último grupo utilizado por el valor LOB), en lugar de dejar el espacio restante al final del espacio de almacenamiento de LOB que podría facilitar operaciones posteriores de adición. Almacenar datos de este modo puede afectar negativamente el rendimiento de cualquier operación de adición (aumento de longitud) en la columna.
NOT COMPACT
Especifica cierto espacio para las inserciones para facilitar los cambios futuros que se efectúen en los valores LOB de la columna. Es el valor por omisión.
SCOPE
Identifica el ámbito de la columna de tipo de referencia.

Debe especificarse un ámbito para cualquier columna que vaya a utilizarse como operando izquierdo de un operador de eliminación de referencia o como argumento de la función DEREF. La especificación del ámbito de una columna de tipo de referencia puede diferirse a una sentencia ALTER TABLE posterior para permitir que se defina la tabla de destino, normalmente cuando las tablas se hacen referencia entre sí.

nombre-tabla-tipo
El nombre de una tabla con tipo. La tabla debe existir ya o debe ser la misma que el nombre de la tabla que se está creando (SQLSTATE 42704). El tipo de datos de nombre-columna debe ser REF(S), donde S es el tipo de nombre-tabla-tipo (SQLSTATE 428DM). No se realiza ninguna comprobación de los valores asignados a nombre-columna para asegurarse de si realmente los valores hacen referencia a filas existentes de nombre-tabla-tipo.
nombre-vista-tipo
El nombre de una vista con tipo. La vista debe existir ya o ser la misma que el nombre de la vista que se está creando (SQLSTATE 42704). El tipo de datos de nombre-columna debe ser REF(S), donde S es el tipo de nombre-vista-tipo (SQLSTATE 428DM). No se realiza la comprobación de valores que se han asignado a column-name para asegurarse de que los valores hacen referencia realmente a filas existentes en typed-view-name.
CONSTRAINT nombre-restricción
Indica el nombre de la restricción. Un nombre-restricción no debe identificar a ninguna restricción que ya esté especificada en la misma sentencia CREATE TABLA (SQLSTATE 42710).

Si se omite esta cláusula, el sistema genera un identificador de 18 bytes que es exclusivo entre los identificadores de las restricciones existentes que se han definido en la tabla. (El identificador se compone de la palabra SQL seguida por una secuencia de 15 caracteres numéricos generados por una función basada en la indicación de fecha y hora.)

Cuando se utiliza con una restricción PRIMARY KEY o UNIQUE, se puede utilizar el nombre-restricción como nombre de un índice que se crea para dar soporte a la restricción.

PRIMARY KEY
Esto proporciona un método abreviado para definir una clave primaria compuesta de una sola columna. De este modo, si se especifica PRIMARY KEY en la definición de la columna C, el efecto es el mismo que si se especifica la cláusula PRIMARY KEY(C) como cláusula separada.

No puede especificarse una clave primaria si la tabla es una subtabla (SQLSTATE 429B3) porque la clave primaria se hereda de la supertabla.

No puede utilizarse una columna ROW CHANGE TIMESTAMP como parte de una clave primaria (SQLSTATE 429BV).

Las columnas de inicio de fila, fin de fila e ID de inicio de transacción no se pueden utilizar como parte de una clave primaria (SQLSTATE 429BV).

Consulte PRIMARY KEY en la descripción de restricción-unicidad.

UNIQUE
Esto proporciona un método abreviado para definir una clave exclusiva compuesta de una sola columna. Por lo tanto, si se especifica UNIQUE en la definición de la columna C, el efecto es el mismo que si se especificase la cláusula UNIQUE(C) como una cláusula separada.

No puede especificarse una restricción de unicidad si la tabla es una subtabla (SQLSTATE 429B3) porque las restricciones de unicidad se heredan de la supertabla.

Consulte UNIQUE en la descripción de restricción-unicidad.

cláusula-referencias
Esto proporciona un método abreviado para definir una clave foránea compuesta de una sola columna. Así, si se especifica una cláusula-referencias en la definición de la columna C, el efecto es el mismo que si se especificase esa cláusula-referencias como parte de una cláusula FOREIGN KEY en la que C fuera la única columna identificada.

Consulte cláusula-referencias en la descripción de restricción-referencial.

CHECK (condición-comprobación)
Proporciona un método abreviado de definir una restricción de comprobación que se aplica a una sola columna. Consulte la descripción de CHECK (condición-comprobación).
cláusula-por-omisión
Especifica un valor por omisión para la columna.
WITH
Palabra clave opcional.
DEFAULT

Proporciona un valor por omisión, si no se proporciona ningún valor en INSERT o se especifique uno como DEFAULT en INSERT o UPDATE. Si no se especifica un valor por omisión a continuación de la palabra clave DEFAULT, el valor por omisión depende del tipo de datos de la columna, tal como se muestra en ALTER TABLE. Esta cláusula no debe especificarse con cláusula-generada en una definición de columna (SQLSTATE 42614).

Si una columna se define como XML, no se puede especificar un valor por omisión (SQLSTATE 42613). El único valor por omisión posible es NULL.

Si la columna está basada en una columna de una tabla con tipo, debe especificarse un valor por omisión específico cuando se defina un valor por omisión. No se puede especificar un valor por omisión para la columna de identificador de objeto de una tabla con tipo (SQLSTATE 42997).

Si se define una columna utilizando un tipo diferenciado, el valor por omisión de la columna es el valor por omisión del tipo de datos fuente convertido al tipo diferenciado.

Si una columna se define utilizando un tipo estructurado, no puede especificarse la cláusula-por-omisión (SQLSTATE 42842).

La omisión de DEFAULT en una definición-columna da como resultado la utilización del valor nulo como valor por omisión para la columna. Si dicha columna está definida como NOT NULL, la columna no tiene un valor por omisión válido.

valores-omisión
Los tipos específicos de los valores por omisión que pueden especificarse son los siguientes.
constante
Especifica la constante como el valor por omisión para la columna. La constante especificada debe:
  • Representa un valor que podría asignarse a la columna de acuerdo con las normas de asignación.
  • No ser una constante de coma flotante a menos que la columna esté definida con un tipo de datos de coma flotante.
  • Ser una constante numérica o un valor especial de coma flotante decimal si el tipo de datos de la columna es de coma flotante decimal. Las constantes de coma flotante se interpretan en primer lugar como DOUBLE y, a continuación, se convierten a coma flotante decimal, si la columna de destino es DECFLOAT. Para las columnas DECFLOAT(16), las constantes decimales que tengan una precisión de más de 16 dígitos se redondearán utilizando las modalidades de redondeo especificadas por el registro especial CURRENT DECFLOAT ROUNDING MODE.
  • No tener dígitos que no sean cero más allá de la escala del tipo de datos de la columna si la constante es una constante decimal (por ejemplo, 1.234 no puede ser el valor por omisión de una columna DECIMAL(5,2)).
  • Estar expresada con un máximo de 254 bytes, incluyendo los caracteres de comillas, cualquier carácter prefijo como la X para una constante hexadecimal, los caracteres del nombre de función completamente calificados y paréntesis, cuando la constante es el argumento de una función-conversión
registro-especial-fecha-hora
Especifica el valor que tenía el registro especial de indicación de fecha y hora (CURRENT DATE, CURRENT TIME o CURRENT TIMESTAMP) en el momento de ejecutarse INSERT, UPDATE o LOAD como valor por omisión de la columna. El tipo de datos de la columna debe ser el tipo de datos que corresponde al registro especial especificado (por ejemplo, el tipo de datos debe ser DATE cuando se especifica CURRENT DATE).
registro-especial-usuario
Especifica el valor del registro especial de usuario (CURRENT USER, SESSION_USER, SYSTEM_USER) en el momento de ejecutar INSERT, UPDATE o LOAD como valor por omisión de la columna. El tipo de datos de la columna debe ser de serie de caracteres con una longitud no inferior al atributo de longitud de un registro especial de usuario. USER se puede especificar en lugar de SESSION_USER y CURRENT_USER se puede especificar en lugar de CURRENT USER.
CURRENT SCHEMA
Especifica el valor que tenía el registro especial CURRENT SCHEMA en el momento de ejecutarse INSERT, UPDATE o LOAD como valor por omisión de la columna. Si se especifica CURRENT SCHEMA, el tipo de datos de la columna debe ser una serie de caracteres con una longitud superior o igual al atributo de longitud del registro especial CURRENT SCHEMA.
CURRENT MEMBER
Especifica el valor que tenía el registro especial CURRENT MEMBER en el momento de ejecutarse INSERT, UPDATE o LOAD como valor por omisión de la columna. Si se especifica CURRENT MEMBER, el tipo de datos de la columna debe permitir la asignación desde un entero.
NULL
Especifica NULL como valor por omisión para la columna. Si se ha especificado NOT NULL, DEFAULT NULL se puede especificar dentro de la misma definición de columna, pero genera un error cuando se intenta para establecer la columna en el valor por omisión.
función-conversión
Esta forma de valor por omisión solo se puede utilizar con las columnas definidas como tipo de datos diferenciado, BLOB o de indicación de fecha y hora (DATE, TIME o TIMESTAMP). Para el tipo diferenciado, excepto para los tipos diferenciados basados en tipos BLOB o de indicación de fecha y hora, el nombre de la función debe coincidir con el nombre del tipo diferenciado de la columna. Si está calificado con un nombre de esquema, debe ser el mismo que el nombre de esquema del tipo diferenciado. Si no está calificado, el nombre de esquema procedente de la resolución de la función debe ser el mismo que el nombre de esquema del tipo diferenciado. Para un tipo diferenciado basado en un tipo de indicación de fecha y hora, en el que el valor por omisión es una constante, debe utilizarse una función y el nombre de esta debe coincidir con el nombre del tipo de fuente del tipo diferenciado, con un nombre de esquema implícito o explícito de SYSIBM. Para las demás columnas de indicación de fecha y hora, también puede utilizarse la correspondiente función de indicación de fecha y hora. Para un BLOB o tipo diferenciado basado en BLOB, debe utilizarse una función, y el nombre de la función debe ser BLOB, junto con SYSIBM como nombre de esquema implícito o explícito.
constante
Especifica una constante como argumento. La constante debe cumplir las normas de una constante para el tipo de fuente del tipo diferenciado, o para el tipo de datos si no se trata de un tipo diferenciado. Si la función-conversión es BLOB, la constante debe ser una constante de serie de caracteres.
registro-especial-fecha-hora
Especifica CURRENT DATE, CURRENT TIME o CURRENT TIMESTAMP. El tipo de fuente del tipo diferenciado de la columna debe ser el tipo de datos que corresponde al registro especial especificado.
registro-especial-usuario
Especifica CURRENT USER, SESSION_USER o SYSTEM_USER. El tipo de datos del tipo de fuente del tipo diferenciado de la columna debe ser el tipo de datos serie con una longitud mínima de 8 bytes. Si la función-conversión es BLOB, el atributo de longitud debe ser como mínimo 8 bytes.
CURRENT SCHEMA
Especifica el valor del registro especial CURRENT SCHEMA. El tipo de datos del tipo de fuente del tipo diferenciado de la columna debe ser una serie de caracteres con una longitud mayor que o igual al atributo de longitud del registro especial CURRENT SCHEMA. Si la función-conversión es BLOB, el atributo de longitud debe ser como mínimo 8 bytes.
EMPTY_CLOB(), EMPTY_DBCLOB() o EMPTY_BLOB()
Especifica una serie de longitud cero como valor por omisión para la columna. La columna debe tener el tipo de datos que corresponden al tipo de datos de resultado de la función.

Si el valor especificado no es válido, se devuelve un error (SQLSTATE 42894).

cláusula-generada
Especifica un valor generado para la columna.
GENERATED

Especifica que la base de datos genere valores para la columna. Debe especificarse GENERATED si la columna se tiene que considerar como columna de identidad o columna de indicación de fecha y hora de cambio de fila, columna de inicio de fila, columna de fin de fila, columna de ID de inicio de transacción o columna de expresión generada. No se debe especificar una cláusula por omisión para una columna definida como GENERATED (SQLSTATE 42623).

ALWAYS
Especifica que se generará siempre un valor para la columna cuando se inserte una fila en la tabla o cuando cambie el valor del resultado de expresión-generación. El resultado de la expresión se almacena en la tabla. GENERATED ALWAYS es el valor recomendado a menos que se estén realizando operaciones de propagación de datos o de descarga y de recarga. GENERATED ALWAYS es el valor obligatorio para las columnas generadas.
BY DEFAULT
Especifica que la base de datos generará un valor para la columna cuando una fila se inserte o se actualice especificando la cláusula DEFAULT, a menos que se especifique un valor explícito. BY DEFAULT es el valor recomendado cuando se utiliza la propagación de datos o se realiza una operación de descarga o recarga.

Aunque no se solicita explícitamente, defina un índice de una sola columna exclusivo en las columnas IDENTITY generadas para garantizar la exclusividad de los valores.

AS IDENTITY
Especifica que la columna va a ser la columna de identidad para esta tabla. Una tabla sólo puede contener una única columna de identidad (SQLSTATE 428C1). La palabra clave IDENTITY sólo puede especificarse si el tipo de datos que se asocia a la columna es un tipo numérico exacto con una escala cero o un tipo diferenciado definido por el usuario para el que el tipo de fuente es un tipo numérico exacto con una escala cero (SQLSTATE 42815). Se consideran tipos numéricos exactos SMALLINT, INTEGER, BIGINT o DECIMAL con una escala cero o un tipo diferenciado basado en uno de estos tipos. En cambio, las comas flotantes de precisión simple o doble se consideran tipos de datos numéricos aproximados. Los tipos de referencia, aunque se hayan representando por medio de un tipo numérico exacto, no pueden definirse como columnas de identidad.

Las columnas de identidad están definidas implícitamente como no nulas (NOT NULL). Una columna de identidad no puede tener una cláusula DEFAULT (SQLSTATE 42623).

START WITH constante-numérica
Especifica el primer valor de la columna de identidad. Este valor puede ser cualquier valor positivo o negativo que podría asignarse a esta columna (SQLSTATE 42815), sin dígitos distintos de cero a la derecha de la coma decimal (SQLSTATE 428FA). El valor por omisión es MINVALUE para las secuencias ascendentes y MAXVALUE para las secuencias descendentes. Este valor no es necesariamente el valor al que se aplicará el ciclo después de alcanzarse el valor mínimo o máximo de la columna de identidad. La cláusula START WITH puede utilizarse para iniciar la generación de valores fuera del rango que se utiliza para los ciclos. El rango que se utiliza para los ciclos se define mediante MINVALUE y MAXVALUE.
INCREMENT BY constante-numérica
Especifica el intervalo existente entre valores consecutivos de la columna de identidad. Este valor puede ser cualquier valor positivo o negativo que pueda asignarse a esta columna (SQLSTATE 42815), que no exceda el valor de una constante de enteros grande (SQLSTATE 42820), sin dígitos distintos de cero a la derecha de la coma decimal (SQLSTATE 428FA).

Si este valor es negativo, es una secuencia descendente. Si este valor es 0 o positivo, es una secuencia ascendente. El valor por omisión es 1.

NO MINVALUE o MINVALUE
Especifica el valor mínimo en el que una columna de identidad descendente ejecuta un ciclo o detiene la generación de valores o en el que una columna de identidad ascendente ejecuta un ciclo tras haberse alcanzado el valor máximo.
NO MINVALUE
Para una secuencia ascendente, el valor es el valor START WITH o bien 1 si no se ha especificado START WITH. Para una secuencia descendente, el valor es el valor mínimo del tipo de datos de la columna. Es el valor por omisión.
MINVALUE constante-numérica
Especifica la constante numérica que es el valor mínimo. Este valor puede ser cualquier valor positivo o negativo que pueda asignarse a esta columna (SQLSTATE 42815), sin dígitos distintos de cero a la derecha de la coma decimal (SQLSTATE 428FA), pero el valor debe ser menor o igual al valor máximo (SQLSTATE 42815).
NO MAXVALUE o MAXVALUE
Especifica el valor máximo en el que una columna de identidad ascendente ejecuta un ciclo o detiene la generación de valores o en el que una columna de identidad descendente ejecuta un ciclo tras haberse alcanzado el valor mínimo.
NO MAXVALUE
Para una secuencia ascendente, el valor es el valor máximo del tipo de datos de la columna. Para una secuencia descendente, el valor es el valor START WITH o bien -1 si no se ha especificado START WITH. Es el valor por omisión.
MAXVALUE constante-numérica
Especifica la constante numérica que es el valor máximo. Este valor puede ser cualquier valor positivo o negativo que pueda asignarse a esta columna (SQLSTATE 42815), sin dígitos distintos de cero a la derecha de la coma decimal (SQLSTATE 428FA), pero el valor debe ser superior o igual al valor mínimo (SQLSTATE 42815).
NO CYCLE o CYCLE
Especifica si esta columna de identidad debe o no seguir generando valores tras la generación de su valor máximo o de su valor mínimo.
NO CYCLE
Especifica que los valores no se generan para la columna de identidad después de que se haya alcanzado el valor máximo o mínimo. Es el valor por omisión.
CYCLE
Especifica que se continúen generando valores para esta columna después de haber alcanzado el valor máximo o el valor mínimo. Si se utiliza esta opción, después de que una columna de identidad ascendente haya alcanzado el valor máximo, generará su valor mínimo; o después de que una secuencia descendente haya alcanzado el valor mínimo, generará su valor máximo. Los valores máximo y mínimo para la columna de identidad determinan el rango que se utiliza para el ciclo.

Cuando CYCLE está en vigor, pueden generarse valores duplicados para una columna de identidad. Aunque no se solicita explícitamente, debe definirse un índice de una sola columna, exclusivo, en la columna generada para garantizar la existencia de valores exclusivos, si se necesitan valores exclusivos. Si existe un índice exclusivo en una columna de identidad de este tipo y se genera un valor que no es exclusivo, se produce un error (SQLSTATE 23505).

NO CACHE o CACHE
Especifica si deben mantenerse en la memoria algunos valores preasignados, para conseguir un acceso más rápido. Si es necesario un nuevo valor para la columna de identidad, y no está disponible ninguno en la memoria caché, se debe anotar cronológicamente el final del nuevo bloque de memoria caché. Sin embargo, cuando se necesita un nuevo valor para la columna de identidad y existe un valor no utilizado en la memoria caché, la asignación de dicho valor de identidad es más rápida, pues no es necesario realizar ninguna anotación cronológica. Esta opción se utiliza para el rendimiento y el ajuste.
NO CACHE
Especifica que no se deben preasignar los valores de la columna de identidad.

Si se especifica esta opción, los valores de la columna de identidad no se colocan en la memoria intermedia. En este caso, cada petición de un valor de identidad nuevo produce E/S síncrona en las anotaciones cronológicas.

CACHE constante-entera
Especifica cuántos valores de la secuencia de identidad deben asignarse previamente y mantenerse en la memoria. Cuando se generan valores para la columna de identidad, la asignación previa y el almacenamiento de los valores en la antememoria reducen la E/S síncrona en el archivo de anotaciones cronológicas.

Si es necesario un nuevo valor para la columna de identidad y no hay disponibles ningún valor no utilizado en la memoria caché, la asignación del valor implica esperar la E/S en la anotación cronológica. Sin embargo, cuando se necesita un valor nuevo para la columna de identidad y existe un valor no utilizado en la antememoria, la asignación de dicho valor de identidad puede suceder más rápidamente evitando la E/S en las anotaciones cronológicas.

El valor mínimo es 2 (SQLSTATE 42815). El valor por omisión es CACHE 20.

Utilice las opciones CACHE y NO ORDER para permitir varias memorias caché de valores de identidad simultáneamente. en un entorno de múltiples particiones, varios miembros pueden ponerlas en memoria caché.

NO ORDER o ORDER
Especifica si los valores de identidad deben o no generarse en el orden en que se solicitan.
NO ORDER
Especifica que los valores no deben generarse en el orden en el que se solicitan. Es el valor por omisión.
ORDER
Especifica que los valores deben generarse en el orden en el que se solicitan.
FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
Especifica que la columna es una columna de indicación de fecha y hora para la tabla. Se genera un valor para la columna en cada fila que se inserta y para cualquier fila de cualquier columna que se actualiza. El valor que se genera para una columna ROW CHANGE TIMESTAMP es una indicación de fecha y hora que corresponde a la hora de inserción o actualización de la fila. Si se insertan o actualizan varias filas con una sentencia única, el valor de la columna ROW CHANGE TIMESTAMP puede ser diferente para cada fila.

Una tabla sólo puede tener una columna ROW CHANGE TIMESTAMP (SQLSTATE 428C1). Si se especifica tipo-datos, debe ser TIMESTAMP o TIMESTAMP(6) (SQLSTATE 42842). Una columna ROW CHANGE TIMESTAMP no puede tener una cláusula DEFAULT (SQLSTATE 42623). Debe especificarse NOT NULL para una columna ROW CHANGE TIMESTAMP (SQLSTATE 42831).

AS (expresión-generación)
Especifica que la definición de la columna se basa en una expresión. (Si la expresión para una columna GENERATED ALWAYS incluye una función externa definida por el usuario, el cambio del ejecutable de la función (de forma que los resultados cambien argumentos determinados) puede dar como resultado la existencia de datos no coherentes. Esto puede evitarse utilizando la sentencia SET INTEGRITY para forzar la generación de nuevos valores.) La expresión-generación no puede contener ninguno de los elementos siguientes (SQLSTATE 42621):
  • Subconsultas
  • Expresiones XMLQUERY o XMLEXISTS
  • Funciones de columna
  • Operaciones de eliminación de referencia o funciones DEREF
  • Funciones definidas por el usuario o funciones incorporadas que no son determinantes
  • Funciones definidas por el usuario mediante la opción EXTERNAL ACTION
  • Funciones definidas por el usuario que no estén definidas con NO SQL
  • Variables del lenguaje principal o marcadores de parámetros
  • Registros especiales y funciones incorporadas que dependen del valor de un registro especial
  • Variables globales
  • Referencias a columnas definidas más adelante en la lista de columnas
  • Referencias a otras columnas generadas
  • Referencias a columnas de tipo XML

El tipo de datos de la columna se basa en el tipo de datos resultante de la expresión-generación. Se puede utilizar una especificación CAST para forzar un tipo de datos determinado y proporcionar un ámbito (para un tipo de referencia solamente). Si se especifica tipo-datos, se asignarán valores a la columna de acuerdo con las normas de asignación correspondientes. Se considera que una columna generada puede contener nulos, a menos que se especifique la opción NOT NULL para columnas. El tipo de datos de una columna generada y el tipo de datos de resultado de expresión-generación debe tener definida la igualdad definida (consulte Asignaciones y comparaciones). Esto excluye las columnas y las expresiones de generación de los tipos de datos LOB, XML, tipos estructurados y tipos diferenciados basados en cualquiera de estos tipos (SQLSTATE 42962).

AS ROW BEGIN

Especifica que el gestor de bases de datos asigna el valor generado siempre que se inserta una fila en la tabla o que se actualiza una columna en la fila. El valor se genera a partir de la lectura del reloj durante la ejecución de la primera sentencia de cambio de datos en la transacción que exija que se asigne un valor a la columna de inicio de fila o la columna de ID de inicio de transacción de la tabla, o que se suprima una fila de una tabla temporal de período de sistema.

En el caso de una tabla temporal de período de sistema, el gestor de bases de datos garantiza la exclusividad de los valores generados para una columna de inicio de fila en las transacciones. El valor de indicación de fecha y hora puede ajustarse para garantizar que las filas insertadas en una tabla histórica asociada tengan un valor de indicación de fecha y hora de fin superior al valor de indicación de fecha y hora de inicio. Ello puede suceder cuando una transacción conflictiva actualiza la misma fila en la tabla temporal de período de sistema. El parámetro de configuración de base de datos systime_period_adj debe establecerse en Yes para que tenga lugar este ajuste en el valor de indicación de fecha y hora. Si se insertan o actualizan varias filas en una sola transacción de SQL y no es necesario un ajuste, los valores de la columna de inicio de fila son iguales para todas las filas y son exclusivos entre los valores generados para la columna en otra transacción. Se necesita una columna de inicio de fila como columna de inicio de un período SYSTEM_TIME, lo cual es el uso esperado de este tipo de columna generada.

Una tabla sólo puede tener una columna de inicio de fila (SQLSTATE 428C1). Si no se especifica tipo-datos, la columna se define como TIMESTAMP(12). Si se especifica tipo-datos, debe ser TIMESTAMP(12) (SQLSTATE 42842). La columna no puede tener una cláusula DEFAULT (SQLSTATE 42623) y debe definirse como NOT NULL (SQLSTATE 42831). Las columnas de inicio de fila no se pueden actualizar.

AS ROW END

Especifica que el gestor de base de datos asigna un valor para el tipo de datos de la columna siempre que se inserta una fila o cuando se actualiza una columna de la fila. El valor asignado es TIMESTAMP 9999-12-30-00.00.00.000000000000.

Se necesita una columna de fin de fila como segunda columna de un período SYSTEM_TIME, lo cual es el uso esperado de este tipo de columna generada.

Una tabla sólo puede tener una columna de fin de fila (SQLSTATE 428C1). Si no se especifica tipo-datos, la columna se define como TIMESTAMP(12). Si se especifica tipo-datos, debe ser TIMESTAMP(12) (SQLSTATE 42842). La columna no puede tener una cláusula DEFAULT (SQLSTATE 42623) y debe definirse como NOT NULL (SQLSTATE 42831). Las columnas de fin de fila no se pueden actualizar.

AS TRANSACTION START ID

Especifica que el gestor de bases de datos asigna el valor siempre que se inserta una fila en la tabla o que se actualiza una columna en la fila. El gestor de bases de datos asigna un valor de indicación de fecha y hora exclusivo por transacción o el valor nulo. El valor nulo se asigna a la columna de ID de inicio de transacción si la columna puede contener nulos y si existe una columna de inicio de fila en la tabla en la que el valor no tiene que ajustarse. De lo contrario, el valor se genera a partir de la lectura del reloj durante la ejecución de la primera sentencia de cambio de datos en la transacción que exija que se asigne un valor a la columna de inicio de fila o la columna de ID de inicio de transacción de la tabla, o que se suprima una fila de una tabla temporal de período de sistema. Si se insertan o actualizan varias filas en una sola transacción de SQL, los valores de la columna de ID de inicio de transacción son iguales para todas las filas y son exclusivos entre los valores que se generan para la columna en otra transacción.

Se necesita una columna de ID de inicio de transacción para una tabla temporal de período de sistema, lo cual es el uso esperado para este tipo de columna generada.

Una tabla solamente puede tener una columna de ID de inicio de transacción (SQLSTATE 428C1). Si no se especifica tipo-datos, la columna se define como TIMESTAMP(12). Si se especifica data-type, debe ser TIMESTAMP(12). Una columna de ID de inicio de transacción no puede tener una cláusula DEFAULT (SQLSTATE 42623). Una columna de ID de inicio de transacción no se puede actualizar.

INLINE LENGTH entero
Esta opción solo es válida para una columna que se ha definido utilizando un tipo estructurado, XML o un tipo de datos LOB (SQLSTATE 42842).

Para una columna de tipo de datos XML o LOB, entero indica el tamaño máximo en bytes de la representación interna de un documento XML o datos LOB que debe almacenarse en la fila de la tabla base. Los documentos de XML que tengan una representación interna más grande se almacenarán de modo independiente de la fila de tabla base en un objeto de almacenamiento auxiliar. Esta operación se realiza automáticamente. No hay longitud en línea por omisión para las columnas del tipo XML. Si el documento XML o los datos LOB se almacenan en línea en la fila de la tabla base, habrá una actividad general adicional. Para los datos LOB, la actividad general es de 4 bytes.

Para una columna de tipo de datos LOB, la longitud en línea por omisión se establece en el tamaño máximo del descriptor de LOB si la cláusula no se especifica. Todo valor INLINE LENGTH explícito debe tener como mínimo el tamaño máximo del descriptor LOB. La tabla siguiente resume los tamaños del descriptor LOB.
Tabla 1. Tamaños de los descriptores LOB para distintas longitudes de LOB.
Longitud máxima de LOB en bytes INLINE LENGTH explícito mínimo
1.024 68
8.192 92
65.536 116
524.000 140
4.190.000 164
134,000.000 196
536.000.000 220
1.070.000.000 252
1.470.000.000 276
2.147.483.647 312
Para una columna de tipo estructurado, entero indica el tamaño máximo en bytes de una instancia de un tipo estructurado que debe almacenarse en línea con el resto de los valores de la fila. Las instancias de tipos estructurados que no se pueden almacenar en línea se almacenan por separado de la fila de la tabla base, de forma similar a como se almacenan los valores LOB. Esta operación se realiza automáticamente. El valor por omisión de INLINE LENGTH para una columna de tipo estructurado es la longitud "inline" de su tipo (especificada explícitamente o por omisión en la sentencia CREATE TYPE). Si el valor INLINE LENGTH del tipo estructurado es menor que 292, se utiliza el valor 292 para la longitud en línea de la columna.
Nota: Las longitudes en línea de los subtipos no se cuentan en la longitud en línea por omisión, lo que significa que las instancias de los subtipos pueden no caber en línea a menos que, al crear la tabla, se especifique explícitamente un valor INLINE LENGTH para tener en cuenta los subtipos actuales y futuros.

El valor INLINE LENGTH explícito no puede superar 32.673. Para un tipo estructurado o de datos XML, debe ser, como mínimo, 292 (SQLSTATE 54010).

COMPRESS SYSTEM DEFAULT
Especifica que los valores por omisión del sistema se deben almacenar utilizando el mínimo espacio. Si no se especifica la cláusula VALUE COMPRESSION, se devuelve un aviso (SQLSTATE 01648) y los valores por omisión del sistema no se almacenan utilizando el mínimo espacio.

El hecho de permitir que los valores por omisión del sistema se almacenen de esta forma da lugar a una ligera pérdida de rendimiento durante las operaciones de inserción y actualización que se realizan en la columna debido a la comprobación adicional que tiene lugar.

El tipo de datos base no puede ser DATE, TIME, TIMESTAMP, XML ni un tipo de datos estructurado (SQLSTATE 42842). Si el tipo de datos base es una serie de caracteres de longitud variable, esta cláusula se pasa por alto. Los valores de serie de caracteres que tienen una longitud 0 se comprimen automáticamente si una tabla se ha establecido con VALUE COMPRESSION.

COLUMN SECURED WITH nombre-etiqueta-seguridad
Identifica una etiqueta de seguridad existente para la política de seguridad asociada a la tabla. El nombre no debe ser calificado (SQLSTATE 42601). La tabla debe tener asociada una política de seguridad (SQLSTATE 55064).La tabla no debe ser una tabla temporal de período de sistema.

Por regla general, no está autorizado para proteger datos de forma que las credenciales LBAC actuales no le permiten escribir en dichos datos. Para proteger una columna con una etiqueta de seguridad concreta, debe tener credenciales LBAC que le permiten escribir en datos protegidos por dicha etiqueta de seguridad. No es necesario que tenga la autorización SECADM.

definición-período
PERIOD
Define un período para la tabla.
SYSTEM_TIME (nombre-columna-inicio, nombre-columna-fin)

Define un período de sistema con el nombre SYSTEM_TIME. No debe haber una columna en la tabla con el nombre SYSTEM_TIME (SQLSTATE 42711). Una tabla sólo puede tener un período SYSTEM_TIME (SQLSTATE 42711). nombre-columna-inicio debe definirse como ROW BEGIN y nombre-columna-fin debe definirse como ROW END (SQLSTATE 428HN).

BUSINESS_TIME (nombre-columna-inicio, nombre-columna-fin)

Define un período de aplicación con el nombre BUSINESS_TIME. No debe haber una columna en la tabla con el nombre BUSINESS_TIME (SQLSTATE 42711). Una tabla sólo puede tener un período BUSINESS_TIME (SQLSTATE 42711). begin-column-name and end-column-name ambos deben definirse como DATE o TIMESTAMP(p) donde p está dentro del rango de 0 a 12 (SQLSTATE 42842), y las columnas se deben definir como NOT NULL (SQLSTATE 42831). nombre-columna-inicio y nombre-columna-fin no deben identificar una columna que se defina con una cláusula GENERATED (SQLSTATE 428HZ).

Una restricción de comprobación implícita se genera para garantizar que el valor de nombre-columna-fin sea superior que el valor de nombre-columna-inicio. El nombre de la restricción de comprobación creada implícitamente es DB2_GENERATED_CHECK_CONSTRAINT_FOR_BUSINESS_TIME, y no debe ser el nombre de ninguna otra restricción de comprobación especificada en la sentencia (SQLSTATE 42710).

restricción-unicidad
Define una restricción de clave primaria o de unicidad. Si la tabla tiene una clave de distribución, cualquier clave primaria o de unicidad debe ser un superconjunto de la clave de distribución. No puede especificarse una restricción de unicidad o de clave primaria para una tabla que sea una subtabla (SQLSTATE 429B3). Las claves primarias o exclusivas no pueden ser subconjuntos de dimensiones (SQLSTATE 429BE). Si la tabla es una tabla raíz, la restricción se aplica a la tabla y a todas sus subtablas.
CONSTRAINT nombre-restricción
Indica el nombre de la restricción de clave primaria o de unicidad.
UNIQUE (nombre-columna, ...)
Define una clave exclusiva que está formada por las columnas identificadas. Las columnas identificadas deben estar definidas como NOT NULL. Cada nombre-columna debe identificar una columna de la tabla y la misma columna no se debe identificar más de una vez.
Si la tabla tiene definido un período BUSINESS_TIME, se puede especificar BUSINESS_TIME WITHOUT OVERLAPS como último elemento en la lista de expresiones clave. Si se especifica BUSINESS_TIME WITHOUT OVERLAPS, la lista debe incluir, como mínimo, un nombre-columna. WITHOUT OVERLAPS significa que para las demás claves especificadas, los valores son exclusivos con respecto del tiempo del período BUSINESS_TIME. Cuando se especifica BUSINESS_TIME WITHOUT OVERLAPS, las columnas del período BUSINESS_TIME no deben especificarse como parte de la restricción (SQLSTATE 428HW). La especificación de BUSINESS_TIME WITHOUT OVERLAPS añade los atributos siguientes a la restricción:
  • La columna de fin del periodo de BUSINESS_TIME en orden ascendente
  • La columna de inicio del periodo de BUSINESS_TIME en orden ascendente

El número de columnas identificadas no debe ser superior a 64 y la suma de sus longitudes almacenadas no debe ser superior al límite de la longitud de la clave de índice para el tamaño de página. Para las longitudes almacenadas de columnas, consulte el apartado Número total de bytes. Para los límites de longitud de clave, consulte Límites de SQL. No se puede utilizar como parte de una clave única ningún tipo diferenciado LOB, XML basado en uno de estos tipos o tipo estructurado, aunque el atributo de longitud de la columna sea suficientemente pequeño para caber en el límite de longitud de la clave de índice del tamaño de página (SQLSTATE 54008).

El conjunto de columnas de la clave exclusiva no puede ser el mismo que el conjunto de columnas de la clave primaria u otra clave exclusiva (SQLSTATE 01543). (Si LANGLEVEL es SQL92E o MIA, se devuelve un error, SQLSTATE 42891).

No puede especificarse una restricción de unicidad si la tabla es una subtabla (SQLSTATE 429B3) porque las restricciones de unicidad se heredan de la supertabla.

La descripción de la tabla según se registra en el catálogo incluye la clave única y, si se hace cumplir, su índice único. Si se hace cumplir, se crea automáticamente un índice bidireccional exclusivo, que permite avanzar e invertir exploraciones, para las columnas de la secuencia que se especifican con orden ascendente para cada columna. El nombre del índice es el mismo que constraint-name si no entra en conflicto con un índice existente en el esquema donde se ha creado la tabla. Si el nombre de índice entra en conflicto, el nombre será SQL seguido de una indicación de fecha y hora de caracteres (aammddhhmmssxxx), con SYSIBM como nombre de esquema.

PRIMARY KEY (nombre-columna,...)
Define una clave primaria que está formada por las columnas identificadas. La cláusula no debe especificarse más de una vez y las columnas identificadas deben definirse como NOT NULL. Cada nombre-columna debe identificar una columna de la tabla, y la misma columna no se debe identificar más de una vez.
Si la tabla tiene definido un período BUSINESS_TIME, se puede especificar BUSINESS_TIME WITHOUT OVERLAPS como último elemento en la lista de expresiones clave. Si se especifica BUSINESS_TIME WITHOUT OVERLAPS, la lista debe incluir, como mínimo, un nombre-columna. WITHOUT OVERLAPS significa que para el resto de claves especificadas, los valores son exclusivos con respecto del tiempo del período BUSINESS_TIME. Cuando se especifica BUSINESS_TIME WITHOUT OVERLAPS, las columnas del período BUSINESS_TIME no deben especificarse como parte de la restricción (SQLSTATE 428HW). La especificación de BUSINESS_TIME WITHOUT OVERLAPS añade los atributos siguientes a la restricción:
  • La columna de fin del periodo de BUSINESS_TIME en orden ascendente
  • La columna de inicio del periodo de BUSINESS_TIME en orden ascendente

El número de columnas identificadas no debe ser superior a 64 y la suma de sus longitudes almacenadas no debe ser superior al límite de la longitud de la clave de índice para el tamaño de página. Para las longitudes almacenadas de columnas, consulte el apartado Número total de bytes. Para los límites de longitud de clave, consulte Límites de SQL. No se puede utilizar como parte de una clave primaria ningún tipo diferenciado LOB, XML basado en uno de estos tipos o tipo estructurado, aunque el atributo de longitud de la columna sea suficientemente pequeño para caber en el límite de longitud de la clave de índice del tamaño de página (SQLSTATE 54008).

El conjunto de columnas de la clave primaria no puede ser el mismo que el conjunto de columnas de una clave exclusiva (SQLSTATE 01543). (Si LANGLEVEL es SQL92E o MIA, se devuelve un error, SQLSTATE 42891).

En una tabla sólo se puede definir una clave primaria.

No puede especificarse una clave primaria si la tabla es una subtabla (SQLSTATE 429B3) porque la clave primaria se hereda de la supertabla.

La descripción de la tabla según se registra en el catálogo incluye la clave primaria y, si se hace cumplir, su índice primario. Si se hace cumplir, se creará automáticamente un índice bidireccional exclusivo, que permite las exploraciones directas e inversas, para las columnas en la secuencia especificada por orden ascendente para cada columna. El nombre del índice es el mismo que constraint-name si no entra en conflicto con un índice existente en el esquema donde se ha creado la tabla. Si el nombre de índice entra en conflicto, el nombre será SQL seguido de una indicación de fecha y hora de caracteres (aammddhhmmssxxx), con SYSIBM como nombre de esquema.

Cuando se definen claves de distribución explícitamente utilizando la cláusula DISTRIBUTE BY HASH, las columnas de una restricción de unicidad deben ser un superconjunto de columnas de clave de distribución; el orden de las columnas no es importante. Cuando las claves de distribución se definen implícitamente, se seleccionand en base a la definición de resticción de unicidad. La selección implícita de claves de distribución se produce en los casos siguientes:
  • Omita la cláusula DISTRIBUTE BY HASH y la tabla se define en un grupo de particiones de base de datos con múltiples particiones.
  • Se utiliza la cláusula DISTRIBUTE BY RANDOM.
restricción-referencia
Define una restricción de referencia.
CONSTRAINT nombre-restricción
Indica el nombre de la restricción de referencia.
FOREIGN KEY (nombre-columna,...)
Define una restricción de referencia con el nombre-restricción especificado.

T1 indicará la tabla de objetos de la sentencia. La clave foránea de la restricción de referencia se compone de las columnas identificadas. Cada nombre de la lista de nombres de columna debe identificar una columna de T1, y no debe identificarse la misma columna en más de una ocasión.

El número de columnas identificadas no debe ser superior a 64 y la suma de sus longitudes almacenadas no debe ser superior al límite de la longitud de la clave de índice para el tamaño de página. Para las longitudes almacenadas de columnas, consulte el apartado Número total de bytes. Para los límites de longitud de clave, consulte Límites de SQL. No puede utilizarse ningún LOB, XML o tipo diferenciado basado en uno de estos tipos, o columna de tipo estructurado, como parte de una clave foránea (SQLSTATE 42962). Debe haber el mismo número de columnas de clave foránea que hay en la clave padre y los tipos de datos de las columnas correspondientes deben ser compatibles (SQLSTATE 42830). Son compatible descripciones de dos columnas si tienen tipos de datos compatibles (ambas columnas son numéricas, de series de caracteres, gráficas, fecha/hora o tienen el mismo tipo diferenciado).

cláusula-referencias
Especifica la tabla padre o el apodo padre y la clave padre para la restricción de referencia.
REFERENCES nombre-tabla o apodo
La tabla o el apodo especificado en una cláusula REFERENCES debe identificar una tabla base o un apodo que se describa en el catálogo, pero no debe identificar una tabla del catálogo.

Una restricción de referencia está duplicada si su clave foránea, clave padre y tabla padre o apodo padre son iguales a la clave foránea, clave padre y tabla padre o apodo padre de una restricción de referencia especificada previamente. Las restricciones de referencia duplicadas se pasan por alto y se emite un aviso (SQLSTATE 01543).

En la explicación siguiente, T2 indica la tabla padre identificada y T1 indica la tabla que está creándose (o alterándose). (T1 y T2 pueden ser la misma tabla).

La clave foránea especificada debe tener el mismo número de columnas que la tabla padre de T2 y la descripción de la columna número n de la clave foránea debe ser similar a la descripción de la columna número n de esa clave padre. Las columnas de indicación de fecha y hora no se consideran compatibles con las columnas de serie al aplicar esta norma.
(nombre-columna,...)
La clave padre de la restricción de referencia se compone de las columnas identificadas. Cada nombre-columna debe ser un nombre no calificado que identifique una columna de T2. La misma columna no se puede identificar más de una vez.

La lista de nombres de columna debe coincidir con el conjunto de columnas (en cualquier orden) de la clave primaria o con una restricción de unicidad que exista en T2 (SQLSTATE 42890). Si no se especifica una lista de nombres de columna, T2 debe tener una clave primaria (SQLSTATE 42888). La omisión de la lista de nombres de columna es una especificación implícita de las columnas de dicha clave primaria en la secuencia especificada originalmente.

La restricción de referencia especificada por una cláusula FOREIGN KEY define una relación en la que T2 es el padre y T1 es dependiente.

cláusula-norma
Especifica la acción que debe realizarse en las tablas dependientes.
ON DELETE
Especifica la acción que se debe emprender en las tablas dependientes al suprimir una fila de la tabla superior. Existen cuatro acciones posibles:
  • NO ACTION (valor por omisión)
  • RESTRICT
  • CASCADE
  • SET NULL
La norma de supresión se aplica cuando una fila de la T2 es el objeto de una operación de DELETE o de supresión propagada y esa fila tiene dependientes en la T1. Supongamos que p indica dicha fila de T2.
  • Si se especifica RESTRICT o NO ACTION, se produce un error y no se suprimir ninguna fila.
  • Si se especifica CASCADE, la operación de supresión se propaga a los dependientes de p en T1.
  • Si se especifica SET NULL, cada columna con posibilidad de nulos de la clave foránea de cada dependiente de p en T1 se establece en nulo.

No debe especificarse SET NULL a menos que alguna columna de las claves foráneas permita valores nulos. La omisión de la cláusula es una especificación implícita de ON DELETE NO ACTION.

Si T1 está conectada para supresión con T2 mediante varias vías de acceso, no se permitirá definir dos normas SET NULL con definiciones de claves foráneas solapadas. Por ejemplo: T1 (i1, i2, i3). No se permite utilizar la Norma1 con la clave foránea (i1, i2) y la Norma2 con la clave foránea (i2, i3).

El orden de aplicación de las normas es el siguiente:
  1. RESTRICT
  2. SET NULL OR CASCADE
  3. NO ACTION

Si dos normas distintas afectan a cualquier fila de T1, se producirá un error y no se suprimirá ninguna fila.

No se puede definir una restricción de referencia si hará que una tabla se suprima-conecte a sí misma mediante un ciclo en el que intervienen dos o más tablas y donde una de las normas de supresión es RESTRICT o SET NULL (SQLSTATE 42915).

Se puede definir una restricción de referencia que haga que una tabla se suprima-conecte a sí misma o a otra tabla mediante varias vías de acceso, excepto en los siguientes casos (SQLSTATE 42915):

  • Una tabla no debe ser una tabla dependiente en una relación de tipo CASCADE (referencia a sí misma o referencia a otra tabla) y no debe tener una relación de auto referencia en la que la norma de supresión es RESTRICT o SET NULL.
  • Una clave solapa otra clave cuando al menos una columna de una clave está en la misma columna que la otra clave. Cuando una tabla se suprime-conecta a otra tabla a través de varias relaciones con claves foráneas de solapamiento, estas relaciones deben tener la misma norma de supresión y ninguna de las normas de supresión puede ser SET NULL.
  • Cuando una tabla está conectada por supresión a otra tabla a través de varias relaciones, y al menos una de estas relaciones se especifica con la norma de supresión SET NULL, las definiciones de clave foránea de estas relaciones no deben contener ninguna clave de distribución ni columna de clave MDC (clúster multidimensional).
  • Cuando dos tablas están conectadas por supresión con la misma tabla a través de relaciones de tipo CASCADE, las dos tablas no deben estar conectadas por supresión entre sí si la norma de supresión de la última relación de cada una de las vías de acceso conectadas por supresión es RESTRICT o SET NULL.

Si alguna fila de T1 se ve afectada por dos normas de supresión distintas, el resultado sería el efecto de todas las acciones especificadas por estas normas. Los activadores AFTER y las restricciones CHECK sobre T1 también sufrirán el efecto de todas las acciones. Un ejemplo de esto es una fila que constituye el destino de anulación a través de una vía de acceso de supresión-conexión con una tabla progenitora y que es el destino de una supresión por parte de una segunda vía de acceso de supresión-conexión con la misma tabla progenitora. El resultado sería la supresión de la fila. Los activadores AFTER DELETE sobre esta tabla descendiente se activaría, pero los activadores AFTER UPDATE no.

Cuando se aplican las normas anteriores a las restricciones de referencia, en que la tabla padre o la tabla dependiente es un miembro de una jerarquía de tablas con tipo, se tienen en cuenta todas las restricciones de referencia aplicables a cualquier tabla de sus respectivas jerarquías.

ON UPDATE
Especifica la acción que se debe emprender en las tablas dependientes al actualizar una fila de la tabla padre. La cláusula es opcional. ON UPDATE NO ACTION es el valor por omisión y ON UPDATE RESTRICT es la única alternativa.

La diferencia entre NO ACTION y RESTRICT se describe en el apartado Notas.

restricción-comprobación
Define una restricción de comprobación. Una restricción-comprobación es una condición-búsqueda que se debe evaluar como no falsa o una dependencia funcional que se define entre columnas.
CONSTRAINT nombre-restricción
Indica el nombre de la restricción de comprobación.
CHECK (condición-comprobación)
Define una restricción de comprobación. La condición-búsqueda debe ser verdadera o desconocida para cada fila de la tabla.
condición-búsqueda
La condición-búsqueda tiene las restricciones siguientes:
  • Una referencia de columna debe hacer referencia a una columna de la tabla que se está creando.
  • La condición-búsqueda no puede contener un predicado TYPE.
  • La condición-búsqueda no puede contener ninguno de los elementos siguientes (SQLSTATE 42621):
    • Subconsultas
    • Expresiones XMLQUERY o XMLEXISTS
    • Operaciones de eliminación de referencia o funciones DEREF donde el argumento de referencia con ámbito no es el correspondiente a la columna de identificador de objeto (OID)
    • Especificaciones CAST con una cláusula SCOPE
    • Funciones de columna
    • Funciones que no sean deterministas
    • Funciones que están definidas para tener una acción externa
    • Funciones definidas por el usuario que están definidos con MODIFIES SQL o READS SQL DATA
    • Variables del lenguaje principal
    • Marcadores de parámetro
    • referencias-secuencia
    • Especificaciones OLAP
    • Registros especiales y funciones incorporadas que dependen del valor de un registro especial
    • Variables globales
    • Referencias a columnas generadas que no correspondan a la columna de identidad
    • Referencias a columnas de tipo XML (excepto en un predicado VALIDATED)
    • Una expresión-tabla-anidada tolerante a errores
dependencia-funcional
Define una dependencia funcional entre columnas.
nombre-columna DETERMINED BY nombre-columna o (nombre-columna,...) DETERMINED BY (nombre-columna,...)
El conjunto de columnas padre contiene las columnas identificadas que preceden inmediatamente a la cláusula DETERMINED BY. El conjunto de columnas hijo contiene las columnas identificadas que siguen inmediatamente a la cláusula DETERMINED BY. Todas las restricciones de la condición-búsqueda se aplican a las columnas de los conjuntos padre e hijo y sólo están permitidas las referencias de columnas simples en el conjunto de columnas (SQLSTATE 42621). La misma columna no se debe identificar más de una vez en la dependencia funcional (SQLSTATE 42709). El tipo de datos de la columna no puede ser un tipo de datos LOB, un tipo diferenciado basado en un tipo de datos LOB, un tipo de datos XML ni un tipo estructurado (SQLSTATE 42962). No puede utilizarse una columna ROW CHANGE TIMESTAMP como parte de una clave primaria (SQLSTATE 429BV). Ninguna columna del conjunto de columnas hijo puede ser una columna con posibilidad de nulos (SQLSTATE 42621).

Si se especifica una restricción de comprobación como parte de una definición-columna, sólo puede establecerse una referencia de columna que haga referencia a la misma columna. Las restricciones de comprobación especificadas como parte de una definición de tabla pueden tener referencias de columna que identifiquen columnas que ya hayan sido definidas previamente en la sentencia CREATE TABLE. No se comprueba si hay incoherencias, condiciones duplicadas ni condiciones equivalentes en las restricciones de comprobación. Por lo tanto, se pueden definir restricciones de comprobación contradictorias o redundantes, lo que podría dar lugar a posibles errores en tiempo de ejecución.

Se puede especificar search-condition IS NOT NULL; sin embargo, se recomienda que la capacidad de anulación se fuerce directamente, utilizando el atributo NOT NULL de una columna. Por ejemplo, se acepta CHECK (salary + bonus > 30000) si el salario está establecido en NULL, porque las restricciones CHECK se deben satisfacer o deben ser desconocidas y, en este caso, el salario es desconocido. Sin embargo, se consideraría que CHECK (salario IS NOT NULL) es falso y una violación de la restricción si el salario se ha establecido en NULL.

Las restricciones de comprobación con condición-búsqueda se fuerzan cuando se insertan filas en la tabla o se actualizan. Una restricción de comprobación definida en una tabla se aplica automáticamente a todas las subtablas de esta tabla.

El gestor de bases de datos no fuerza una dependencia funcional durante las operaciones normales como, por ejemplo, insertar, actualizar, suprimir o establecer integridad. La dependencia funcional puede utilizarse durante la regrabación de consultas para optimizarlas. Se pueden devolver resultados incorrectos si no se mantiene la integridad de una dependencia funcional.

atributos-restricción
Define los atributos asociados con la clave primaria, restricciones únicas, de integridad de referencia o de comprobación.
ENFORCED o NOT ENFORCED
Especifica si el gestor de bases de datos obliga a aplicar la restricción durante operaciones normales como, por ejemplo, insertar, actualizar o suprimir. El valor por omisión es NOT ENFORCED.
ENFORCED
El gestor de bases de datos obliga a aplicar la restricción. ENFORCED no se puede especificar.
  • Para una dependencia funcional (SQLSTATE 42621)
  • Cuando una restricción referencial hace referencia a un apodo (SQLSTATE 428G7)
NOT ENFORCED
El gestor de bases de datos no obliga a aplicar la restricción. Una restricción de clave primaria o una restricción de unicidad no pueden ser NOT ENFORCED si existe una restricción referencial ENFORCED dependiente.
TRUSTED
Se puede confiar en los datos para que se ajusten a la restricción. TRUSTED sólo debe utilizarse si se reconoce de forma independiente que los datos de la tabla se ajustan a la restricción. Los resultados de la consulta pueden ser imprevisibles si los datos no se ajustan a la restricción. Es la opción por omisión.
Las restricciones informativas no deben incumplirse en ningún momento. Las restricciones informativas se utilizan en la optimización de consultas y en el proceso incremental de las MQT REFRESH IMMEDIATE y las tablas de etapas. Estos procesos podrían generar resultados imprevisibles o contenido de tablas de etapas o MQT incorrecto si se incumplen las restricciones. Por ejemplo, el orden en el que se mantienen las tablas padre-hijo es importante. Si se quieren añadir filas a una tabla padre-hijo, primero debe insertar las filas en la tabla padre. Para eliminar filas de una tabla padre-hijo, primero debe suprimir las filas de la tabla hijo. De esta forma se garantiza que no existen filas huérfanas en la tabla hijo en cualquier momento. Si se incumplen las restricciones informativas, el mantenimiento incremental de los datos de tablas de etapas y de los datos de MQT dependientes podría optimizarse en función de las restricciones informativas incumplidas, lo que produciría datos incorrectos.
NOT TRUSTED
No se puede confiar en los datos para que se ajusten a la restricción. NOT TRUSTED está pensado para casos en los que los datos se ajustan a la restricción para la mayor parte de las filas, pero no se reconoce de forma independiente que todas las filas o las futuras adiciones se ajustarán a la restricción. Si una restricción es NOT TRUSTED y se ha habilitado para la optimización de consultas, no se utilizará para realizar optimizaciones que dependan de los datos que se ajusten por completo a la restricción. Sólo se puede especificar NOT TRUSTED para las restricciones de integridad referenciales (SQLSTATE 42613).
ENABLE QUERY OPTIMIZATION o DISABLE QUERY OPTIMIZATION
Especifica si se puede utilizar la restricción o la dependencia funcional para la optimización de la consulta bajo circunstancias adecuadas. El valor por omisión es ENABLE QUERY OPTIMIZATION.
ENABLE QUERY OPTIMIZATION
La restricción se supone que es verdadera y se puede utilizar para la optimización de consulta.
DISABLE QUERY OPTIMIZATION
No se puede utilizar la restricción para la optimización de consulta. No se puede especificar DESHABILITAR OPTIMIZACIÓN DE CONSULTAS para la clave primaria y restricciones únicas (SQLSTATE 42613).
OF nombre1-tipo
Especifica que las columnas de la tabla están basadas en los atributos del tipo estructurado identificado por nombre-tipo1. Si se especifica nombre-tipo1 sin un nombre de esquema, el nombre de tipo se resuelve efectuando una búsqueda en los esquemas de la vía de acceso de SQL (definida por la opción de preproceso FUNCPATH en el caso del SQL estático y por el registro CURRENT PATH en el caso de SQL dinámico). El nombre de tipo debe ser el nombre de un tipo existente definido por el usuario (SQLSTATE 42704) y debe ser un tipo estructurado del que se pueda crear una instancia (SQLSTATE 428DP) con al menos un atributo (SQLSTATE 42997).

Si no se especifica UNDER, debe especificarse una columna de identificador de objeto (consulte definición-columna-OID). Esta columna de identificador de objeto es la primera columna de la tabla. La columna de ID de objeto va seguida de columnas basadas en los atributos de nombre-tipo1.

HIERARCHY nombre-jerarquía
Denomina la tabla de jerarquía que está asociada a la jerarquía de tablas. Se crea a la vez que la tabla raíz de la jerarquía. Los datos para todas las subtablas en la jerarquía de tablas con tipo se almacenan en la tabla de jerarquía. No se puede hacer referencia a una tabla de jerarquía directamente en una sentencia de SQL. Un nombre-jerarquía es un nombre-tabla. El nombre-jerarquía, incluido el nombre de esquema implícito o explícito, no debe identificar una tabla, apodo, vista o alias descritos en el catálogo. Si se especifica el nombre de esquema, debe ser el mismo que el nombre de esquema de la tabla que se está creando (SQLSTATE 428DQ). Si se omite esta cláusula al definir la tabla raíz, el sistema genera un nombre. Este nombre está compuesto por el nombre de la tabla que se está creando, seguido de un sufijo exclusivo, de tal modo que el identificador será exclusivo entre los identificadores de las tablas, vistas y apodos existentes.
UNDER nombre-supertabla
Indica que la tabla es una subtabla de nombre-supertabla. La supertabla debe ser una tabla existente (SQLSTATE 42704) y la tabla debe estar definida mediante un tipo estructurado que sea el supertipo inmediato de nombre-tipo1 (SQLSTATE 428DB). El nombre de esquema de nombre-tabla y nombre-supertabla debe ser el mismo (SQLSTATE 428DQ). La tabla identificada por nombre-supertabla no debe tener ninguna subtabla existente ya definida que utiliza nombre-tipo1 (SQLSTATE 42742).

Las columnas de la tabla incluyen la columna de identificador de objeto de la supertabla con su tipo modificado para que sea REF(nombre-tipo1), seguida de columnas basadas en los atributos de nombre-tipo1 (recuerde que el tipo incluye los atributos de su supertipo). Los atributos no pueden tener el mismo nombre que la columna de OID (SQLSTATE 42711).

No pueden especificarse otras opciones de tabla como el espacio de tablas, la captura de datos, NOT LOGGED INITIALLY y la clave de distribución. Estas opciones se heredan de la supertabla (SQLSTATE 42613).

INHERIT SELECT PRIVILEGES
A cualquier usuario o grupo que tenga un privilegio SELECT en la supertabla se le otorga un privilegio equivalente en la subtabla recién creada. Se considera que el definidor de la subtabla es el encargado de otorgar este privilegio.
lista-elementos-tipo
Define los elementos adicionales de una tabla con tipo. Esto incluye las opciones adicionales para las columnas, la adición de una columna de identificador de objeto (sólo la tabla raíz) y las restricciones de la tabla.
definición-columna-OID
Define la columna de identificador de objeto para la tabla con tipo.
REF IS nombre-columna-OID USER GENERATED
Especifica que en la tabla se define una columna de identificador de objeto (OID) como la primera columna. Se necesita un OID para la tabla raíz de una jerarquía de tablas (SQLSTATE 428DX). La tabla debe ser una tabla con tipo (debe estar presente la cláusula OF) que no sea una subtabla (SQLSTATE 42613). El nombre de la columna se define como nombre-columna-OID y no puede ser el mismo que el nombre de cualquier atributo del tipo estructurado nombre-tipo1 (SQLSTATE 42711). La columna se define con el tipo REF(nombre-tipo1), NOT NULL y se genera un índice de unicidad requerido por el sistema (con un nombre de índice por omisión). Esta columna viene referida como la columna de identificador de objeto o columna de OID. Las palabras clave USER GENERATED indican que el usuario debe proporcionar el valor inicial de la columna de OID cuando inserte una fila. Una vez que se haya insertado una fila, la columna de OID no podrá actualizarse (SQLSTATE 42808).
opciones-with
Define opciones adicionales que se aplican a las columnas de una tabla con tipo.
nombre-columna
Especifica el nombre de la columna para la que se especifican las opciones adicionales. El nombre-columna debe corresponder al nombre de una columna de la tabla que no sea además una columna de una supertabla (SQLSTATE 428DJ). Sólo puede aparecer un nombre de columna en una cláusula WITH OPTIONS de la sentencia (SQLSTATE 42613).

Si ya está especificada una opción como parte de la definición de tipo (en CREATE TYPE), las opciones especificadas aquí alteran temporalmente las opciones de CREATE TYPE.

WITH OPTIONS opciones-columna
Define opciones para la columna especificada. Consulte el valor opciones-columna descrito anteriormente. Si la tabla es una subtabla, no pueden especificarse restricciones de unicidad ni de clave primaria (SQLSTATE 429B3).
LIKE nombre1-tabla o nombre-vista o apodo
Especifica que las columnas de la tabla tienen el mismo nombre y descripción que las columnas de la tabla (nombre-tabla-1), la vista (nombre-vista) o el apodo (apodo). La tabla, vista o apodo especificado debe existir en el catálogo o debe ser una tabla temporal declarada. No se puede especificar una tabla con tipo ni una vista con tipo (SQLSTATE 428EC).
El uso de LIKE es una definición implícita de n columnas, donde n es el número de columnas de la tabla identificada (incluidas las columnas implícitamente ocultas), vista o apodo. Una columna de la tabla nueva que se corresponde a una columna implícitamente oculta de la tabla existente también se definirá como implícitamente oculta. La definición implícita depende de lo que se especifique después de LIKE:
  • Si se especifica una tabla, la definición implícita incluye el nombre de columna, tipo de datos, atributo oculto y la posibilidad de contener nulos de cada una de las columnas de la tabla. Si no se especifica EXCLUDING COLUMN DEFAULTS, también se incluye el valor por omisión de la columna.
  • Si se especifica una vista, la definición implícita incluye el nombre de columna, tipo de datos y posibilidad de contener nulos de cada columna resultante de la selección completa definida en dicha vista. Los tipos de datos de las columnas de la vista deben ser tipos de datos válidos para las columnas de una tabla.
  • Si se especifica un apodo, la definición implícita incluye el nombre de columna, tipo de datos y la posibilidad de contener nulos de cada columna de dicho apodo.
  • Si se especifica una tabla protegida, la tabla nueva hereda la misma política de seguridad y las mismas columnas protegidas que la tabla identificada.
  • Si se especifica una tabla y si dicha tabla contiene una columna row-begin, una columna row-end o una columna transaction-start-ID, la columna correspondiente de la nueva tabla solo hereda el tipo de datos de la columna de origen. La nueva columna no se considera una columna generada.
  • Si se especifica una tabla que incluye un periodo en la cláusula LIKE, la nueva tabla no hereda la definición de periodo.
  • Si se especifica una tabla temporal de periodo del sistema, la nueva tabla no es una tabla temporal de periodo de sistema.
  • Si se especifica una tabla de distribución aleatoria que utiliza el método aleatorio por generación, y si la nueva tabla que se está creando no comparte la misma distribución de tablas, no se incluye la columna RANDOM_DISTRIBUTION_KEY que se utiliza para generar los valores de distribución aleatoria.

El valor predeterminado de columna y los atributos de columna de identidad se pueden incluir o excluir, en función de las cláusulas copy-attributes. La definición implícita no incluye ningún otro atributo de la tabla, vista o apodo designados. Por lo tanto, la tabla nueva no tiene ninguna clave primaria, restricciones exclusivas, restricciones de clave foránea, restricciones de integridad referencial, desencadenantes, índices, especificación ORGANIZE BY o especificación PARTITIONING KEY. La tabla se crea en el espacio de tablas implícita o explícitamente especificado mediante la cláusula IN y la tabla tiene cualquier otra cláusula opcional sólo si la cláusula opcional se especifica.

Cuando una tabla se identifica en la cláusula LIKE y dicha tabla contiene una columna ROW CHANGE TIMESTAMP, la columna correspondiente de la nueva tabla hereda sólo el tipo de datos de la columna ROW CHANGE TIMESTAMP. La nueva columna no se considera una columna generada.

Si se especifica una tabla, y está activado el control de acceso de nivel de fila o de columna para dicha tabla, la nueva tabla no lo hereda.

opciones-copia
Estas opciones especifican si deben copiarse atributos adicionales de la definición de la tabla de resultados fuente (tabla, vista o selección completa).
INCLUDING COLUMN DEFAULTS
Especifica que deben copiarse los valores por omisión de cada columna actualizable contenida en la definición de la tabla de resultados fuente. Las columnas que no son actualizables no tienen un valor por omisión definido en la correspondiente columna de la tabla creada.

Si se especifica LIKE nombre-tabla y nombre-tabla identifica una tabla base, una tabla temporal creada o una tabla temporal declarada, INCLUDING COLUMN DEFAULTS es el valor por omisión. Si se especifica LIKE nombre-tabla y nombre-tabla identifica un apodo, INCLUDING COLUMN DEFAULTS no tendrá ningún efecto y no se copiarán los valores por omisión de la columna.

EXCLUDING COLUMN DEFAULTS
Especifica que no deben copiarse los valores por omisión de las columnas de la tabla de resultados fuente.

Esta es la cláusula por omisión, excepto si se especifica LIKE nombre-tabla y nombre-tabla identifica una tabla base, una tabla temporal creada o una tabla temporal declarada, entonces INCLUDING COLUMN DEFAULTS es el valor por omisión.

INCLUDING IDENTITY COLUMN ATTRIBUTES
Los atributos de columna de identidad se copian desde la definición de la tabla de resultados fuente, si es posible. Es posible copiar los atributos de columna de identidad, si el elemento de la correspondiente columna de la tabla, vista o selección completa es el nombre de una columna de tabla o de vista que, directa o indirectamente, se correlaciona con el nombre de una columna de tabla base que tiene el atributo de identidad. En todos los demás casos, las columnas de la nueva tabla no obtendrán el atributo de identidad. Por ejemplo:
  • La lista de selección de la selección completa contiene varias instancias del nombre de una columna de identidad (es decir, se selecciona la misma columna más de una vez).
  • La lista de selección de la selección completa contiene varias columnas de identidad (es decir, supone la ejecución de una operación de unión).
  • La columna de identidad está contenida en una expresión de la lista de selección
  • La selección completa contiene una operación de conjuntos (union, except o intersect).
EXCLUDING IDENTITY COLUMN ATTRIBUTES
Especifica que no deben copiarse los atributos de columna de identidad contenidos en la definición de la tabla de resultados fuente.
tabla-resultados-as
nombre-columna
Designa las columnas de la tabla. Si se especifica una lista de nombres de columna, ésta debe constar de tantos nombres como columnas haya en la tabla de resultados de la selección completa. Cada nombre-columna debe ser exclusivo y no calificado. Si no se especifica una lista de nombres de columnas, las columnas de la tabla heredan los nombres de las columnas de la tabla de resultados de la selección completa.

Debe especificarse una lista de nombres de columna si la tabla de resultados de la selección completa tiene nombres de columna duplicados o una columna sin nombre (SQLSTATE 42908). Una columna sin nombre es una columna derivada de una constante, función, expresión u operación de conjuntos que no se designa utilizando la cláusula AS de la lista de selección.

AS (selección-completa)
Especifica que, para columna de la tabla de resultados derivada de fullselect, se va a definir una columna correspondiente para la tabla. Cada columna definida adopta los siguientes atributos de su columna correspondiente de la tabla de resultados (si se aplica al tipo de datos):
  • Nombre de columna
  • Descripción de la columna
  • Tipo de datos, longitud, precisión y escala
  • Capacidad de nulos
Los atributos siguientes no se incluyen (aunque el valor predeterminado y los atributos de identidad pueden incluirse utilizando las opciones-copia):
  • Valor predeterminado
  • Atributos de identidad
  • Atributo oculto
  • ROW CHANGE TIMESTAMP
  • Cualquier otro atributo opcional de las tablas o vistas a las que se hace referencia en fullselect.
Se aplican las siguientes restricciones:
  • Cada elemento de la lista de selección debe tener un nombre exclusivo (SQLSTATE 42711). La cláusula AS puede utilizarse en la cláusula select para proporcionar nombres exclusivos.
  • fullselect no puede hacer referencia a variables host ni incluir marcadores de parámetro.
  • Los tipos de datos de las columnas de resultados de fullselect deben ser tipos de datos válidos para las columnas de una tabla.
  • Si el control de acceso de nivel de fila o columna (RCAC) está activado para cualquier tabla especificada en fullselect, RCAC no se aplica en cascada a la nueva tabla.
  • La selección completa no puede incluir una cláusula referencia-tabla-cambio-datos (SQLSTATE 428FL).
  • Se puede especificar cualquier selección completa válida que no haga referencia a una tabla con tipo ni a una vista con tipo.
WITH NO DATA | WITH DATA
Determina si se rellenan las columnas de la tabla con datos:
WITH NO DATA
No ejecute fullselect. Sólo se utiliza para definir la tabla, que no se llena con los resultados de la consulta.
WITH DATA
Ejecute fullselect y llene la tabla con los resultados de la consulta.
definición-consulta-materializada
nombre-columna
Designa las columnas de la tabla. Si se especifica una lista de nombres de columna, esta debe constar de tantos nombres como columnas haya en la tabla de resultados de la selección completa. Cada nombre-columna debe ser exclusivo y no calificado. Si no se especifica una lista de nombres de columnas, las columnas de la tabla heredan los nombres de las columnas de la tabla de resultados de la selección completa.

Se debe especificar una lista de nombres de columna si la tabla de resultados de la selección completa tiene nombres de columna duplicados o una columna sin nombre (SQLSTATE 42908). Una columna sin nombre es una columna derivada de una constante, función, expresión u operación de conjuntos que no se designa utilizando la cláusula AS de la lista de selección.

Si se especifica MAINTAINED BY REPLICATION, los nombres de columna de la lista de columnas deben coincidir con los nombres de las columnas de la tabla que se especifica en la selección completa.

AS
Especifica la consulta que se utiliza para la definición de la tabla y que determina los datos que se deben incluir en la tabla.
selección completa
Define la consulta en la que se basa la tabla. Las definiciones de columna resultantes son las mismas que las de una vista definida con la misma consulta. No se considera oculta en la tabla nueva una columna de la tabla nueva que se corresponde a una columna implícitamente oculta de la tabla base a la que se hace referencia en la selección completa.

Todos los elementos de la lista de selección deben tener un nombre (utilice la cláusula AS para las expresiones). La definición-consulta-materializada define los atributos de la tabla de consulta materializada. La opción que se elige también define el contenido de la selección completa de la siguiente manera:

La selección completa no puede incluir una cláusula referencia-tabla-cambio-datos (SQLSTATE 428FL), la cláusula-fetch ni la cláusula ORDER BY (SQLSTATE 428FJ).

Cuando se especifica REFRESH DEFERRED o REFRESH IMMEDIATE, la selección completa no puede incluir (SQLSTATE 428EC):
  • Las referencias a una tabla de consulta materializada, una tabla temporal creada, una tabla temporal declarada o una tabla con tipo en cualquier cláusula FROM
  • Referencias a una vista donde la selección completa de la vista infrinja cualquiera de las restricciones que aparecen en la selección completa de la tabla de consulta materializada
  • Expresiones que sean un tipo de referencia (o un tipo diferenciado basado en este tipo)
  • Funciones que tengan cualquiera de los atributos siguientes:
    • EXTERNAL ACTION
    • LANGUAGE SQL
    • CONTAINS SQL
    • READS SQL DATA
    • MODIFIES SQL DATA
  • Funciones NOT SECURED, si las funciones hacen referencia a una tabla de consulta materializada que a su vez hace referencia a una tabla que tiene activado el control de acceso a columnas o filas.
  • Funciones que dependan de características físicas (por ejemplo, DBPARTITIONNUM, HASHEDVALUE, RID_BIT, RID)
  • Una expresión ROW CHANGE o referencia a una columna ROW CHANGE TIMESTAMP de la fila
  • Referencias de tabla o vista a objetos del sistema (tampoco se deben especificar tablas de Explain)
  • Expresiones que sean un tipo estructurado, un tipo LOB (o un tipo diferenciado basado en un tipo LOB) o un tipo XML
  • Referencias a una tabla protegida o un apodo protegido
Cuando se especifica DISTRIBUTE BY REPLICATION, se aplican las siguientes restricciones:
  • No está permitida la cláusula GROUP BY.
  • La tabla de consulta materializada sólo debe hacer referencia a una única tabla; es decir, no puede incluir una unión.
Cuando se especifica MAINTAINED BY REPLICATION, se aplican las restricciones siguientes:
  • La consulta debe ser una subselección que conste de una sola cláusula SELECT y una cláusula FROM.
  • la cláusula FROM debe hacer referencia a una tabla única que se organiza por fila y que no se ha especificado en una definición de tabla duplicada existente.
  • La tabla de referencia no puede ser una tabla particionada en rangos, una tabla de clústeres multidimensional, tabla en clúster de rangos, una tabla temporal o una tabla que contiene una columna LONG VARCHAR o LONG VARGRAPHIC.
  • La tabla de referencia no se puede proteger mediante el control de acceso de fila y columna (RCAC) o el control de acceso basado en etiquetas (LBAC).
  • la lista de selección sólo puede incluir referencias directas a las columnas de la tabla cuyos tipos de datos se soportan en una tabla organizada por columnas. No se pueden utilizar expresiones.
  • Las columnas especificadas en la lista de selección no se pueden renombrar utilizando la lista de nombres de columna o la cláusula AS en la lista de selección.
  • En la tabla de referencia se debe aplicar como mínimo una restricción de clave primaria o una restricción de unicidad y las columnas que se especifican en la lista de selección deben incluir todas las columnas clave de una de estas restricciones como mínimo.
Si se especifica REFRESH IMMEDIATE:
  • La consulta debe ser una subselección, con la excepción de que se da soporte a UNION ALL en la expresión de tabla de entrada de GROUP BY.
  • La consulta no puede ser recursiva.
  • La consulta no puede incluir:
    • Referencias a un apodo
    • Funciones que no sean deterministas
    • Selecciones completas escalares
    • Predicados con selecciones completas
    • Registros especiales y funciones incorporadas que dependen del valor de un registro especial
    • Variables globales
    • SELECT DISTINCT
    • Una expresión-tabla-anidada tolerante a errores
  • Si la cláusula FROM hace referencia a más de una tabla o vista, sólo puede definir una unión interna sin utilizar la sintaxis INNER JOIN explícita.
  • Cuando se especifica una cláusula GROUP BY, se aplican las siguientes consideraciones:
    • Las funciones de columna soportadas son SUM, COUNT, COUNT_BIG y GROUPING (sin DISTINCT). La lista de selección debe contener una columna COUNT(*) o COUNT_BIG(*). Si la lista de selección de la tabla de consulta materializada contiene SUM(X), donde la X es un argumento que puede ser nulo, la tabla de consulta materializada también debe tener COUNT(X) en su lista de selección. Estas funciones de columna no pueden formar parte de ninguna expresión.
    • No está permitida una cláusula HAVING.
    • Si se utiliza en un grupo de particiones de base de datos con varias particiones, la clave de distribución debe ser un subconjunto de los elementos de GROUP BY.
  • La tabla de consulta materializada no debe contener filas duplicadas y se aplicarán las siguientes restricciones específicas de este requisito de exclusividad, según se especifique la cláusula GROUP BY o no.
    • Cuando se especifica una cláusula GROUP BY, se aplican las siguientes restricciones relacionadas con la exclusividad:
      • Todos los elementos de GROUP BY se deben incluir en la lista de selección.
      • Cuando GROUP BY contiene GROUPING SETS, CUBE o ROLLUP, los elementos de GROUP BY y las funciones de columna GROUPING de la lista de selección deben formar una clave exclusiva del conjunto de resultados. Por lo tanto, deberán satisfacerse las restricciones siguientes:
        • No se pueden repetir conjuntos de agrupación. Por ejemplo, ROLLUP(X,Y),X no está permitido, porque es equivalente a GROUPING SETS((X,Y),(X),(X)).
        • Si X es un elemento de GROUP BY con posibilidad de nulos que aparece en GROUPING SETS, CUBE o ROLLUP, GROUPING(X) deberá aparecer en la lista de selección.
    • Cuando no se especifica la cláusula GROUP BY, se aplican las siguientes restricciones relacionadas con la exclusividad:
      • El requisito de exclusividad de la tabla de consulta materializada se consigue por derivación de una clave exclusiva para la vista materializada a partir de una de las restricciones de clave exclusiva definidas en cada una de las tablas subyacentes. Por lo tanto, las tablas subyacentes deben tener definida como mínimo una restricción de clave exclusiva, y las columnas de estas claves deben aparecer en la lista de selección de la definición de tabla de consulta materializada.
Cuando se especifica REFRESH DEFERRED:
  • Si la tabla de consulta materializada se crea con intención de proporcionarle una tabla de etapas asociada en una sentencia posterior, la selección completa de la tabla de consulta materializada debe seguir las mismas restricciones y normas que una selección completa utilizada para crear una tabla de consulta materializada con la opción REFRESH IMMEDIATE.
  • Si la consulta es recursiva, la tabla de consulta materializada no se utiliza para optimizar el proceso de las consultas.
  • La tabla de consulta materializada no se utiliza para optimizar el proceso de consultas estáticas.

Una tabla de consulta materializada cuya selección completa contiene una cláusula GROUP BY, obtiene el resumen de los datos de las tablas a las que se hace referencia en la selección completa. Este tipo de tabla de consulta materializada también se denomina tabla de resumen. Una tabla de resumen en un tipo especializado de tabla de consulta materializada.

Si la selección_completa hace referencia a una tabla o una vista que depende de una tabla para la que se ha activado el control de acceso de nivel de fila o columna, esos controles de acceso de nivel de fila o columna se ignorarán al llenar la tabla de consulta materializada. La tabla de consulta materializada se crea de forma automática con el control de acceso de nivel de fila activado. Si los usuarios acceden directamente a esta tabla no verán ningún contenido, a menos que se creen los permisos adecuados o un usuario con autorización SECADM decida desactivar el control de acceso de nivel de fila en esta tabla de consulta materializada. Que el control de acceso de nivel de fila y columna en la tabla de consulta materializada no afecta al direccionamiento interno por parte del compilador de SQL a la tabla de consulta materializada.

opciones-tabla-renovable
Defina las opciones que pueden renovarse de los atributos de tabla de consulta materializada.
DATA INITIALLY DEFERRED
Los datos no se insertan en la tabla como parte de la sentencia CREATE TABLE. Se utiliza una sentencia REFRESH TABLE que especifique el nombre-tabla para insertar los datos en la tabla.
REFRESH
Indica cómo se mantienen los datos de la tabla.
DEFERRED
Los datos de la tabla pueden renovarse en cualquier momento mediante la sentencia REFRESH TABLE. Los datos de la tabla sólo reflejan el resultado de la consulta en forma de instantánea en el momento en que se procesa la sentencia REFRESH TABLE. Las tablas de consulta materializada mantenidas por el sistema que se han definido con este atributo no admiten las sentencias INSERT, UPDATE o DELETE (SQLSTATE 42807).Las tablas de consulta materializa mantenidas por el usuario que se han definido con este atributo no permiten las sentencias INSERT, UPDATE o DELETE.
IMMEDIATE
Los cambios que se han realizado en las tablas subyacentes como parte de una sentencia DELETE, INSERT o UPDATE se aplican en cascada a la tabla de consulta materializada. En este caso, el contenido de la tabla, en cualquier momento, es igual que cuando se procesa la subselección especificada. Las tablas de consulta materializada (MQT) que se han definido con este atributo no admiten las sentencias INSERT, UPDATE o DELETE (SQLSTATE 42807). No se adminten MQT organizadas en columnas utilizando la opción REFRESH IMMEDIATE cuando se especifica la claúsula MAINTAINED BY SYSTEM (SQL20058N).
ENABLE QUERY OPTIMIZATION
La tabla de consulta materializada puede utilizarse para la optimización de la consulta cuando se dan las circunstancias adecuadas.
DISABLE QUERY OPTIMIZATION
La tabla de consulta materializada no se utilizará para la optimización de la consulta. La tabla todavía puede consultarse directamente.
MAINTAINED BY
Especifica quién mantiene los datos de la tabla de consulta materializada: el sistema, el usuario o una herramienta de duplicación. El valor por omisión es SYSTEM.
SYSTEM
Especifica que el sistema mantiene los datos de la tabla de consulta materializada. Una tabla de consulta materializada mantenida por el sistema que se ha definido como ORGANIZE BY COLUMN, debe utilizar las opciones REFRESH DEFERRED y DISTRIBUTE BY REPLICATION.
USER
Especifica que el usuario mantiene los datos de la tabla de consulta materializada. El usuario puede realizar operaciones de actualización, supresión o inserción en las tablas de consulta materializada mantenidas por el usuario. La sentencia REFRESH TABLE, que se utiliza para las tablas de consulta materializada mantenidas por el sistema, no puede invocarse para las tablas de consulta materializada mantenidas por el usuario. Sólo una tabla de consulta materializada REFRESH DEFERRED puede definirse como MAINTAINED BY USER.
REPLICATION
Especifica que los datos de la tabla de consulta materializada están mantenidos por una tecnología de duplicación externa. MAINTAINED BY REPLICATION no se puede especificar en un entorno de bases de datos particionadas (SQLSTATE 56038). La sentencia REFRESH TABLE, que se utiliza para las tablas de consulta materializada mantenidas por el sistema, no se puede emitir para tablas de consulta materializada mantenidas por duplicación, que se conocen como tablas duplicadas. Sólo una tabla de consulta materializada REFRESH DEFERRED puede definirse como MAINTAINED BY REPLICATION y la definición debe incluir ORGANIZE BY COLUMN.
FEDERATED_TOOL
Especifica que los datos de la tabla de consulta materializada los mantiene una herramienta de duplicación federada. La sentencia REFRESH TABLE, que se utiliza para las tablas de consulta materializada mantenidas por el sistema, no puede invocarse para las tablas de consulta materializada mantenida por herramienta federada. Sólo se puede definir una única tabla de consulta materializada REFRESH DEFERRED como MAINTAINED BY FEDERATED_TOOL.

Cuando se especifica esta opción, la cláusula select de la sentencia CREATE TABLE no puede contener una referencia a una tabla base (SQLSTATE 428EC).

definición-tabla-etapas
Define la consulta que recibe el soporte de la tabla de etapas indirectamente por medio de una tabla de consulta materializada asociada. Las tablas subyacentes de la tabla de consulta materializada también son las tablas subyacentes de su tabla de etapas asociada. La tabla de etapas recopila los cambios que deben aplicarse a la tabla de consulta materializada para sincronizarla con el contenido de las tablas subyacentes.

Si la selección_completa hace referencia a una tabla o una vista que depende de una tabla para la que se ha activado el control de acceso de nivel de fila o columna, esos controles de acceso de nivel de fila o columna se ignorarán al llenar la tabla de etapas. No obstante, la tabla de etapas se crea de forma automática con el control de acceso de nivel de fila activado. Si los usuarios acceden directamente a esta tabla de etapas no verán ningún contenido, a menos que se creen los permisos adecuados o un usuario con autorización SECADM decida desactivar el control de acceso de nivel de fila en esta tabla de etapas. El control de acceso de nivel de fila y columna en la tabla de etapas no afecta al proceso interno de aplicación de los cambios capturados por la tabla de etapas en la tabla de consulta materializada asociada.

nombre-columna-etapas
Indica los nombres de las columnas de la tabla de etapas. Si se especifica una lista de nombres de columna, ésta deberá estar compuesta de dos nombres más que las columnas que hay en la tabla de consulta materializada para la que define la tabla. Si la tabla de consultas materializas es una tabla de consulta materializada duplicada, o si la consulta que define la tabla de consulta materializada no contiene una cláusula GROUP BY, la lista de nombres de columna deberá estar compuesta de tres nombres más que columnas hay en la tabla de consulta materializada para la que se define la tabla de etapas. Cada nombre de columna debe ser exclusivo y no calificado. Si no se especifica una lista de nombres de columna, las columnas de la tabla heredan los nombres de las columnas de la tabla de consulta materializada asociada. Las columnas adicionales se denominan GLOBALTRANSID y GLOBALTRANSTIME y, si se necesita una tercera columna, ésta se denomina OPERATIONTYPE.
Tabla 2. Columnas adicionales que se añaden a las tablas de etapas
Nombre de columna Tipo de datos Descripción de la columna
GLOBALTRANSID CHAR(8) FOR BIT DATA El ID de transacción global de cada fila propagada
GLOBALTRANSTIME CHAR(13) FOR BIT DATA La indicación de fecha y hora de la transacción
OPERATIONTYPE INTEGER Operación para la fila propagada, que puede ser una inserción, una actualización o una supresión.

Deberá especificarse una lista de nombres de columnas si cualquiera de las columnas de la tabla de consulta materializada asociada duplica cualquiera de los nombres de columna generados (SQLSTATE 42711).

FOR nombre2-tabla
Especifica la tabla de consulta materializada que se utiliza para la definición de la tabla de etapas. El nombre, incluido el esquema implícito o explícito, debe identificar una tabla de consulta materializada que exista en el servidor actual definido con REFRESH DEFERRED. La selección completa de la tabla de consulta materializada asociada debe seguir las mismas restricciones y normas que una selección completa que se ha utilizado para crear una tabla de consulta materializada con la opción REFRESH IMMEDIATE.

El contenido de la tabla de etapas puede utilizarse para renovar la tabla de consulta materializada, invocando la sentencia REFRESH TABLE, si el contenido de la tabla de etapas es coherente con la tabla de consulta materializada asociada y las tablas fuente subyacentes.

PROPAGATE IMMEDIATE
Los cambios que se han realizado en las tablas subyacentes como parte de una operación de supresión, inserción o actualización, se aplican en cascada a la tabla de etapas en la misma operación de supresión, inserción o actualización. Si la tabla de etapas no se ha marcado como incoherente, su contenido, en cualquier momento, son los cambios delta para la tabla subyacente desde la última renovación de la tabla de consulta materializada.
ORGANIZE BY
Especifica cómo se organizan los datos en las páginas de datos de la tabla.
Se aplican las siguientes restricciones a una MQT organizada por columnas:
  • Las MQT distintas de las tablas duplicadas deben hacer referencia a tablas con la misma organización que la MQT.
  • Se debe especificar la cláusula ORGANIZE BY COLUMN al crear una MQT organizada por columnas.
  • Para una MQT organizada por columnas, se pueden utilizar los siguientes tipos de tablas:
    • Tablas duplicadas
    • MQT mantenidas por el usuario
    • MQT mantenidas por el sistemas que se han definido con las cláusulas REFRESH DEFERRED y DISTRIBUTE BY REPLICATION.
El valor de organización predeterminado es:
  • COLUMN para IBM® Db2 Warehouse y para IBM Db2 Warehouse on Cloud
  • ROW para IBM Db2 on Cloud
ROW
Los datos se almacenan por filas en las páginas de datos de la tabla. Una página de datos dada almacena los datos de una o varias filas de la tabla.
COLUMN
Los datos se almacenan por columnas en las páginas de datos de la tabla. Cada página de datos almacena datos para una columna de la tabla.
ROW USING
Los datos se almacenan por filas en las páginas de datos de la tabla y se organizan adicionalmente utilizando una cláusula de dimensiones, secuencia de claves u hora de inserción. Si especifica una cláusula de dimensiones, secuencia de clave o la hora de inserción, especificar ROW USING es opcional, a menos que la organización de tablas predeterminada para la base de datos sea COLUMN, en cuyo caso es obligatorio especificar ROW USING.
DIMENSIONS (nombre-columna,...)
Especifica una dimensión para cada columna o grupo de columnas que se utiliza para el establecimiento de los datos de tabla en un clúster. La tabla cuya definición especifica esta cláusula se conoce como tabla de clúster multidimensional (MDC). Utilice paréntesis dentro de la lista de dimensiones para especificar que un grupo de columnas se ha de tratar como una dimensión. La palabra clave DIMENSIONS es opcional.

Se mantiene automáticamente un índice de bloques de clúster para cada dimensión especificada y se mantiene un índice de bloques, compuesto de todas las columnas que se utilizan en la cláusula, si ninguno de los índices de bloques de clúster las incluyen. El conjunto de columnas que se utiliza en la cláusula ORGANIZE BY debe respetar las normas de la sentencia CREATE INDEX que especifica CLUSTER.

Cada nombre de columna especificado en la cláusula ORGANIZE BY debe estar definido para la tabla (SQLSTATE 42703). Una dimensión no puede aparecer más de una vez en la lista de dimensiones (SQLSTATE 42709). Las dimensiones no pueden contener una columna ROW CHANGE TIMESTAMP, una columna de inicio de fila, una columna de fin de fila, una columna de ID de inicio de transacción (SQLSTATE 429BV) o una columna XML (SQLSTATE 42962). Si la tabla utiliza el tamaño de fila ampliado, cada columna de dimensión con un tipo de datos de VARCHAR o VARGRAPHIC no puede tener un atributo de longitud que sea superior a 24 bytes (SQLSTATE 54010).

Las páginas de la tabla se organizan en bloques de igual tamaño, que es el tamaño de extensión del espacio de tablas, y todas las filas de cada bloque contienen la misma combinación de valores de dimensión.

Una tabla puede ser una tabla de clúster multidimensional (MDC) y una tabla particionada. Las columnas de una tabla de esta clase se pueden emplear tanto en la espec-partición-rangos como en la clave MDC. El particionamiento de tablas es multicolumna, no multidimensional.

Para una tabla MDC particionada, se particionan los índices de bloque. La ubicación del índice de bloque particionado sigue la norma de ubicación de almacenamiento de índice particionado general. Todas las particiones de índice de una partición de datos determinada, incluidos los índices de bloque MDC, comparten un único objeto de índice. Por omisión, las particiones de índice de cada partición de datos específica residen en el mismo espacio de tablas que la partición de datos. Esto puede alterarse temporalmente con la cláusula INDEX IN de nivel de partición.

KEY SEQUENCE espec-clave-secuencia
Especifica que la tabla está organizada en secuencia de clave ascendente, con un tamaño fijo basado en el rango especificado de los valores de secuencia de clave. Una tabla que se organiza de este modo recibe el nombre de tabla agrupada por clústeres de rangos. Cada posible valor de clave del rango definido tiene una ubicación por omisión en la tabla física. El almacenamiento necesario para una tabla agrupada por clústeres de rangos debe estar disponible cuando se crea la tabla, y debe ser suficiente para contener el número de filas del rango especificado multiplicado por el tamaño de la fila (para obtener más información sobre cómo determinar los requisitos de espacio, consulte los apartados Límite del tamaño de fila y Número total de bytes).
nombre-columna
Especifica una columna de la tabla que se incluye en la clave exclusiva que determina la secuencia de la tabla agrupada por clústeres de rangos. El tipo de datos de la columna debe ser SMALLINT, INTEGER o BIGINT (SQLSTATE 42611) y las columnas deben estar definidas como NOT NULL (SQLSTATE 42831). La misma columna no puede estar identificada más de una vez e la clave de secuencia. El número de columnas identificadas no debe ser superior a 64 (SQLSTATE 54008).

Se creará una entrada de índice exclusiva automáticamente en el catálogo para las columnas de la secuencia de clave especificadas con orden ascendente para cada columna. El nombre del índice será SQL, seguido de una indicación de fecha y hora de caracteres (aammddhhmmssxxx), con SYSIBM como nombre de esquema. Un objeto de índice real no se crea en almacenamiento, porque la organización de la tabla se ordena por esta clave. Si se define una clave principal o una restricción exclusiva en las mismas columnas que la clave de secuencia de tabla agrupada por clústeres de rangos, se utiliza esta misma entrada de índice para la restricción.

Para la especificación de secuencia de clave, existe una restricción de comprobación para reflejar las restricciones de columna. Si se especifica la cláusula DISALLOW OVERFLOW, el nombre de la restricción de comprobación es RCT, y se obliga la restricción de comprobación. Si se especifica la cláusula ALLOW OVERFLOW, el nombre de la restricción de comprobación es RCT_OFLOW y no se aplica la restricción de comprobación.

STARTING FROM constante
Especifica el valor constante en el extremo inferior del rango para nombre-columna. Los valores menores que la constante especificada sólo se permiten si se especifica la opción ALLOW OVERFLOW. Si nombre-columna es una columna SMALLINT o INTEGER, la constante debe ser una constante INTEGER. Si nombre-columna es una columna BIGINT, la constante debe ser una constante INTEGER o BIGINT (SQLSTATE 42821). Si no se especifica ninguna constante inicial, el valor por omisión es 1.
ENDING AT constante
Especifica el valor constante en el extremo superior del rango para nombre-columna. Los valores mayores que la constante especificada sólo se permiten si se especifica la opción ALLOW OVERFLOW. El valor de la constante final debe ser mayor que la constante inicial. Si nombre-columna es una columna SMALLINT o INTEGER, la constante debe ser una constante INTEGER. Si nombre-columna es una columna BIGINT, la constante debe ser una constante INTEGER o BIGINT (SQLSTATE 42821).
ALLOW OVERFLOW
Especifica que la tabla agrupada por clústeres de rangos permite filas con valores de clave que quedan fuera del rango de valores definido. Cuando se crea una tabla agrupada por clústeres de rangos que permite desbordamientos, las filas con valores de clave que quedan fuera del rango se colocan al final del rango definido sin ningún orden por omisión. Las operaciones en que intervienen estas filas de desbordamiento son menos eficaces que las operaciones en filas que tienen valores de clave dentro del rango definido.
DISALLOW OVERFLOW
Especifica que la tabla agrupada por clústeres de rangos no permite filas con valores de clave que no quedan dentro del rango de valores definido (SQLSTATE 23513). Las tablas agrupadas por clústeres de rangos que no permiten desbordamientos siempre mantendrán todas las filas en secuencia de clave ascendente.

La cláusula DISALLOW OVERFLOW no puede especificarse si la tabla es una tabla de consulta materializada agrupada por clústeres de rangos (SQLSTATE 429BG).

PCTFREE entero
Especifica el porcentaje de cada página que debe dejarse como espacio libre. La primera fila de cada página se añade sin restricciones. Cuando se añaden filas adicionales a una página, al menos entero por ciento de la página se deja como espacio libre. El valor de entero entra en un rango que va de 0 a 99. El valor -1 de PCTFREE en el catálogo del sistema (SYSCAT.TABLES) se interpreta como el valor por omisión. El valor de PCTFREE por omisión para una página de tabla es 0.
INSERT TIME
Especifica que las filas se agrupan en clústeres en la tabla en relación con el tiempo en que se insertan. Las filas se insertan en el extremo lógico del objeto de tabla en lugar de buscar espacio disponible.

Una tabla que se organiza por tiempo de inserción recibe el nombre de tabla de agrupación en clústeres de tiempo de inserción (ITC). Este tipo de tabla puede utilizar REORG TABLE RECLAIM EXTENTS para reclamar extensiones libres con el fin de que puedan utilizar éstos inmediatamente otros objetos en el espacio de tablas.

Los datos se agrupan en clústeres mediante una dimensión virtual implícitamente creada. Un índice de bloques de agrupación en clústeres se mantiene automáticamente para esta dimensión virtual. La dimensión virtual no puede manipularse y no utiliza espacio por cada fila que existe en la tabla. Las páginas de la tabla se organizan en bloques de igual tamaño, que es el tamaño de extensión del espacio de tablas.

La cláusula ORGANIZE BY INSERT TIME no puede especificarse si la tabla es una tabla con tipo (SQLSTATE 428DH).

TTL-clause
TTL (tiempo de vista) es un mecanismo que le permite que los registros de bases de datos caduquen automáticamente. Representa un tiempo mínimo garantizado de vida, los datos que han alcanzado su valor de tiempo de espera de caducidad ya no se pueden recuperar y no aparecerán en ninguna estadística de base de datos. Por ejemplo, una tabla con TTL = 1 hora significa que se garantiza que los datos de la tabla no caducarán en menos de una hora a partir del momento en que se escribieron.
Nota: Tenga en cuenta que solo puede crear tablas con TTL que se almacenen como parquet, lo que significa que las tablase normales de almacén de filas db2 y las tablas de columnas no dan soporte a esta característica.
DATA CAPTURE
Indica si se debe registrar en el archivo de anotaciones cronológicas información adicional para la duplicación de datos entre bases de datos. No puede especificarse esta cláusula cuando se crea una subtabla (SQLSTATE 428DR).

Si la cláusula no se especifica y la tabla no es una tabla con tipo, el valor por omisión se determina mediante el ajuste DATA CAPTURE del esquema en el tiempo en que se crea la tabla.

NONE
Indica que no se va a anotar ninguna información adicional.
CHANGES
Indica que en el archivo de anotaciones cronológicas se registrará información adicional referente a los cambios de SQL efectuados en esta tabla. Esta opción es necesaria para duplicar la tabla y cuando se utiliza el programa Capture para capturar los cambios contenidos en el archivo de anotaciones para esta tabla.

Si la tabla es una tabla con tipo que no es adecuada, entonces esta opción no se soporta (SQLSTATE 428DH).

IN nombre-espacio-tablas,...
Identifica los espacios de tablas en que se va a crear la tabla. Los espacios de tablas deben existir, deben encontrarse en el mismo grupo de particiones de base de datos y deben ser todos espacios de tablas DMS normales o todos DMS grandes o todos SMS (SQLSTATE 42838) en los que el ID de autorización de la sentencia posee el privilegio USE.

Se permite como máximo una cláusula IN en el nivel de tabla. Todos los espacios de tablas que utiliza una tabla deben tener el mismo tamaño de página y el mismo tamaño de extensión.

Si tan solo se especifica un espacio de tablas, todas las partes de la tabla se almacenan en este espacio de tablas. No puede especificarse esta cláusula cuando se crea una subtabla (SQLSTATE 42613), porque el espacio de tablas se hereda de la tabla raíz de la jerarquía de tablas.

Si no se especifica esta cláusula, el gestor de base de datos elige un espacio de tabla (del conjunto de espacios de tabla existentes en la base de datos) con el tamaño de página menor posible y cuyo tamaño de fila respeta el límite de tamaño de fila del tamaño de la página sobre el que el ID de autorización de la sentencia tenga el privilegio USE.

Si es apto más de un espacio de tablas, elija el espacio de tablas de acuerdo con el orden de preferencia siguiente, según cómo el ID de autorización de la sentencia haya recibido el privilegio USE sobre el espacio de tablas:
  1. El ID de autorización
  2. Un rol al que se otorga el ID de autorización
  3. Un grupo al que pertenezca el ID de autorización
  4. Un rol al que se otorga el ID de autorización que pertenece al grupo
  5. PUBLIC
  6. Un rol al que se otorga PUBLIC
Si todavía existe más de un espacio de tablas que puede elegirse, el gestor de bases de datos toma la decisión final.
La determinación del espacio de tablas puede cambiar si:
  • Se descartan o crean espacios de tablas
  • Se otorgan o revocan los privilegios USE

Las tablas particionadas pueden tener las particiones de datos repartidas por varios espacios de tablas. Cuando se especifican varios espacios de tablas, todos los espacios de tablas deben existir y todos deben ser espacios de tablas SMS, DMS normales o DMS grandes (SQLSTATE 42838). El ID de autorización de la sentencia debe poseer el privilegio USE para todos los espacios de tablas especificados.

El tamaño de página suficiente de una tabla está determinado por el número de bytes de la fila o por el número de columnas. Para obtener más información, consulte el apartado Límite del tamaño de fila.

Si una tabla se coloca en un espacio de tablas grande:
  • La tabla puede ser mayor que una tabla de un espacio de tablas normal. Si desea más información sobre los límites de tabla y de espacio de tabla, consulte Límites de SQL.
  • La tabla puede dar soporte a más de 255 filas por página de datos, lo que puede mejorar la utilización del espacio de las páginas de datos.
  • Los índices definidos en la tabla requerirán una entrada de dos bytes por fila adicional, a diferencia de los índices definidos en una tabla que reside en un espacio de tablas normal.
CYCLE o NO CYCLE
Especifica si el número de particiones de datos sin ningún espacio de tablas explícito puede exceder el número de espacios de tablas especificados.
CYCLE
Especifica que, si el número de particiones de datos sin ningún espacio de tablas explícito excede el número de espacios de tablas especificados, los espacios de tablas se asignan a las particiones de datos de modo rotativo.
NO CYCLE
Especifica que el número de particiones de datos sin ningún espacio de tablas explícito no puede exceder el número de espacios de tablas especificados (SQLSTATE 428G1). Esta opción evita la asignación rotativa de los espacios de tablas a las particiones de datos.
opciones-espaciotablas
Especifica el espacio de tabla en el cual se van a almacenar los índices o los valores de columna largos. Para obtener detalles sobre los tipos de espacios de tablas, consulte CREATE TABLESPACE.
INDEX IN nombre-espacio-tablas
Identifica el espacio de tablas donde se crean los índices de una tabla no particionada o los índices no particionados de una tabla particionada. El espacio de tablas especificado debe existir; debe ser un espacio de tablas DMS si la tabla tiene datos en espacios de tablas DMS o un espacio de tablas SMS si la tabla particionada tiene datos en espacios de tablas SMS; debe ser un espacio de tablas en que el ID de autorización de la sentencia posea el privilegio USE y debe encontrarse en el mismo grupo de particiones de base de datos que nombre-espacio-tablas (SQLSTATE 42838).

Se puede especificar qué espacio de tabla contendrá índices cuando se crea una tabla, o en el caso de tablas particionadas, se puede hacer especificando la cláusula IN de la sentencia CREATE INDEX para un índice no particionado. La comprobación del privilegio USE para el espacio de tablas se realiza al crear la tabla, no al crear posteriormente un índice.

En el caso de un índice no particionado en una tabla particionada, el almacenamiento del índice se realiza como se indica a continuación:
  • El espacio de tablas mediante la cláusula IN de la sentencia CREATE INDEX
  • El espacio de tablas de nivel de tabla especificado para la cláusula INDEX IN de la sentencia CREATE TABLE
  • Si no se especifica ninguno de los anteriores, el índice se almacena en el espacio de tablas de la primera partición de datos enlazada o visible
Para obtener información acerca de los índices particionados en tablas particionadas, consulte la descripción de la cláusula INDEX IN de nivel de elemento-partición.
LONG IN nombre-espacio-tablas
Identifica los espacios de tablas donde se almacenarán los valores de todas las columnas largas. Las columnas largas incluyen aquellas con tipos de datos LOB, tipo XML o tipos diferenciados con cualquiera de estos como tipos de fuente, o las columnas que se han definido con tipos estructurados definidos por el usuario cuyos valores no se pueden almacenar en línea. Esta opción sólo está permitida si la cláusula IN identifica un espacio de tablas DMS.

El espacio de tablas especificado debe existir. Puede ser un espacio de tablas normal si es el mismo espacio de tablas en el que están almacenados los datos; de lo contrario, debe ser un espacio de tablas DMS grande en el que el ID de autorización de la sentencia tenga el privilegio USE. También debe encontrarse en el mismo grupo de particiones de base de datos que nombre-espacio-tablas (SQLSTATE 42838).

Se puede especificar qué espacio de tablas contendrá las columnas largas, LOB o XML al crear una tabla. La comprobación del privilegio USE se realiza al crear la tabla, no al añadir posteriormente una columna larga o LOB.

Para obtener información sobre las normas que rigen el uso de la cláusula LONG IN con tablas particionadas, consulte el apartado Comportamiento de objetos grandes en tablas particionadas.

cláusula-distribución
Especifica el particionamiento de base de datos o el modo en que se distribuyen los datos en diversas particiones de base de datos.
DISTRIBUTE BY HASH (nombre-columna,...)
Especifica el uso de la función hash predeterminada en las columnas especificadas como método de distribución en las particiones de base de datos. Las columnas especificadas se denominan clave de distribución.
  • Cada nombre de columna debe ser un nombre no calificado que identifica una columna de la tabla (SQLSTATE 42703).
  • La misma columna no se puede identificar más de una vez (SQLSTATE 42709).
  • No se puede utilizar como parte de una clave de distribución ninguna columna si el tipo de datos de la columna es BLOB, CLOB, DBCLOB, XML, un tipo diferenciado basado en cualquiera de estos tipos o tipo estructurado (SQLSTATE 42962).
  • La clave de distribución no puede contener una columna ROW CHANGE TIMESTAMP (SQLSTATE 429BV).
  • No puede especificarse una clave de distribución para una tabla que sea una subtabla, porque la clave de distribución se hereda de la tabla raíz de la jerarquía de tablas (SQLSTATE 42613).
  • Una clave de distribución no puede contener columnas de inicio de fila, de fin de fila o de ID de inicio de transacción.
  • Si no se especifica una cláusula DISTRIBUTE BY HASH, y la tabla reside en un grupo de particiones de base de datos de varias particiones, la clave de distribución predeterminada se define automáticamente.
  • Las columnas de la clave de distribución deben ser un subconjunto de las columnas que forman alguna restricción de unicidad.

Si ninguna de las columnas cumple los requisitos de una clave de distribución por omisión, la tabla se crea sin ninguna. Estas tablas solo están permitidas en espacios de tablas definidos en grupos de particiones de base de datos de partición única.

Para las tablas de los espacios de tablas que están definidos en grupos de particiones de base de datos de partición única, se puede utilizar cualquier conjunto de columnas con tipos de datos válidos para una clave de distribución a fin de definir la clave de distribución. Si no especifica esta cláusula, no se crea ninguna clave de distribución.

Para ver las restricciones relacionadas con la clave de distribución, consulte el apartado Normas.

DISTRIBUTE BY RANDOM
Especifica que el gestor de bases de datos seleccionará una clave de distribución para difundir datos de manera uniforme entre todas las particiones de base de datos del grupo de particiones de base de datos. Hay dos métodos que utiliza el gestor de bases de datos para conseguir esto:
  • Aleatorio por exclusividad: Si la tabla incluye una clave exclusiva o primaria, utiliza las características de exclusividad de las columnas clave para crear una difusión de datos aleatoria. Las columnas de la clave exclusiva o primaria se utilizan como claves de distribución.
  • Aleatorio por generación: Si la tabla no tiene una clave exclusiva o primaria, el gestor de bases de datos incluirá una columna en la tabla para generar y almacenar un valor generado para utilizar la función hash. La columna se creará con una cláusula IMPLICITLY HIDDEN por lo que no aparecer en las consultas a no ser que se incluya explícitamente. El valor de la columna se genera automáticamente cuando se añaden filas nuevas a la tabla. De forma predeterminada, el nombre de columna es RANDOM_DISTRIBUTION_KEY. Si esto entra en conflicto con la columna existente, el gestor de base de datos genera un nombre compatible.
DISTRIBUTE BY REPLICATION
Especifica que los datos almacenados en la tabla se duplican físicamente en cada partición de base de datos del grupo de particiones de base de datos de los espacios de tablas en que se define la tabla. Esto significa que existe una copia de todos los datos de la tabla en cada una de las particiones de base de datos. Esta opción sólo puede especificarse para una tabla de consulta materializada (SQLSTATE 42997).
cláusula-particionamiento
Especifica cómo se particionan los datos en una partición de base de datos.
PARTITION BY RANGE espec-partición-rangos
Especifica el esquema de particionamiento de tabla para la tabla.
expresión-partición
Especifica los datos de clave en que se define el rango para determinar la partición de datos de destino de los datos.
nombre-columna
Identifica una columna de clave de particionamiento de tabla. El nombre-columna debe ser un nombre no calificado que identifica una columna de la tabla (SQLSTATE 42703). La misma columna no se puede identificar más de una vez (SQLSTATE 42709). No puede utilizarse ninguna columna con un tipo de datos que sea BLOB, CLOB, DBCLOB, XML, un tipo diferenciado basado en cualquiera de esos tipos o un tipo estructurado como parte de una clave de particionamiento de tabla (SQLSTATE 42962).

Las normas para los literales numéricos gobiernan los literales numéricos utilizadas en la especificación del rango. Todos los literales numéricos (excepto los valores especiales de coma flotante decimal) utilizados en los rangos correspondientes a las columnas numéricas se interpretan como constantes decimales, de coma flotante o entero, con arreglo a las normas especificadas para las constantes numéricas. En consecuencia, para las columnas de coma flotante decimal, el valor de constante numérica mínima y máxima que puede utilizarse en la especificación del rango de una partición de datos es el valor de DOUBLE más pequeño y el valor de DOUBLE más grande, respectivamente. Los valores especiales de coma flotante decimal pueden utilizarse en la especificación de rangos. Todos los valores especiales de coma flotante decimal se interpretan como superiores a MINVALUE e inferiores a MAXVALUE.

Las columnas de particionamiento de tablas no pueden contener una columna ROW CHANGE TIMESTAMP (SQLSTATE 429BV). El número de columnas identificadas no debe superar 16 (SQLSTATE 54008).

NULLS LAST o NULLS FIRST
Indica la colocación de las filas de partición que tienen valores nulos en las columnas de clave de particionamiento de tabla. Estas cláusulas no afectan al orden de las filas devueltas en una cláusula ORDER BY.
NULLS LAST
Indica qué valores nulos se comparan con el valor más alto posible y se colocan en un rango que finaliza en MAXVALUE.
NULLS FIRST
Indica qué valores nulos se comparan con el valor más alto posible y se colocan en un rango que comienza en MINVALUE.
elemento-partición
Especifica los rangos de una clave de particionamiento de datos y el espacio de tablas donde se almacenarán las filas de la tabla del rango.
PARTITION nombre-partición
Indica el nombre de la partición de datos. El nombre no puede ser el mismo que el de ninguna otra partición de datos de la tabla (SQLSTATE 42710). Si no se especifica esta cláusula, el nombre será PART seguido del formato de caracteres de un valor entero para que el nombre sea exclusivo para la tabla.
espec-límite
Especifica los límites de una partición de datos. La partición de datos inferior debe contener una cláusula-inicial y la partición de datos superior debe contener una cláusula-final (SQLSTATE 56016). Las particiones de datos entre la inferior y la superior pueden contener una cláusula-inicial, una cláusula-final o ambas. Si solo se especifica la cláusula-final, la partición de datos anterior también debe contener una cláusula-final (SQLSTATE 56016).
cláusula-inicial
Especifica el extremo inferior del rango de una partición de datos. Debe haber como mínimo un valor inicial, y el número máximo de valores es el número de columnas de la clave de particionamiento de datos (SQLSTATE 53038). Si se han especificado menos valores que el número de columnas, los valores restantes son MINVALUE de forma implícita.
STARTING FROM
Especifica la cláusula-inicial.
constante
Especifica un valor constante con un tipo de datos asignable al tipo de datos del nombre-columna al que corresponde (SQLSTATE 53045). El valor no puede estar dentro del rango de ninguna otra espec-límite de la tabla (SQLSTATE 56016).
MINVALUE
Especifica un valor inferior al valor mínimo posible para el tipo de datos del nombre-columna al que corresponde.
MAXVALUE
Especifica un valor superior al valor máximo posible para el tipo de datos del nombre-columna al que corresponde.
INCLUSIVE
Indica que los valores de rango especificados deben incluirse en la partición de datos.
EXCLUSIVE
Indica que los valores constantes especificados deben excluirse de la partición de datos. Esta especificación se omite cuando se especifica MINVALUE o MAXVALUE.
cláusula-final
Especifica el extremo superior del rango de una partición de datos. Debe haber como mínimo un valor inicial, y el número máximo de valores es el número de columnas de la clave de particionamiento de datos (SQLSTATE 53038). Si se han especificado menos valores que el número de columnas, los valores restantes son MAXVALUE de forma explícita.
ENDING AT
Especifica la cláusula-final.
constante
Especifica un valor constante con un tipo de datos asignable al tipo de datos del nombre-columna al que corresponde (SQLSTATE 53045). El valor no puede estar dentro del rango de ninguna otra espec-límite de la tabla (SQLSTATE 56016).
MINVALUE
Especifica un valor inferior al valor mínimo posible para el tipo de datos del nombre-columna al que corresponde.
MAXVALUE
Especifica un valor superior al valor máximo posible para el tipo de datos del nombre-columna al que corresponde.
INCLUSIVE
Indica que los valores de rango especificados deben incluirse en la partición de datos.
EXCLUSIVE
Indica que los valores constantes especificados deben excluirse de la partición de datos. Esta especificación se omite cuando se especifica MINVALUE o MAXVALUE.
IN nombre-espacio-tablas
Especifica el espacio de tablas donde debe almacenarse la partición de datos. El espacio de tablas especificado debe tener el mismo tamaño de página, debe estar en el mismo grupo de particiones de base de datos y debe gestionar el espacio del mismo modo que los demás espacios de tablas de la tabla particionada (SQLSTATE 42838); debe ser un espacio de tablas en el que el ID de autorización de la sentencia posea el privilegio USE. Si no se especifica esta cláusula, por omisión se asigna un espacio de tablas de modo rotativo a partir de la lista de espacios de tablas especificada para la tabla. Si no se ha especificado un espacio de tablas para objetos grandes con la cláusula LONG IN, los objetos grandes se colocan en el mismo espacio de tablas que las demás filas de la partición de datos. Para las tablas particionadas, se puede emplear la cláusula LONG IN para proporcionar una lista de espacios de tablas. Esta lista se utiliza de modo rotativo para colocar los objetos grandes de cada una de las particiones de datos. Para obtener información sobre las normas que rigen el uso de la cláusula LONG IN con tablas particionadas, consulte el apartado Comportamiento de objetos grandes en tablas particionadas.

Si no se especifica la cláusula INDEX IN en la sentencia CREATE TABLE o CREATE INDEX, el índice se coloca en el mismo espacio de tablas que la primera partición visible o enlazada de la tabla.

INDEX IN nombre-espacio-tablas
Especifica el espacio de tablas donde se debe almacenar el índice particionado de la tabla particionada.

La cláusula INDEX IN de nivel de elemento-partición sólo afecta al almacenamiento de los índices particionados. El almacenamiento del índice se realiza como se indica a continuación:

  • Si la cláusula INDEX IN se especifica a nivel de partición al crear la tabla, el índice particionado se almacena en el espacio de tablas especificado.
  • Si la cláusula INDEX IN no se especifica a nivel de partición al crear la tabla, el índice particionado se almacena en el espacio de tablas de la partición de datos correspondiente.

La cláusula INDEX IN sólo se puede especificar si los espacios de tablas de datos son espacios de tablas DMS y el espacio de tablas especificado por la cláusula INDEX IN es un espacio de tablas DMS. Si el espacio de tablas de datos es un espacio de tablas SMS, se devuelve un error (SQLSTATE 42839).

LONG IN nombre-espacio-tablas
Identifica los espacios de tablas donde se almacenarán los valores de todas las columnas largas. Las columnas largas incluyen las de tipos de datos LOB, tipo XML, tipos diferenciados con cualquiera de estos tipos como fuente o cualquier columna definida con tipos estructurados definidos por el usuario cuyos valores no se pueden almacenar en línea. Esta opción sólo está permitida si la cláusula IN identifica un espacio de tablas DMS.

El espacio de tablas especificado debe existir. Puede ser un espacio de tablas normal si es el mismo espacio de tablas en el que están almacenados los datos; de lo contrario, debe ser un espacio de tablas DMS grande en el que el ID de autorización de la sentencia tenga el privilegio USE. También debe encontrarse en el mismo grupo de particiones de base de datos que nombre-espacio-tablas (SQLSTATE 42838).

Se puede especificar qué espacio de tablas contendrá las columnas largas, LOB o XML al crear una tabla. La comprobación del privilegio USE se realiza al crear la tabla, no al añadir posteriormente una columna larga o LOB.

Para obtener información sobre las normas que rigen el uso de la cláusula LONG IN con tablas particionadas, consulte el apartado Comportamiento de objetos grandes en tablas particionadas.

EVERY (constante)
Especifica el ancho de cada rango de partición de datos al utilizar el formato de la sintaxis generado automáticamente. Las particiones de datos se crearán comenzando por el valor STARTING FROM y con este número de valores en el rango. Este formato de la sintaxis solo está permitido para las tablas particionadas por una única columna numérica o de fecha y hora (SQLSTATE 53038).

Si la columna de clave de particionamiento es de tipo numérico, el valor inicial de la primera partición es el valor especificado en la cláusula-inicial. El valor final de la primera partición y todas las demás se calcula añadiendo el valor inicial de la partición al valor de incremento especificado como constante en la cláusula EVERY. El valor inicial de todas las demás particiones se calcula tomando el valor inicial de la partición anterior y añadiendo el valor de incremento especificado como constante en la cláusula EVERY.

Si la columna de clave de particionamiento es DATE o TIMESTAMP, el valor de inicio de la primera partición es el valor que se ha especificado en la cláusula de inicio. El valor final de la primera partición y todas las demás se calcula añadiendo el valor inicial de la partición al valor de incremento especificado como duración etiquetada en la cláusula EVERY. El valor inicial de todas las demás particiones se calcula tomando el valor inicial de la partición anterior y añadiendo el valor de incremento especificado como duración etiquetada en la cláusula EVERY.

Para una columna de tipo numérico, el valor EVERY debe ser una constante numérica positiva; para una columna de fecha y hora, el valor EVERY debe ser una duración etiquetada (SQLSTATE 53045).

COMPRESS
Especifica si se va a utilizar la compresión de filas para la tabla. En Db2 on Cloud y Db2 Warehouse on Cloud, el valor predeterminado es YES STATIC; en Db2 Warehouse, el parámetro de configuración ddl_compression_def determina el valor predeterminado de la palabra clave COMPRESS.
NO
La compresión de filas está inhabilitada.
YES
La compresión de filas está habilitada. Las operaciones de inserción y actualización en la tabla utilizan compresión de filas. También se comprimirán todos los objetos de almacenamiento XML que existan. Tanto para la compresión de filas adaptativa como para la clásica, se crea automáticamente un diccionario de compresión para la tabla después de que la tabla se haya llenado de datos de forma suficiente. Esto también se aplica a los datos del objeto de almacenamiento XML; si existen datos suficientes en el objeto de almacenamiento XML, se crea automáticamente un diccionario de compresión y los documentos XML están sujetos a compresión.
Nota: La compresión aplicada al objeto de almacenamiento XML es la misma, tanto si utiliza la compresión de filas adaptativa como la clásica.

Para la compresión de filas adaptativa, los diccionarios de compresión de nivel de página se crean o actualizan a medida que se especifican datos o se cambian en la tabla.

ADAPTIVE
Habilita la compresión adaptativa y los registros quedan sujetos a compresión con un diccionario de compresión de nivel de tabla o de nivel de página. La funcionalidad de COMPRESS YES ADAPTIVE es un superconjunto de la funcionalidad de COMPRESS YES STATIC. Este es el valor predeterminado cuando COMPRESS YES se ha especificado explícitamente.
STATIC
Habilita la compresión de filas clásica mediante un diccionario de compresión de nivel de tabla. Es el valor predeterminado cuando se utiliza la compresión de filas de forma predeterminada, pero COMPRESS YES no se especifica explícitamente.
VALUE COMPRESSION
Determina el formato de fila que debe utilizarse. Cada tipo de datos tiene un número total de bytes distinto según el formato de fila que se utilice. Para obtener más información, consulte el apartado Número total de bytes. Si la tabla es una tabla con tipo, esta opción sólo recibe soporte en la tabla raíz de la jerarquía de tablas con tipo (SQLSTATE 428DR).

El valor nulo se almacena utilizando 3 bytes. Es el mismo espacio o un espacio menor que cuando VALUE COMPRESSION no está activo para columnas de todos los tipos de datos, excepto para CHAR(1). El hecho de definir una columna como con posibilidad de nulos no afecta al cálculo del tamaño de fila. Los valores de datos de longitud cero para las columnas cuyo tipo de datos es VARCHAR, VARGRAPHIC, LONG VARCHAR, LONG VARGRAPHIC, CLOB, DBCLOB, VARBINARY, BLOB o XML deben almacenarse utilizando 2 bytes únicamente, que es un valor inferior al almacenamiento necesario cuando VALUE COMPRESSION no se ha activado. Cuando una columna se define con la opción COMPRESS SYSTEM DEFAULT, se permite también que el valor por omisión del sistema perteneciente a la columna se almacene utilizando 3 bytes de almacenamiento total. El formato de fila utilizado para dar soporte a esto determina el número total de bytes de cada tipo de datos y tiende a causar la fragmentación de los datos al actualizar al valor null, a un valor de longitud cero o al valor por omisión del sistema o bien al actualizar desde estos valores.

WITH RESTRICT ON DROP
Indica que la tabla no puede descartarse y que el espacio de tablas que contiene la tabla no puede descartarse.
NOT LOGGED INITIALLY
Los cambios realizados en la tabla por una operación de Inserción, Supresión, Actualización, Creación de índice, Descarte de índice o Modificación de tabla durante la misma unidad de trabajo en la que se crea la tabla no se registran en el archivo de anotaciones. Para conocer otras consideraciones que deben observarse al utilizar esta opción, consulte el apartado Notas de esta sentencia.

Todos los cambios de catálogo e información relativa al almacenamiento se anotan cronológicamente, así como las todas las operaciones que se realizan en la tabla en unidades de trabajo subsiguientes.

Nota: Si se produce actividad que no es de anotaciones cronológicas para una tabla que tiene activado el atributo NOT LOGGED INITIALLY y si una sentencia no se ejecuta satisfactoriamente (dando lugar a una retrotracción) o si se ejecuta ROLLBACK TO SAVEPOINT, se retrotraerá la unidad de trabajo completa (SQL1476N). Además, la tabla para la que se había activado el atributo NOT LOGGED INITIALLY se marcará como no accesible tras producirse la retrotracción y sólo podrá descartarse. Por lo tanto, debe minimizarse toda oportunidad de errores dentro de la unidad de trabajo en la que se haya activado el atributo NOT LOGGED INITIALLY.
CCSID
Especifica el esquema de codificación para datos de serie que se han almacenado en la tabla. Si no se especifica la cláusula CCSID, el valor por omisión es CCSID UNICODE para bases de datos Unicode y CCSID ASCII para las demás bases de datos.
ASCII
Especifica que los datos de serie están codificados en la página de códigos de la base de datos. Si la base de datos es Unicode, no se puede especificar CCSID ASCII (SQLSTATE 56031).
UNICODE
Especifica que los datos de serie están codificados en Unicode. Si la base de datos es Unicode, los datos de caracteres están en UTF-8 y los datos gráficos están en UCS-2. Si la base de datos no es Unicode, los datos de caracteres están en UTF-8.
Si la base de datos no es Unicode, se pueden crear tablas con CCSID UNICODE, pero se aplican las normas siguientes:
  • Se debe especificar el orden de clasificación alternativo en la configuración de la base de datos antes de crear la tabla (SQLSTATE 56031). Las tablas CCSID UNICODE se clasifican con la secuencia de clasificación alternativa que se ha especificado en la configuración de base de datos.
  • No se pueden utilizar conjuntamente las tablas o las funciones de tablas creadas con CCSID ASCII y las tablas o las funciones de tablas creadas con CCSID UNICODE en una sola sentencia de SQL (SQLSTATE 53090). Esto se aplica a las tablas y a las funciones de tabla a las que se hace referencia directamente en la sentencia, así como a las tablas y las funciones de tabla a las que se hace referencia indirectamente (por ejemplo, mediante restricciones de integridad referencial, activadores, tablas de consulta materializada y tablas de los cuerpos de las vistas).
  • No se puede hacer referencia a las tablas creadas con CCSID UNICODE en funciones de SQL o en métodos de SQL (SQLSTATE 560C0).
  • Una sentencia de SQL que hace referencia a una tabla creada con CCSID UNICODE no puede invocar una función de SQL ni un método de SQL (SQLSTATE 53090).
  • Los tipos gráficos, el tipo XML y los tipos definidos por el usuario no se pueden utilizar en tablas CCSID UNICODE (SQLSTATE 560C1).
  • Los tipos de datos anclados de una tabla creada con CCSID UNICODE (SQLSTATE 428HS).
  • Las tablas no pueden especificar las cláusulas CCSID UNICODE y DATA CAPTURE CHANGES a la vez (SQLSTATE 42613).
  • Las tablas de Explain no se pueden crear con CCSID UNICODE (SQLSTATE 55002).
  • Las tablas temporales creadas, y declaradas tablas temporales, no se pueden crear con CCSID UNICODE (SQLSTATE 56031).
  • Las tablas CCSID UNICODE no se pueden crear en una sentencia CREATE SCHEMA (SQLSTATE 53090).
  • La tabla de excepciones para una operación de carga debe tener el mismo CCSID que la tabla de destino de la operación (SQLSTATE 428A5).
  • La tabla de excepciones para una sentencia SET INTEGRITY debe tener el mismo CCSID que la tabla de destino para la sentencia (SQLSTATE 53090).
  • La tabla de destino para los datos del supervisor de sucesos no se debe declarar como CCSID UNICODE (SQLSTATE 55049).
  • Las sentencias de SQL siempre se interpretan en la página de códigos de la base de datos. En particular, significa que cada carácter de los literales, literales hexadecimales e identificadores delimitados debe tener una representación en la página de códigos de la base de datos; de lo contrario, el carácter se sustituirá por el carácter de sustitución.

Las variables del lenguaje principal de la aplicación siempre están en la página de códigos de la aplicación, sin tener en cuenta el CCSI de ninguna tabla de las sentencias de SQL que se invocan. El gestor de bases de datos realizará conversiones de páginas de códigos cuando sea necesario para convertir datos entre la página de códigos de aplicación y la página de códigos de sección. Se puede establecer la variable de registro DB2CODEPAGE en el cliente para cambiar la página de códigos de la aplicación.

SECURITY POLICY
Indica el nombre de la política de seguridad que se asociará a la tabla.
nombre-política
Identifica una política de seguridad que ya existe en el servidor actual (SQLSTATE 42704). Esta cláusula no activa la protección de fila o columna por sí sola. Para obtener más información, consulte Protección de los datos utilizando LBAC.
OPTIONS (nombre-opción-tabla constante-serie, ...)
Se utilizan opciones de tabla para identificar la tabla base remota. El nombre-opción-tabla es el nombre de la opción. La constante-serie especifica el valor para la opción de tabla. La constante-serie se debe especificar entre comillas simples.

El servidor remoto (el nombre de servidor que se ha especificado en la sentencia CREATE SERVER) se debe especificar en la cláusula OPTIONS. La cláusula OPTIONS también se puede utilizar para alterar temporalmente el esquema o el nombre no calificado de la tabla base remota que se crea.

Se recomienda que se especifique un nombre de esquema. Si no se especifica un nombre de esquema remoto, se utiliza el calificador para el nombre de tabla. Si el nombre de tabla no tiene calificador, se utiliza el ID de autorización de la sentencia.

Si no se especifica un nombre no calificado para la tabla base remota, se utiliza nombre-tabla.

Normas

  • La suma de las cuentas de bytes de las columnas, incluidas las longitudes en línea de todas las columnas de tipo estructurado o XML no debe ser mayor que el límite de tamaño de la fila, que está basado en el tamaño de página del espacio de tablas (SQLSTATE 54010). Para obtener más información, consulte el apartado Número total de bytes. Para las tablas con tipo, el número total de bytes se aplica a las columnas de la tabla raíz de la jerarquía de tablas y cada columna adicional que cada subtabla incorpora a la jerarquía de tablas (las columnas de subtabla adicionales deben considerarse como columnas con posibilidad de nulos para la obtención del número total de bytes, incluso si se han definido como columnas sin posibilidad de nulos). También hay 4 bytes adicionales de actividad general para identificar la subtabla a la que pertenece cada fila.
  • El número de columnas de una tabla no puede superar 1.012 (SQLSTATE 54011). Para las tablas con tipo, el número total de atributos de los tipos de todas las subtablas de la jerarquía de tablas no puede sobrepasar la cantidad de 1010.Para tablas de distribución aleatoria que utilizan el método método aleatoriedad por generación, el número de columnas no puede superar 1.011 debido a la inclusión de la columna RANDOM_DISTRIBUTION_KEY.
  • Una columna de identificador de objeto de una tabla con tipo no puede actualizarse (SQLSTATE 42808).
  • Cualquier restricción de clave primaria o de unicidad definida en la tabla debe ser un superconjunto de la clave de distribución (SQLSTATE 42997).
  • Las normas siguientes solo se aplican a las bases de datos de varias particiones de base de datos.
    • Las tablas compuestas únicamente de columnas con tipos LOB, XML, un tipo diferenciado basado en uno de estos tipos o un tipo estructurado sólo pueden crearse en los espacios de tablas que se definen en grupos de particiones de base de datos de partición única.
    • La definición de clave de distribución de una tabla de un espacio de tablas que se ha definido en un grupo de particiones de base de datos de varias particiones no puede modificarse.
    • La columna de clave de distribución de una tabla con tipo debe ser la columna de OID.
    • No están permitidas las tablas de etapas particionadas.
  • Se aplican las siguientes restricciones a las tablas agrupadas por clústeres de rangos:
    • No se puede crear un índice de clústeres.
    • No se da soporte a la modificación de la tabla para añadir una columna.
    • No se da soporte a la modificación de la tabla para cambiar el tipo de datos de una columna.
    • No se da soporte a la modificación de la tabla para cambiar PCTFREE.
    • No se da soporte a la modificación de la tabla para establecer APPEND ON.
    • Las estadísticas DETALLADAS no están disponibles.
    • No se puede utilizar el programa de utilidad de carga para llenar la tabla.
    • Las columnas no pueden ser de tipo XML.
    • No se puede crear como tabla de distribución aleatoria.
  • Las siguientes restricciones se aplican a las tablas de distribución aleatoria:
    • No se puede definir como una tabla con tipos
    • No se pueden definir como tablas agrupadas en clúster de rango
    • No se pueden definir como tablas de consulta materializada
    • No se puedne definir como una tabla base
    • Para las tablas de distribución aleatoria que utilizan el método de generación "random by" (esto sucede cuando se crea una tabla de distribución aleatoria sin una clave exclusiva o primaria), se aplican las siguientes restricciones adicionales:
      • No se pueden utilizar como tablas de excepción cuando las restricciones se comprueban masivamente, por ejemplo, durante las operaciones de carga o durante la ejecución de la sentencia SET INTEGRITY
      • No se puede utilizar como una tabla Explain
  • Una tabla no está protegida salvo que tenga asociada una política de seguridad y contenga una columna de tipo DB2SECURITYLABEL o una columna definida con la cláusula SECURED WITH. El primer caso indica que la tabla es una tabla protegida con granularidad en el nivel de fila y el segundo indica que la tabla es una tabla protegida con granularidad en el nivel de columna.
  • La declaración de una columna de tipo DB2SECURITYLABEL falla si la tabla no tiene asociada una política de seguridad (SQLSTATE 55064).
  • No se puede añadir una política de seguridad a una tabla con tipo (SQLSTATE 428DH), tabla de consulta materializada o tabla de etapas (SQLSTATE 428FG).
  • No se puede especificar una expresión-tabla-anidada tolerante a errores en la selección completa de una definición-consulta-materializada (SQLSTATE 428GG).
  • Al crear una tabla de consulta materializada, si alguna de las tablas base de las que depende está protegida con control de acceso basado en etiquetas, se aplican las siguientes normas:
    • Seguridad a nivel de fila
      • Solo una tabla de la selección completa de la tabla de consulta materializada puede tener un tipo de columna DB2SECURITYLABEL (SQLSTATE 428FG).
      • Se debe seleccionar la columna de etiqueta de seguridad de fila y hacer referencia a ella como una columna autónoma en la lista SELECT más externa de la definición de tabla de consulta materializada (SQLSTATE 428FG). La columna correspondiente en la tabla de consulta materializada quedará marcada como la columna de etiqueta de seguridad de fila.
    • Seguridad a nivel de columna
      • Si una tabla implicada en la definición de tabla de consulta materializada tiene una columna protegida con una etiqueta de seguridad y esa columna aparece en la definición de tabla de consulta materializada, la etiqueta de seguridad de esa columna es heredada por la columna correspondiente de la tabla de consulta materializada. Para más información, vea los ejemplos incluidos en este tema.
    • Al crear una tabla de consulta materializada que depende de una o más tablas protegidas por control de acceso basado en etiquetas, todas las tablas base deben tener el mismo objeto de política de seguridad (SQLSTATE, 428FG). La tabla de consulta materializada queda automáticamente protegida con ese objeto de política de seguridad.
    • La etiqueta de seguridad asociada a una columna de una tabla de consulta materializada se calcula como el agregado de una o más etiquetas de seguridad. Este agregado consiste en las etiquetas de seguridad asociadas a las columnas de las tablas base que participan en la definición de la columna de dicha tabla de consulta materializada. El agregado también consiste en las etiquetas de seguridad asociadas a cualquier columna de tabla base que aparezca en otras partes de la definición de tabla de consulta materializada, como las cláusulas WHERE, ORDER BY y HAVING. ALTER SECURITY POLICY posee una descripción de cómo se agregan dos etiquetas de seguridad. Para más información, vea los ejemplos incluidos en este tema.
    • Cuando se crea una tabla de etapas para una tabla de consulta materializada que está protegida con control de acceso basado en etiquetas, esa tabla de etapas posee protección automática como la tabla de consulta materializada. Para más información, vea los ejemplos incluidos en este tema.
    • El control de acceso basado en etiquetas se aplica para el acceso directo a una tabla de consulta materializada, del mismo modo que se aplica en el caso de una tabla normal. No hay diferencias desde esta perspectiva. Cuando el compilador de SQL atiende una consulta a través de una tabla de consulta materializada, no es necesario aplicar el control de acceso basado en etiquetas definido en la propia tabla de consulta materializada. El compilador de SQL utiliza la tabla de consulta materializada que tiene en cuenta las normas de control de acceso basado en etiquetas desde las tablas base adecuadas.
  • La cláusula-isolation no puede especificarse en la selección-completa de la definición-tabla-consulta-materializada (SQLSTATE 42601).
  • Las sentencias de subselección que contienen una lock-request-clause no son aptas para el direccionamiento de MQT.
  • Solamente se pueden especificar caracteres nacionales para los tipos de datos gráficos en una base de datos Unicode (SQLSTATE 560AA).
  • Se aplican las siguientes restricciones para insertar las tablas de agrupación en clústeres de tiempo de inserción (ITC):
    • Las tablas ITC no se admiten en un espacio de tablas SMS (SQLSTATE 42838).
    • Los índices que están definidos en tablas ITC no se admiten en un espacio de tablas SMS (SQLSTATE 42838).

Notas

  • La creación de una tabla con un nombre de esquema que todavía no existe dará como resultado la creación implícita de ese esquema siempre que el ID de autorización de la sentencia disponga de autorización IMPLICIT_SCHEMA. El propietario del esquema es SYSIBM. El privilegio CREATEIN sobre el esquema se otorga a PUBLIC.
  • Si se especifica una clave foránea:
    • Se invalidan todos los paquetes que estén sujetos a supresión en la tabla padre.
    • Se invalidan todos los paquetes que estén sujetos a actualización en una columna como mínimo de la clave padre.
  • La creación de una subtabla causa la invalidación de todos los paquetes que dependan de cualquier tabla de la jerarquía de tablas.
  • Las columnas VARCHAR y VARGRAPHIC que son mayores de 4.000 y 2.000 respectivamente no deben utilizarse como parámetros de entrada en funciones del esquema SYSFUN. Se producirán errores si se invoca la función con un valor de argumento que excede estas longitudes (SQLSTATE 22001).
  • La utilización de NO ACTION o RESTRICT como reglas de supresión o actualización para restricciones de referencia determina cuándo se aplica la restricción:
    RESTRICT
    La regla de supresión o actualización se aplica antes que las demás restricciones, incluidas las restricciones de referencia con normas de modificación como CASCADE o SET NULL.
    NO ACTION
    La norma de supresión o de actualización se aplica después de otras restricciones de referencia.
    Un ejemplo en el que es evidente un comportamiento distinto implica la supresión de filas de una vista que se ha definido como UNION ALL de las tablas relacionadas.
       La tabla T1 es una tabla padre de la tabla T3; norma de supresión,
       como se explica a continuación. 
       La tabla T2 es una tabla padre de la tabla T3; norma de supresión CASCADE.
       
       CREATE VIEW V1 AS SELECT * FROM T1 UNION ALL SELECT * FROM T2
    
       DELETE FROM V1
    Si la tabla T1 es una tabla padre de la tabla T3:
    • Con una regla de supresión de RESTRICT, se genera una violación de restricción (SQLSTATE 23001) si t3 contiene cualquier fila hijo para claves padre de T1.
    • Con una regla de supresión de NO ACTION, es posible que la regla de supresión CASCADE suprima las filas hijo cuando suprime filas desde T2 antes de que se aplique la regla de supresión NO ACTION para las supresiones desde T1. Si las supresiones de T2 no han tenido como resultado la supresión de todas las filas hijas de las claves padre de T1 en T3, se generará una violación de restricción (SQLSTATE 23504).
    Observe que el SQLSTATE que se devuelve es diferente dependiendo de si la norma de supresión o actualización es RESTRICT o NO ACTION.
  • En el caso de las tablas de los espacios de tablas definidas en grupos de particiones de base de datos de varias particiones, tenga en cuenta la colocación de claves cuando elija las claves de distribución:
    • Para la colocación, las tablas deben encontrarse en el mismo grupo de particiones de base de datos. Los espacios de tablas pueden ser distintos, pero deben haberse definido en el mismo grupo de particiones de base de datos.
    • Las claves de distribución de las tablas deben tener el mismo número de columnas, y las columnas de clave correspondientes deben tener particiones de base de datos compatibles para la colocación.
    • La elección de la clave de distribución también afecta al rendimiento de las uniones. Si una tabla se une con frecuencia a otra tabla, considere la posibilidad de unir las columnas como una clave de distribución para ambas tablas.
  • La opción NOT LOGGED INITIALLY es útil para las situaciones en que se debe crear un conjunto de resultados grande con datos de una fuente alternativa (otra tabla o un archivo) y la recuperación de la tabla no es necesaria. La utilización de esta opción ahorrará la actividad general de anotar cronológicamente los datos. Las siguientes consideraciones se aplican cuando se especifica esta opción:
    • Cuando se confirma la unidad de trabajo, todos los cambios que se han realizado en la tabla durante la unidad de trabajo fluyen al disco.
    • Cuando ejecuta el programa de utilidad de avance (Rollforward) y éste detecta un registro de anotaciones cronológicas que indica que el programa de utilidad de carga (Load) ha llenado una tabla de la base de datos o que ésta se ha creado con la opción NOT LOGGED INITIALLY, la tabla se marcará como no disponible. El programa de utilidad de avance (Rollforward) descartará la tabla si posteriormente encuentra una anotación cronológica DROP TABLE. De lo contrario, después de recuperar la base de datos, se emitirá un error si se realiza un intento de acceder a la tabla (SQLSTATE 55019). La única operación que está permitida es descartar la tabla.
    • Cuando se ha hecho copia de seguridad de la tabla como parte de una copia de seguridad de la base de datos o del espacio de tablas, se puede recuperar la tabla.
  • Uso de tablas de consultas materializadas para optimizar el proceso de consultas: Los diversos tipos de tablas de consultas materializadas utilizan distintos controles para optimizar el proceso de consultas.
    • Se puede utilizar una tabla de consulta materializada REFRESH DEFERRED definida con ENABLE QUERY OPTIMIZATION para optimizar el proceso de las consultas si cada una de las condiciones siguientes es verdadera:
      • CURRENT REFRESH AGE se establece en ANY.
      • CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION se establece de modo que incluye el tipo de tabla de consulta materializada.
      • CURRENT QUERY OPTIMIZATION se establece en 2 o un valor mayor que o igual a 5.
      Nota: CURRENT REFRESH AGE no afecta al direccionamiento de consulta a tablas de consultas materializadas MAINTAINED BY FEDERATED_TOOL.
    • Una tabla de consulta materializada REFRESH IMMEDIATE definida con ENABLE QUERY OPTIMIZATION siempre se tiene en cuenta para la optimización si CURRENT QUERY OPTIMIZATION se establece en 2 o un valor mayor o igual a 5.
    • Para que esta optimización pueda utilizar una tabla de consulta materializada REFRESH DEFERRED no mantenida por duplicación o una tabla de consulta materializada REFRESH IMMEDIATE, la fullselect debe ajustarse a determinadas normas, además de las normas que ya se han descrito:
      • La selección completa no debe incluir registros especiales o funciones incorporadas que dependen del valor de un registro especial.
      • La selección completa no debe incluir ninguna variable global.
      • La selección completa no debe incluir funciones que no sean deterministas.
      Si la consulta que se especifica al crear una tabla de consulta materializada no se ajusta a estas normas, se devuelve un aviso (SQLSTATE 01633).
  • Si la tabla de consulta materializada se define con REFRESH IMMEDIATE, o una tabla de etapas se define con PROPAGATE IMMEDIATE, es posible que se produzca un error al intentar aplicar el cambio resultante de una operación de inserción, actualización o supresión en una tabla subyacente. El error provocará la anomalía de la operación de inserción, actualización o supresión de la tabla subyacente.
  • Las tablas de consulta materializada o las tablas de etapas no se pueden utilizar como tablas de excepción cuando las restricciones se comprueban masivamente, por ejemplo, durante las operaciones de carga o durante la ejecución de la sentencia SET INTEGRITY.
  • Algunas operaciones no se pueden realizar en la tabla a la que hace referencia una tabla de consulta materializada definida con REFRESH IMMEDIATE, o definida con REFRESH DEFERRED con una tabla de etapas asociada:
    • No se puede utilizar IMPORT REPLACE.
    • No se puede llevar a cabo ALTER TABLE NOT LOGGED INITIALLY WITH EMPTY TABLE.
  • En un sistema federado, los apodos para las fuentes de datos relacionales o las tablas locales pueden utilizarse como tablas subyacentes para crear una tabla de consulta materializada. Los apodos para las fuentes de datos no relacionales no están soportados. Cuando un apodo es una de las tablas subyacentes, debe utilizarse la opción REFRESH DEFERRED. No se da soporte a las tablas de consulta materializada mantenidas por el sistema que hacen referencia a apodos en un entorno de base de datos particionada.
  • Consideraciones sobre las columnas de ID de inicio de transacción: Una columna de ID de inicio de transacción contiene un valor nulo si la columna soporta valores nulos, y existe una columna de inicio de fila y el valor de la columna es único entre los valores de las columnas de inicio de fila generados para otras transacciones. Dado que la columna puede contener valores nulos, se le recomienda que utilice uno de los métodos siguientes cuando recupere un valor de la columna:
    COALESCE (col_ID_inicio_transacción,  col_inicio_fila)
     
    CASE WHEN col_ID_inicio_transacción IS NOT NULL
              THEN col_ID_inicio_transacción 
         ELSE col_inicio_fila END
  • Definición de una tabla temporal de período de sistema: una definición de tabla temporal de inicio de sistema incluye lo siguiente:
    • Un período de sistema denominado SYSTEM_TIME, que se define utilizando una columna de inicio de fila y una columna de fin de fila. Consulte las descripciones de AS ROW BEGIN, AS ROW END y de definición de período.
    • Una columna de ID de inicio de transacción. Consulte la descripción de AS TRANSACTION START ID.
    • Una definición de mantenimiento de versiones de datos de periodo de sistema que se ha especificado en una sentencia ALTER TABLE posterior que especifica la acción ADD VERSIONING, que incluye el nombre de la tabla de historial asociada. Consulte la descripción de la cláusula ADD VERSIONING de ALTER TABLE.
    Para asegurarse de que la tabla histórica no se pueda descartar de forma implícita cuando se descarte una tabla temporal de período del sistema, utilice la cláusula WITH RESTRICT ON DROP en la definición de la tabla histórica. Una tabla histórica puede descartarse manualmente solo si se elimina el atributo RESTRICT ON DROP mediante una sentencia ALTER TABLE.
  • Definición de una tabla temporal de período de aplicación: una definición de tabla temporal de período de aplicación incluye un período de aplicación denominado BUSINESS_TIME. El período de aplicación se define mediante una columna de indicación de fecha y hora de inicio y una columna de indicación de fecha y hora de finalización. Consulte la descripción de definición de período.

    Las operaciones de cambio de datos en una tabla temporal de período de aplicación pueden generar una inserción automática de una o dos filas adicionales cuando se actualiza o se suprime una fila. Cuando se especifica una actualización o una supresión de una fila en una tabla temporal de período de aplicación para una parte del período que representa esa fila, la fila se actualiza o se suprime y se insertan una o dos filas de forma automática para representar la parte de la fila que no cambia. Se generan nuevos valores para cada columna generada en una tabla temporal de período de aplicación para cada fila que se inserta de forma automática como resultado de una operación de actualización o supresión en la tabla. Si se define una columna generada como parte de una clave exclusiva o primaria, una clave principal de una restricción referencial o un índice exclusivo, es posible que una inserción automática viole una restricción o índice, en cuyo caso se devolverá un error.

  • Consideraciones para columnas ocultas implícitamente: La creación de una tabla con columnas ocultas implícitamente puede afectar al comportamiento de los programas de utilidad de movimiento de datos que funcionan con la tabla. Cuando una tabla de base de datos contiene columnas ocultas implícitamente, algunos programas de utilidad como IMPORT, INGEST y LOAD requieren que especifique si los datos para las columnas ocultas han de incluirse en la operación. Por ejemplo, esto podría significar que una operación de carga que se ejecuta correctamente para una tabla sin ninguna columna oculta podría no ejecutarse correctamente para una tabla que contiene columnas ocultas implícitamente (SQLCODE SQL2437N). De forma similar, EXPORT requiere que especifique si los datos para las columnas ocultas han de incluirse en la operación.

    Los programas de movimiento de datos utilizan la variable de registro DB2_DMU_DEFAULT, o los modificadores de tipo de archivo implicitlyhiddeninclude o implicitlyhiddenmissing, al trabajar con tablas que contienen columnas ocultas implícitamente.

  • DDL transparente: En un sistema federado, se puede crear, modificar o descartar una tabla base remota utilizando el SQL de IBM. Esta posibilidad se conoce como DDL transparente. Para poder crear una tabla base remota en una fuente de datos, el servidor federado debe estar configurado para acceder a esa fuente de datos. Esta configuración incluye la creación de un derivador para la fuente de datos, el suministro de la definición del servidor para el servidor en el que se ubicará la tabla base remota y la creación de correlaciones de usuario entre el servidor federado y la fuente de datos.
    El DDL transparente impone algunas limitaciones en los elementos que pueden incluirse en la sentencia CREATE TABLE:
    • Sólo se pueden crear columnas y una clave primaria en la tabla base remota.
    • Entre las clases específicas que admite el DDL transparente se encuentran las siguientes:
      • definición-columna y restricción-unicidad en la cláusula lista-elementos
      • NOT NULL y PRIMARY KEY en la cláusula opciones-columna
      • OPTIONS
    • La fuente de datos remota debe dar soporte a:
      • Los tipos de datos de columna remotos con los que se correlacionan los tipos de datos de columna de base de datos
      • La opción de clave primaria de la sentencia CREATE TABLE
      Según cómo responda la fuente de datos a las peticiones que no da soporte, puede que se devuelva un error o puede pasarse por alto la petición.

    Cuando se crea una tabla base remota utilizando un DDL transparente, se crea automáticamente un apodo para esta tabla base remota.

  • Se puede definir una restricción de referencia de forma que la tabla padre o la tabla dependiente forme parte de una jerarquía de tablas. En este caso, el efecto de la restricción de referencia depende del tipo de sentencia:
    1. Para una sentencia INSERT, UPDATE o DELETE, la restricción garantiza que para cada fila de la tabla dependiente, o para cualquiera de sus subtablas, que tenga una clave foránea no de nulos, existe una fila en la tabla padre, o en una de sus subtablas, con una clave padre coincidente. Esta regla se aplica a cualquier acción que afecte a una fila de cualquier tabla, independientemente de cómo se inicie dicha acción.
    2. Para una sentencia DROP TABLE:
      • Si la tabla descartada es la tabla padre o la tabla dependiente, se descarta la restricción.
      • Si una supertabla de la tabla descartada es la tabla padre, las filas de la tabla descartada se tienen en cuenta para ser suprimidas en la supertabla. Se comprueba la restricción de referencia y se invoca su norma de supresión para cada una de las filas suprimidas.
      • Si una supertabla de la tabla descartada es la tabla dependiente, la restricción no se comprueba. La supresión de una fila de una tabla dependiente no puede producir una violación de una restricción de referencia.
  • Privilegios: cuando se crea una tabla, el definidor de la tabla recibe el privilegio CONTROL. Cuando se crea una subtabla, el definidor de la tabla otorga automáticamente para la subtabla el privilegio SELECT que cada usuario o grupo tiene sobre la supertabla inmediata.
  • Límite del tamaño de fila: El número máximo de bytes permitido en la fila de una tabla de organización en filas depende del tamaño de la página del espacio de tabla en el cual se crea la tabla (tablspace-name1). La tabla siguiente muestra el límite del tamaño de fila y el límite del número de columnas asociados a cada tamaño de página del espacio de tablas.
    Tabla 3. Límites para Número de columnas y tamaño de fila en cada tamaño de página de espacio de tabla (tablas de organización en filas)
    Tamaño de página Límite del tamaño de fila Límite de la cuenta de columnas
    4K 4.005 500
    8K 8.101 1.012
    16K 16.293 1.012
    32K 32.677 1.012
    El número real de columnas de una tabla de organización en filas se puede limitar aún más mediante la siguiente fórmula:
       Columnas en total * 8 + Número de columnas LOB * 12 <=
         Límite del tamaño de fila para el tamaño de página

    Una tabla organizado en columnas puede tener un máximo de 1012 columnas, sin importar el tamaño de la página, en donde los conteos de bytes de las columnas no pueden ser mayores de 32.677.

  • Número total de bytes: la tabla siguiente contiene el número total de bytes de las columnas por tipo de datos. Esta tabla se utiliza para calcular el tamaño de fila. El número total de bytes depende de si se ha activado VALUE COMPRESSION. Cuando VALUE COMPRESSION no se ha activado, el número total de bytes también depende de si la columna puede contener nulos. El número total de bytes mostrados se aplica cuando la compresión de filas no está habilitada. Si la compresión de filas está activa, el número total de bytes utilizados por una fila generalmente será inferior que los utilizados para una versión no comprimida de la fila; nunca será superior.

    Si una tabla se basa en un tipo con estructura, se reservan 4 bytes de sobrecarga adicionales para identificar filas de subtablas, independientemente de que las subtablas se hayan definido o no. Las columnas de subtabla adicionales deben considerarse como columnas con posibilidad de nulos para la obtención del número total de bytes, incluso si se han definido como columnas sin posibilidad de nulos.

    Tabla 4. Número total de bytes de las columnas por tipo de datos
    Tipo de datos VALUE COMPRESSION se ha activado1 VALUE COMPRESSION no se ha activado
    La columna puede contener nulos La columna no puede contener nulos
    SMALLINT 4 3 2
    INTEGER 6 5 4
    BIGINT 10 9 8
    REAL 6 5 4
    DOUBLE 10 9 8
    DECIMAL La parte integral de (p/2)+3, donde p es la precisión La parte integral de (p/2)+2, donde p es la precisión La parte integral de (p/2)+1, donde p es la precisión
    DECFLOAT(16) 10 9 8
    DECFLOAT(34) 18 17 16
    CHAR (n) n+2 n+1 n
    VARCHAR (n) n+2 n+5 (dentro de una tabla) n+4 (dentro de una tabla)
    LONG VARCHAR2 22 25 24
    BINARY n+2 n+1 n
    VARBINARY n+2 n+5 (dentro de una tabla) n+4 (dentro de una tabla)
    GRAPHIC (n) n*2+2 n*2+1 n*2
    VARGRAPHIC (n) n*2+2 n*2+5 (dentro de una tabla) n*2+4 (dentro de una tabla)
    LONG VARGRAPHIC2 22 25 24
    DATE 6 5 4
    TIME 5 4 3
    TIMESTAMP(p) La parte integral de (p+1)/2+9, donde p es la precisión de segundos fraccionarios La parte integral de (p+1)/2+8, donde p es la precisión de segundos fraccionarios La parte integral de (p+1)/2+7, donde p es la precisión de segundos fraccionarios
    BOOLEAN 3 2 1
    XML (sin INLINE LENGTH especificado) 82 85 84
    XML (con INLINE LENGTH especificado) INLINE LENGTH +2 INLINE LENGTH +4 INLINE LENGTH +3
    Longitud máxima de LOB3 1.024 (sin INLINE LENGTH especificado) 70 73 72
    Longitud máxima de LOB 8.192 (sin INLINE LENGTH especificado) 94 97 96
    Longitud máxima de LOB 65.536 (sin INLINE LENGTH especificado) 118 121 120
    Longitud máxima de LOB 524.000 (sin INLINE LENGTH especificado) 142 145 144
    Longitud máxima de LOB 4.190.000 (sin INLINE LENGTH especificado) 166 169 168
    Longitud máxima de LOB 134.000.000 (sin INLINE LENGTH especificado) 198 201 200
    Longitud máxima de LOB 536.000.000 (sin INLINE LENGTH especificado) 222 225 224
    Longitud máxima de LOB 1.070.000.000 (sin INLINE LENGTH especificado) 254 257 256
    Longitud máxima de LOB 1.470.000.000 (sin INLINE LENGTH especificado) 278 281 280
    Longitud máxima de LOB 2.147.483.647 (sin INLINE LENGTH especificado) 314 317 316
    LOB sin INLINE LENGTH especificado INLINE LENGTH +2 INLINE LENGTH +5 INLINE LENGTH +4

    1 Existen 2 bytes adicionales de almacenamiento utilizados por cada fila cuando VALUE COMPRESSION se ha activado para esa fila.

    2 Los tipos de datos LONG VARCHAR y LONG VARGRAPHIC están obsoletos y se pueden eliminar en un release futuro.

    3 Cada valor de LOB tiene un descriptor de LOB en el registro base que apunta a la ubicación del valor real. El tamaño de dicho descriptor varía en función de la longitud máxima que se haya definido para la columna. Cuando no se especifica INLINE LENGTH para una columna LOB, se utiliza el tamaño del descriptor como valor de longitud en línea predeterminado.

    Al determinar los recuentos de bytes de las columnas LOB, se deben considerar bytes adicionales cuando una columna LOB forma parte de una tabla temporal de sistema que se puede generar para cursores que no distinguen entre mayúsculas y minúsculas, cursores desplazables y otras consultas que requieren espacio temporal u ordenación de datos. El número de bytes adicionales necesarios puede ser como máximo de 70 bytes, en función de la consulta específica. Si la tabla base se acerca al máximo de longitud de filas del tamaño de página, es posible que se produzca un error al procesar una consulta si la tabla temporal del sistema no cabe en el espacio de tabla temporal más grande disponible en el sistema. Si hay disponible un espacio de tabla temporal de sistema existente que tenga un tamaño de página de 32 K, el soporte de tamaño de fila ampliado se utilizará siempre que sea posible.

    Para un tipo diferenciado, el número total de bytes equivale a la longitud del tipo de fuente del tipo diferenciado. Para un tipo de referencia, el número total de bytes equivale a la longitud del tipo de datos incorporado en el que se basa el tipo de referencia. Para un tipo estructurado, el número total de bytes equivale a INLINE LENGTH + 4. El valor INLINE LENGTH es el valor que se especifica (o que se calcula implícitamente) para la columna de la cláusula opciones-columna.

    Los tamaños de fila para las tablas de ejemplo siguiente parten de que no se especifica VALUE COMPRESSION:
    DEPARTMENT 63 (0 + 3 + 33 + 7 +  3 + 17)
    ORG        57 (0 + 3 + 19 + 2 + 15 + 18)
    Si VALUE COMPRESSION se especifica, los tamaños de fila pasarán a ser los siguientes:
    DEPARTMENT 69 (2 + 5 + 31 + 8 +  5 + 18)
    ORG        53 (2 + 4 + 16 + 4 + 12 + 15)
    Requisitos mínimos del tamaño de página para una tabla con tamaño de fila extendido: Cuando una fila de datos se inserta o actualiza en una tabla con soporte de tamaño de fila extendido y la longitud física de la fila de datos excede la longitud de registro máxima del espacio de tablas, se almacena un subconjunto de las columnas de serie de longitud variable (VARCHAR o VARGRAPHIC) como datos de objeto grande (LOB) fuera de la fila de datos. La columna de tabla en la fila base se reemplaza con un descriptor que tiene un tamaño de 24 bytes. Para acomodar el caso extremo en donde todos los datos VARCHAR o VARGRAPHIC se almacenan fuera de la fila de datos, el gestor de la base de datos calcular el tamaño de fila mínimo mediante el siguiente método:
    • Maneja cada columna VARCHAR(n) donde n > 24 como si fuera VARCHAR(24)
    • Maneja cada columna VARGRAPHIC(m) donde m > 12 como si fuera VARGRAPHIC(12
    El valor se calcula mediante la tabla Conteo de bytes de columnas por tipo de datos. El resultado calculado se utiliza entonces para hallar el límite inferior del tamaño de página en donde se puede crear la tabla con un tamaño de fila extendido.
  • Número total de bytes de almacenamiento: las tablas siguientes contienen el número total de bytes de almacenamiento de las columnas por tipo de datos para valores de datos.

    La primera tabla define los conjuntos de atributos. Se hace referencia a estos atributos en la segunda tabla, que contiene los detalles del número total de bytes para cada tipo de datos.

    El número total de bytes depende de si se ha activado VALUE COMPRESSION. Cuando VALUE COMPRESSION no se ha activado, el número total de bytes también depende de si la columna puede contener nulos. Los valores de la tabla representan la cantidad de almacenamiento (en bytes) que se utiliza para almacenar el valor. El número total de bytes mostrados se aplica cuando la compresión de filas no está habilitada. Si la compresión de filas está activa, el número total de bytes utilizados por una fila generalmente será inferior que los utilizados para una versión no comprimida de la fila; nunca será superior.

    Tabla 5. Definiciones de los criterios expuestos en la tabla relacionada
    Caso Valor de datos VALUE COMPRESSION Capacidad de nulos de columna
    A NULL No activo Posibilidad de nulos
    B NULL Activo 2 Posibilidad de nulos
    C Longitud cero Activo 2 No aplicable
    D Valor por omisión del sistema1 Activo 2 No aplicable
    E Resto de valores de datos No activo Posibilidad de nulos
    F Resto de valores de datos No activo Sin posibilidad de nulos
    G Resto de valores de datos Activo 2 No aplicable

    1 Cuando COMPRESS SYSTEM DEFAULT se ha especificado para la columna.

    2 Existen 2 bytes adicionales de almacenamiento utilizados por cada fila cuando VALUE COMPRESSION se ha activado para esa fila.

    Tabla 6. Número total de bytes de almacenamiento basado en el formato de fila, tipo de datos y valor de datos
    Tipo de datos Caso A Caso B Caso C Caso D Caso E Caso F Caso G
    SMALLINT 3 3 - 3 3 2 4
    INTEGER 5 3 - 3 5 4 6
    BIGINT 9 3 - 3 9 8 10
    REAL 5 3 - 3 5 4 6
    DOUBLE 9 3 - 3 9 8 10
    DECIMAL La parte integral de (p/2)+2, donde p es la precisión 3 - 3 La parte integral de (p/2)+2, donde p es la precisión La parte integral de (p/2)+1, donde p es la precisión La parte integral de (p/2)+3, donde p es la precisión
    DECFLOAT(16) 9 3 - 3 9 8 10
    DECFLOAT(34) 17 3 - 3 17 16 18
    CHAR (n) n+1 3 - 3 n+1 n n+2
    VARCHAR (n) 5 3 2 2 N+5, donde N es el número de bytes en los datos N+4, donde N es el número de bytes en los datos N+2, donde N es el número de bytes en los datos
    LONG VARCHAR2 5 3 2 2 25 24 22
    BINARY n+1 3 - 3 n+1 n n+2
    VARBINARY 5 3 2 2 N+5, donde N es el número de bytes en los datos N+4, donde N es el número de bytes en los datos N+2, donde N es el número de bytes en los datos
    GRAPHIC (n) n*2+1 3 - 3 n*2+1 n*2 n*2+2
    VARGRAPHIC (n) 5 3 2 2 N*2+5, donde N es el número de bytes en los datos N*2+4, donde N es el número de bytes en los datos N*2+2, donde N es el número de bytes en los datos
    LONG VARGRAPHIC2 5 3 2 2 25 24 22
    DATE 5 3 - - 5 4 6
    TIME 4 3 - - 4 3 5
    TIMESTAMP(p) La parte integral de (p+1)/2+8, donde p es la precisión de segundos fraccionarios 3 - - La parte integral de (p+1)/2+8, donde p es la precisión de segundos fraccionarios La parte integral de (p+1)/2+7, donde p es la precisión de segundos fraccionarios La parte integral de (p+1)/2+9, donde p es la precisión de segundos fraccionarios
    BOOLEAN 2 2 - 2 2 1 3
    Longitud máxima de LOB1 1024 5 3 2 2 (De 60 a 68)+5 (De 60 a 68)+4 (De 60 a 68)+2
    Longitud máxima de LOB 8192 5 3 2 2 (De 60 a 92)+5 (De 60 a 92)+4 (De 60 a 92)+2
    Longitud máxima de LOB 65.536 5 3 2 2 (De 60 a 116)+5 (De 60 a 116)+4 (De 60 a 116)+2
    Longitud máxima de LOB 524.000 5 3 2 2 (De 60 a 140)+5 (De 60 a 140)+4 (De 60 a 140)+2
    Longitud máxima de LOB 4.190.000 5 3 2 2 (De 60 a 164)+5 (De 60 a 164)+4 (De 60 a 164)+2
    Longitud máxima de LOB 134.000.000 5 3 2 2 (De 60 a 196)+5 (De 60 a 196)+4 (De 60 a 196)+2
    Longitud máxima de LOB 536.000.000 5 3 2 2 (De 60 a 220)+5 (De 60 a 220)+4 (De 60 a 220)+2
    Longitud máxima de LOB 1.070.000.000 5 3 2 2 (De 60 a 252)+5 (De 60 a 252)+4 (De 60 a 252)+2
    Longitud máxima de LOB 1.470.000.000 5 3 2 2 (De 60 a 276)+5 (De 60 a 276)+4 (De 60 a 276)+2
    Longitud máxima de LOB 2.147.483.647 5 3 2 2 (De 60 a 312)+5 (De 60 a 312)+4 (De 60 a 312)+2
    XML 5 3 - - 85 84 82

    1 Cuando COMPRESS SYSTEM DEFAULT se ha especificado para la columna.

    2 Los tipos de datos LONG VARCHAR y LONG VARGRAPHIC están obsoletos y se pueden eliminar en un release futuro.

  • Columnas de dimensión: Dado que cada valor diferenciado de una columna de dimensión se asigna a un bloque distinto de la tabla, puede que se desee aplicar un clúster en una expresión como, por ejemplo INTEGER(ORDER_DATE)/100. En este caso, puede definirse una columna generada para la tabla y, a continuación, esta columna generada puede utilizarse en la cláusula ORGANIZE BY DIMENSIONS. Si la expresión es monotónica respecto a una columna de la tabla, es posible que la base de datos utilice el índice de dimensiones para satisfacer los predicados de rango en esa columna. Por ejemplo, si la expresión es simplemente nombre-columna + alguna-constante-positiva, tiene lugar un incremento monotónico. Las funciones definidas por el usuario, determinadas funciones incorporadas y la utilización de más de una columna en una expresión impiden que tenga lugar la monotonicidad o su detección.

    Las dimensiones que implican columnas generadas cuyas expresiones son no monotónicas o cuya monotonicidad no puede determinarse, pueden seguir creándose, pero las consultas de rango, junto con los límites de porción o de célula, de estas dimensiones no reciben soporte. La igualdad y los predicados IN pueden procesarse por medio de porciones o células.

    Una columna generada será monotónica si se cumple lo siguiente respecto a la función generadora, fn:

    • Incremento monotónico.
      Para cada posible par de valores x1 y x2, si x2>x1, fn(x2)>fn(x1). Por ejemplo:
         SALARY - 10000
    • Reducción monotónica.
      Para cada posible par de valores x1 y x2, si x2>x1, fn(x2)<fn(x1). Por ejemplo:
         -SALARY
    • Sin reducción monotónica.
      Para cada posible par de valores x1 y x2, si x2>x1, fn(x2)>=fn(x1). Por ejemplo:
         SALARY/1000
    • Sin incremento monotónico.
      Para cada posible par de valores x1 y x2, si x2>x1, fn(x2)<=fn(x1). Por ejemplo:
         -SALARY/1000

    La expresión PRICE*DISCOUNT no es monotónica, porque implica a más de una columna de la tabla.

  • Tablas agrupadas por clústeres de rangos: La organización de una tabla por secuencia de clave es efectiva para determinados tipos de tablas. La tabla debe tener una clave de entero que esté estrechamente agrupada (densa) sobre el rango de valores posibles. Las columnas de esta clave de entero no se deben poder anular y la clave debe ser lógicamente la clave principal de la tabla. La organización de una tabla agrupada por clústeres de rangos precede la necesidad de disponer de un objeto de índice exclusivo separado, proporcionando acceso directo a la fila para un valor de clave especificado o un rango de filas para un rango especificado de valores de clave. La asignación de todo el espacio correspondiente a un conjunto completo de filas en el rango de secuencia de clave definido se realiza durante la creación de la tabla y se debe tener en cuenta al definir una tabla agrupada por clústeres de rangos. El espacio de almacenamiento no está disponible para ningún otro uso, aunque las filas estén inicialmente marcadas para su supresión. Si el rango completo de secuencia de claves se va a llenar con datos únicamente durante un largo periodo de tiempo, es posible que esta organización no sea una elección adecuada.
  • Una tabla puede tener como máximo una política de seguridad.
  • Se aplican las restricciones de integridad referencial definidas en tablas protegidas. En este caso las violaciones de restricciones pueden ser difíciles de depurar, porque el gestor de bases de datos no le permitirá ver qué fila ha producido una violación si no tiene la etiqueta de seguridad o las credenciales de exenciones adecuadas.
  • Al definir el orden de las columnas de una tabla, las columnas actualizadas con frecuencia deben colocarse al final de la definición para reducir la cantidad de datos anotados cronológicamente. Esto incluye las columnas ROW CHANGE TIMESTAMP. Se garantiza que las columnas ROW CHANGE TIMESTAMP se actualizarán con cada actualización de fila.
  • Seguridad y duplicación: La duplicación puede hacer que las filas de datos de una tabla protegida se dupliquen fuera de la base de datos. Se debe tener cuidado al configurar la duplicación para una tabla protegida, porque los datos que están fuera de la base de datos no se pueden proteger.
  • Consideraciones para un entorno con varias particiones:
    • Si las opciones CACHE y NO ORDER están en vigor, puede haber varias memorias caché activas simultáneamente. Esto puede suceder en cualquier miembro de una . Las solicitudes para las siguientes asignaciones de valor de miembros puede que no den como resultado la asignación de valores en un orden numérico estricto. Por ejemplo, supongamos que en un entorno de de varias particiones, DB1A y DB1B de miembros están utilizando la misma secuencia y que DB1A obtiene los valores de memoria caché 1 a 20 y DB1B obtiene los valores de memoria caché 21 a 40. En este escenario, si DB1A ha solicitado primero el siguiente valor y, a continuación, lo ha solicitado DB1B y después DB1A lo ha solicitado de nuevo, el orden real de los valores asignados será 1,21,2. Por lo tanto, para garantizar que los números de secuencia se generen en un orden numérico estricto entre varios miembros que utilicen la misma secuencia de forma simultánea, especifique la opción ORDER.
  • Consideraciones sobre el control de acceso a filas y columnas (RCAC): las cláusulas ACTIVATE ROW ACCESS CONTROL, ACTIVATE COLUMN ACCESS CONTROL, DEACTIVATE ROW ACCESS CONTROL y DEACTIVATE COLUMN ACCESS CONTROL no reciben soporte. Utilice la sentencia ALTER TABLE para activar o desactivar el control de acceso de nivel de fila o columna en una tabla.
  • Consideraciones para las tablas organizado en columnas: Cree tablas organizado en columnas solamente en espacios de tabla de almacenamiento automático.
    Las siguientes opciones no se soportan para las tablas organizado en columnas (las opciones subrayadas son los valores predeterminados). Sin embargo, se pueden especificar para las tablas de organización en filas que se utilizarán en la misma base de datos y cargas de trabajo que las tablas organizado en columnas.
    • ORGANIZE BY {DIMENSIONS | KEY SEQUENCE | INSERT TIME}
    • DATA CAPTURE CHANGES
    • VALUE COMPRESSION
    • COMPRESS YES [ADAPTIVE | STATIC]
    • COMPRESS NO
    • PARTITION BY RANGE
    • PERIOD {BUSINESS_TIME | SYSTEM_TIME}
    • CREATE TABLE OF <nombre1-tipo> (para crear una tabla con tipo)
    • PROPAGATE IMMEDIATE
    • CHECK
    • DETERMINED BY

    Una sentencia para crear una columna de una tabla organizado en columnas puede especificar una cláusula generada con el formato GENERATED AS (expresión-generación) o GENERATED AS IDENTITY. Sin emabrgo, no puede especificar otras cláusulas generadas como GENERATED AS ROW BEGIN/END o GENERATED AS TRANSACTION START ID.

    Las columnas de tipo estructurado no se soportan.

    Las columnas de una tabla organizado en columnas deben tener uno de los siguientes tipos de datos:
    • SMALLINT
    • INTEGER
    • BIGINT
    • DECIMAL
    • REAL
    • DOUBLE
    • DECFLOAT
    • CHAR (incluyendo FOR BIT DATA)
    • VARCHAR (incluyendo FOR BIT DATA)
    • BINARY
    • VARBINARY
    • GRAPHIC
    • VARGRAPHIC
    • DATE
    • TIME
    • TIMESTAMP (n)
    • BOOLEAN
    • CLOB
    • BLOB
    • DBCLOB
    • NCLOB
    • Tipos distintos de un tipo de datos soportado

Alternativas de sintaxis

Las alternativas siguientes no son estándar. Se soportan por motivos de compatibilidad con versiones del producto anteriores o con otros productos de base de datos.
  • La sintaxis siguiente se acepta como comportamiento por omisión:
    • IN nombre-base-de-datos.nombre-espacio-tablas
    • IN DATABASE nombre-base-datos
    • FOR MIXED DATA
    • FOR SBCS DATA
  • Se puede especificar PART en lugar de PARTITION.
  • Se puede especificar PARTITION número-partición en lugar de PARTITION nombre-partición. Un número-partición no puede identificar una partición que no se haya especificado anteriormente en la sentencia CREATE TABLE. Si no se especifica un número-partición, el gestor de bases de datos genera un número de partición exclusivo.
  • Se puede especificar VALUES en lugar de ENDING AT
  • La palabra clave CONSTRAINT puede omitirse en una definición-columna que defina a una cláusula de referencias
  • El nombre-restricción puede especificarse a continuación de FOREIGN KEY (sin la palabra clave CONSTRAINT)
  • SUMMARY puede especificarse opcionalmente tras CREATE
  • DEFINITION ONLY puede especificarse en lugar de WITH NO DATA.
  • PARTITIONING KEY puede especificarse en lugar de DISTRIBUTE BY.
  • DISTRIBUTE ON puede especificarse en lugar de DISTRIBUTE BY cuando va seguido de la opción HASH, pero no cuando va seguido de la opción REPLICATION.
  • Se puede especificar REPLICATED en lugar de DISTRIBUTE BY REPLICATION
  • Puede utilizarse una coma para separar varias opciones en la cláusula opciones-identidad
  • Se puede especificar NOMINVALUE, NOMAXVALUE, NOCYCLE, NOCACHE y NOORDER en lugar de NO MINVALUE, NO MAXVALUE, NO CYCLE, NO CACHE y NO ORDER, respectivamente.
  • ADD puede especificarse antes de nombre-opción-tabla constante-serie.
  • Cuando se especifica el valor del registro especial de fecha y hora, se puede especificar NOW() en lugar de CURRENT_TIMESTAMP.

Ejemplos

  1. Cree la tabla TDEPT en el espacio de tabla DEPARTX. DEPTNO, DEPTNAME, MGRNO y ADMRDEPT son nombres de columnas. CHAR significa que la columna contendrá datos de caracteres. NOT NULL significa que la columna no puede contener ningún valor nulo. VARCHAR significa que la columna contendrá datos de caracteres de longitud variable. La clave primaria es la columna DEPTNO.
       CREATE TABLE TDEPT
         (DEPTNO   CHAR(3)     NOT NULL,
          DEPTNAME VARCHAR(36) NOT NULL,
          MGRNO      CHAR(6),
          ADMRDEPT CHAR(3)     NOT NULL,
          PRIMARY KEY(DEPTNO))
       IN DEPARTX
  2. Cree la tabla PROJ en el espacio de tabla SCHED. PROJNO, PROJNAME, DEPTNO, RESPEMP, PRSTAFF, PRSTDATE, PRENDATE y MAJPROJ son nombres de columnas. CHAR significa que la columna contendrá datos de caracteres. DECIMAL significa que la columna contendrá datos decimales empaquetados. 5,2 significa lo siguiente: 5 indica el número de dígitos decimales y 2 indica el número de dígitos a la derecha de la coma decimal. NOT NULL significa que la columna no puede contener ningún valor nulo. VARCHAR significa que la columna contendrá datos de caracteres de longitud variable. DATE significa que la columna contendrá información de fecha en un formato de tres partes (año, mes y día).
       CREATE TABLE PROJ
         (PROJNO   CHAR(6)      NOT NULL,
          PROJNAME VARCHAR(24)  NOT NULL,
          DEPTNO   CHAR(3)      NOT NULL,
          RESPEMP  CHAR(6)      NOT NULL,
          PRSTAFF  DECIMAL(5,2)         ,
          PRSTDATE DATE                 ,
          PRENDATE DATE                 ,
          MAJPROJ  CHAR(6)      NOT NULL)
       IN SCHED
  3. Cree una tabla llamada EMPLOYEE_SALARY donde cualquier salario desconocido se considere 0. No se especifica ningún espacio de tabla, para que la tabla se cree en un espacio de tabla seleccionado por el sistema basándose en las normas descritas para la cláusula nombre-espacio-tabla IN.
       CREATE TABLE EMPLOYEE_SALARY
         (DEPTNO   CHAR(3)     NOT NULL,
          DEPTNAME VARCHAR(36) NOT NULL,
          EMPNO    CHAR(6)      NOT NULL,
          SALARY   DECIMAL(9,2) NOT NULL WITH DEFAULT)
  4. Cree tipos diferenciados para el total de salario y millas y utilícelos para las columnas de una tabla creada en el espacio de tabla predeterminado. En una sentencia de SQL dinámico, suponga que el registro especial CURRENT SCHEMA es JOHNDOE y el registro especial CURRENT PATH tiene el valor predeterminado (SYSIBM, SYSFUN, JOHNDOE).
    Si no se especifica un valor para SALARY, deberá establecerse en 0 y si no se especifica un valor para LIVING_DIST, deberá establecerse en 1 milla (1,6 Km).
       CREATE TYPE JOHNDOE.T_SALARY AS INTEGER WITH COMPARISONS
    
       CREATE TYPE JOHNDOE.MILES  AS FLOAT WITH COMPARISONS
    
       CREATE TABLE EMPLOYEE
         (ID          INTEGER NOT NULL,
          NAME   CHAR (30),
          SALARY      T_SALARY NOT NULL WITH DEFAULT,
          LIVING_DIST MILES    DEFAULT MILES(1) )
  5. Cree tipos diferenciados para imagen y audio y utilícelos para las columnas de una tabla. No se ha especificado ningún espacio de tablas para que la tabla se cree en un espacio de tablas que el sistema selecciona basándose en las normas que se describen para la cláusula IN nombre-espacio-tablas. Suponga que el registro especial CURRENT PATH tiene el valor por omisión.
       CREATE TYPE IMAGE AS BLOB (10M)
       
       CREATE TYPE AUDIO AS BLOB (1G)
    
       CREATE TABLE PERSON
         (SSN    INTEGER NOT NULL,
          NAME   CHAR (30),
          VOICE  AUDIO,
          PHOTO  IMAGE)
  6. Cree la tabla EMPLOYEE en el espacio de tabla HUMRES. Las restricciones definidas en la tabla son las siguientes:
    • Los valores del número de departamento deben estar comprendidos entre 10 y 100.
    • El trabajo de un empleado sólo puede ser Sales, Mgr o Clerk.
    • Aquellos empleados que lleven en la compañía desde 1986 deben ganar más de 40.500 dólares.
    Nota: Si las columnas incluidas en las restricciones de comprobación pueden contener valores nulos, también podrían ser NULL.
       CREATE TABLE EMPLOYEE
         (ID          SMALLINT NOT NULL,
          NAME        VARCHAR(9),
          DEPT        SMALLINT CHECK (DEPT BETWEEN 10 AND 100),
          JOB         CHAR(5) CHECK (JOB IN ('Sales','Mgr','Clerk')),
          HIREDATE    DATE,
          SALARY      DECIMAL(7,2),
          COMM        DECIMAL(7,2),
          PRIMARY KEY (ID),
          CONSTRAINT  YEARSAL CHECK (YEAR(HIREDATE) > 1986
            OR SALARY > 40500)
         )
         IN HUMRES
  7. Cree una tabla que esté completamente contenida en el espacio de tabla PAYROLL.
       CREATE TABLE EMPLOYEE .....
         IN PAYROLL
  8. Cree una tabla con la parte de datos en ACCOUNTING y la parte de índice en ACCOUNT_IDX.
       CREATE TABLE SALARY.....
         IN ACCOUNTING INDEX IN ACCOUNT_IDX
  9. Cree una tabla y anote cronológicamente los cambios SQL en el formato predeterminado.
       CREATE TABLE SALARY1 .....
    o
       CREATE TABLE SALARY1 .....
         DATA CAPTURE NONE
  10. Cree una tabla y anote cronológicamente los cambios SQL en un formato expandido.
       CREATE TABLE SALARY2 .....
         DATA CAPTURE CHANGES
  11. Cree una tabla EMP_ACT en el espacio de tabla SCHED. EMPNO, PROJNO, ACTNO, EMPTIME, EMSTDATE y EMENDATE son nombres de columna. Las restricciones definidas en la tabla son:
    • El valor para el conjunto de columnas EMPNO, PROJNO y ACTNO en cualquier fila debe ser exclusivo.
    • El valor de PROJNO debe coincidir con un valor existente para la columna PROJNO de la tabla PROJECT y, si el proyecto se suprime, todas las filas que hacen referencia al proyecto en EMP_ACT también deben suprimirse.
       CREATE TABLE EMP_ACT
         (EMPNO       CHAR(6) NOT NULL,
          PROJNO      CHAR(6) NOT NULL,
          ACTNO       SMALLINT NOT NULL,
          EMPTIME     DECIMAL(5,2),
          EMSTDATE    DATE,
          EMENDATE    DATE,
          CONSTRAINT EMP_ACT_UNIQ UNIQUE (EMPNO,PROJNO,ACTNO),
          CONSTRAINT FK_ACT_PROJ FOREIGN KEY (PROJNO)
                                 REFERENCES PROJECT (PROJNO) ON DELETE CASCADE
         )
         IN SCHED
    Se crea automáticamente un índice exclusivo denominado EMP_ACT_UNIQ en el mismo esquema para aplicar la restricción de unicidad.
  12. Cree una tabla que vaya a contener información sobre goles famosos para el museo conmemorativo de hockey sobre hielo. La tabla listará información sobre el jugador que marcó el gol, el portero contra el que lo marcó, la fecha, así como una descripción. La columna de descripción puede contener nulos.
       CREATE TABLE HOCKEY_GOALS
         ( BY_PLAYER      VARCHAR(30)   NOT NULL,
           BY_TEAM        VARCHAR(30)   NOT NULL,
           AGAINST_PLAYER VARCHAR(30)   NOT NULL,
           AGAINST_TEAM   VARCHAR(30)   NOT NULL,
           DATE_OF_GOAL   DATE          NOT NULL,
           DESCRIPTION    CLOB(5000) )
  13. Supongamos que se necesita una tabla de excepción para la tabla EMPLOYEE. Se puede crear una utilizando la sentencia siguiente.
       CREATE TABLE EXCEPTION_EMPLOYEE AS
         (SELECT EMPLOYEE.*,
           CURRENT TIMESTAMP AS TIMESTAMP,
           CAST ('' AS CLOB(32K)) AS MSG
         FROM EMPLOYEE
         ) WITH NO DATA
  14. Supongamos los espacios de tabla siguientes con los atributos indicados:
       TBSPACE            PAGESIZE    USER   USERAUTH
       ------------------ ----------- ------ --------
       DEPT4K                    4096 BOBBY  S
       PUBLIC4K                  4096 PUBLIC S
       DEPT8K                    8192 BOBBY  S
       DEPT8K                    8192 RICK   S
       PUBLIC8K                  8192 PUBLIC S
    • Si RICK crea la tabla siguiente, se colocará en el espacio de tablas PUBLIC4K, pues el número de bytes es menor que 4005; pero si BOBBY crea la misma tabla, se colocará en el espacio de tablas DEPT4K, pues BOBBY tiene un privilegio USE otorgado explícitamente:
         CREATE TABLE DOCUMENTS
           (SUMMARY    VARCHAR(1000),
            REPORT     VARCHAR(2000))
    • Si BOBBY crea la tabla siguiente, se colocará en el espacio de tablas DEPT8K, pues el número de bytes es mayor que 4005, y BOBBY tiene un privilegio USE otorgado explícitamente. En cambio, si DUNCAN crea la misma tabla, se colocará en el espacio de tablas PUBLIC8K, pues DUNCAN no tiene ningún privilegio específico:
         CREATE TABLE CURRICULUM
           (SUMMARY    VARCHAR(1000),
            REPORT     VARCHAR(2000),
            EXERCISES  VARCHAR(1500))
  15. Cree una tabla con una columna LEAD definida con el tipo estructurado EMP. Especifique 300 bytes para el valor INLINE LENGTH de la columna LEAD, lo cual significa que cualquier instancia de LEAD que no pueda caber dentro de los 300 bytes se almacenará fuera de la tabla (separadamente de la fila de la tabla base, de forma similar a como se manejan los valores LOB).
       CREATE TABLE PROJECTS (PID INTEGER,
         LEAD EMP INLINE LENGTH 300,
         STARTDATE DATE,
                   ...)
  16. Cree una tabla DEPT con cinco columnas denominadas DEPTNO, DEPTNAME, MGRNO, ADMRDEPT y LOCATION. La columna DEPT debe definirse como una columna IDENTITY para que se genere siempre un valor para ella. Los valores de la columna DEPT deben comenzar en 500 y aumentar según incrementos de 1.
       CREATE TABLE DEPT
         (DEPTNO     SMALLINT      NOT NULL
                        GENERATED ALWAYS AS IDENTITY
                          (START WITH 500, INCREMENT BY 1),
          DEPTNAME VARCHAR(36) NOT NULL,
          MGRNO      CHAR(6),
          ADMRDEPT   SMALLINT      NOT NULL,
          LOCATION   CHAR(30))
  17. Cree una tabla SALES que se distribuya en la columna YEAR y tenga dimensiones en las columnas REGION y YEAR. Los datos se distribuirán por las particiones de base de datos según los valores de generación aleatoria de la columna YEAR. En cada partición de base de datos, los datos se organizarán en extensiones basadas en combinaciones exclusivas de los valores de las columnas REGION y YEAR de esas particiones de base de datos.
       CREATE TABLE SALES
         (CUSTOMER            VARCHAR(80),
          REGION              CHAR(5),
          YEAR       INTEGER)
       DISTRIBUTE BY HASH (YEAR)
       ORGANIZE BY DIMENSIONS (REGION, YEAR)
  18. Cree una tabla SALES con una columna PURCHASEYEARMONTH que se genera a partir de la columna PURCHASEDATE. Utilice una expresión para crear una columna que sea monotónica con respecto a la columna PURCHASEDATE original y, por lo tanto, que sea adecuada para utilizarla como dimensión. La tabla se distribuye en la columna REGION y cada partición de base de datos se organiza en extensiones según la columna PURCHASEYEARMONTH; es decir, las distintas regiones estarán en particiones de base de datos diferentes y los distintos meses de compras pertenecerán a diferentes celdas (o conjuntos de extensiones) de esas particiones de base de datos.
       CREATE TABLE SALES
         (CUSTOMER            VARCHAR(80),
          REGION              CHAR(5),
          PURCHASEDATE        DATE,
          PURCHASEYEARMONTH   INTEGER
                                 GENERATED ALWAYS AS (INTEGER(PURCHASEDATE)/100))
       DISTRIBUTE BY HASH (REGION)
       ORGANIZE BY DIMENSIONS (PURCHASEYEARMONTH)
  19. Cree una tabla CUSTOMER con una columna CUSTOMERNUMDIM que se genera a partir de la columna CUSTOMERNUM. Utilice una expresión para crear una columna que sea monotónica con respecto a la columna CUSTOMERNUM original y, por lo tanto, que sea adecuada para utilizarla como dimensión. La tabla se organiza en celdas según la columna CUSTOMERNUMDIM, de modo que hay una celda diferente en la tabla para cada 50 clientes. Si se crease un índice exclusivo en CUSTOMERNUM, los números de cliente se contendrían en clústeres de tal manera que, cada conjunto de 50 valores se encontraría en un conjunto de extensiones en particular de la tabla.
       CREATE TABLE CUSTOMER
         (CUSTOMERNUM      INTEGER,
          CUSTOMERNAME     VARCHAR(80),
          ADDRESS          VARCHAR(200),
          CITY             VARCHAR(50),
          COUNTRY          VARCHAR(50),
          CODE             VARCHAR(15),
          CUSTOMERNUMDIM   INTEGER
                              GENERATED ALWAYS AS (CUSTOMERNUM/50))
       ORGANIZE BY DIMENSIONS (CUSTOMERNUMDIM)
  20. Cree una tabla base remota denominada EMPLOYEE en el servidor Oracle, ORASERVER. También se creará automáticamente un apodo, denominado EMPLOYEE, que hará referencia a esta tabla base remota que acaba de crear.
       CREATE TABLE EMPLOYEE
         (EMP_NO       CHAR(6)       NOT NULL,
          FIRST_NAME   VARCHAR(12)   NOT NULL,
          MID_INT      CHAR(1)       NOT NULL,
          LAST_NAME    VARCHAR(15)   NOT NULL,
          HIRE_DATE    DATE,
          JOB          CHAR(8),
          SALARY       DECIMAL(9,2),
          PRIMARY KEY (EMP_NO))
       OPTIONS
         (REMOTE_SERVER 'ORASERVER',
          REMOTE_SCHEMA 'J15USER1',
          REMOTE_TABNAME 'EMPLOYEE')

    Las sentencias CREATE TABLE siguientes muestran cómo especificar el nombre de tabla, o el nombre de tabla y el nombre de tabla base remota explícito, para obtener las mayúsculas o minúsculas que se requieran. El identificador en minúsculas, employee, se utiliza para ilustrar la conversión implícita de identificadores.

    Cree una tabla base remota denominada EMPLOYEE (en mayúsculas) en un servidor Informix y cree un apodo denominado EMPLOYEE (en mayúsculas) en esa tabla:
       CREATE TABLE employee
         (EMP_NO CHAR(6) NOT NULL,
          ...)
       OPTIONS
         (REMOTE_SERVER 'INFX_SERVER')
    Si no se ha especificado la opción REMOTE_TABNAME y el nombre-tabla no está delimitado, el nombre de tabla base remota aparecerá en letras mayúsculas, incluso si la fuente de datos remota almacena los nombres en minúsculas.
    Cree una tabla base remota denominada employee (en minúsculas) en un servidor Informix y cree un apodo denominado EMPLOYEE (en mayúsculas) en esa tabla:
       CREATE TABLE employee
         (EMP_NO CHAR(6) NOT NULL,
          ...)
       OPTIONS
         (REMOTE_SERVER 'INFX_SERVER',
          REMOTE_TABNAME 'employee')
    Al crear una tabla en una fuente de datos remota que da soporte a los identificadores delimitados, utilice la opción REMOTE_TABNAME y una constante de serie de caracteres que especifique el nombre de tabla en mayúsculas o minúsculas, según se requiera.
    Cree una tabla base remota denominada employee (en minúsculas) en un servidor Informix y cree un apodo denominado employee (en minúsculas) en esa tabla:
       CREATE TABLE "employee"
         (EMP_NO CHAR(6) NOT NULL,
          ...)
       OPTIONS
         (REMOTE_SERVER 'INFX_SERVER')
    Si no se ha especificado la opción REMOTE_TABNAME y el nombre-tabla está delimitado, el nombre de tabla base remota será idéntico a nombre-tabla.
  21. Cree una tabla agrupada en clúster de rango que se pueda utilizar para localizar un estudiante utilizando un ID de estudiante. Para cada registro de estudiante, incluya el ID de escuela, ID de programa, número de estudiante, ID de estudiante, nombre de estudiante, apellido de estudiante y promedio de puntos del curso de estudiante (GPA).
       CREATE TABLE STUDENTS
         (SCHOOL_ID     INTEGER   NOT NULL,
          PROGRAM_ID    INTEGER   NOT NULL,
          STUDENT_NUM   INTEGER   NOT NULL,
          STUDENT_ID    INTEGER   NOT NULL,
          FIRST_NAME    CHAR(30),
          LAST_NAME     CHAR(30),
          GPA           DOUBLE)
       ORGANIZE BY KEY SEQUENCE
         (STUDENT_ID
           STARTING FROM 1
           ENDING AT 1000000)
         DISALLOW OVERFLOW
    El tamaño de cada registro es la suma de las columnas, más alineación, más cabecera de fila de tabla agrupada por clústeres de rangos. En este caso, el tamaño de fila es de 98 bytes: 4 + 4 + 4 + 4 + 30 + 30 + 8 + 3 (para columnas con posibilidad de nulos) + 1 (para alineación) + 10 (para la cabecera). Con un tamaño de página de 4 KB (o 4096 bytes), después de contabilizar la actividad general de página, hay 4038 bytes disponibles, lo que constituye espacio suficiente para 41 registros por página. Si se permite 1 millón de registros de estudiantes, se necesitan (1 millón dividido por 41 registros por página) 24.391 páginas. Con dos páginas adicionales para la sobrecarga de tabla, el número final de páginas de 4 KB que se asignan cuando se crea la tabla es 24.393.
  22. Cree una tabla denominada DEPARTMENT con una dependencia funcional que no tenga especificado ningún nombre de restricción.
       CREATE TABLE DEPARTMENT
         (DEPTNO     SMALLINT      NOT NULL,
          DEPTNAME VARCHAR(36) NOT NULL,
          MGRNO      CHAR(6),
          ADMRDEPT   SMALLINT      NOT NULL,
          LOCATION   CHAR(30),
         CHECK (DEPTNAME DETERMINED BY DEPTNO) NOT ENFORCED)
  23. Cree una tabla con filas protegidas.
       CREATE TABLE TOASTMASTERS
         (PERFORMANCE DB2SECURITYLABEL,
          POINTS      INTEGER,
          NAME        VARCHAR(50))
         SECURITY POLICY CONTRIBUTIONS
  24. Cree una tabla con columnas protegidas.
       CREATE TABLE TOASTMASTERS
         (PERFORMANCE CHAR(8),
          POINTS      INTEGER COLUMN SECURED WITH CLUBPOSITION,
          NAME        VARCHAR(50))
         SECURITY POLICY CONTRIBUTIONS
  25. Cree una tabla con filas y columnas protegidas.
       CREATE TABLE TOASTMASTERS
         (PERFORMANCE DB2SECURITYLABEL,
          POINTS      INTEGER COLUMN SECURED WITH CLUBPOSITION,
          NAME        VARCHAR(50))
         SECURITY POLICY CONTRIBUTIONS
  26. Los objetos grandes de una tabla particionada residen, de forma predeterminada, en el mismo espacio de tabla que los datos. Este uso por omisión se puede alterar temporalmente utilizando la cláusula LONG IN para especificar uno o varios espacios de tablas para los objetos grandes. Cree una tabla denominada DOCUMENTS cuyos datos de objetos grandes se almacenarán (de modo rotativo para cada partición de datos) en los espacios de tablas TBSP1 y TBSP2.
       CREATE TABLE DOCUMENTS
         (ID          INTEGER,
          CONTENTS CLOB)
         LONG IN TBSP1, TBSP2
         PARTITION BY RANGE (ID)
           (STARTING 1 ENDING 1000
            EVERY 100)
    De modo alternativo, puede emplear el formato largo de la sintaxis para identificar explícitamente un espacio de tablas grande para cada partición de datos. En este ejemplo, los datos CLOB de la primera partición de datos se colocan en LARGE_TBSP3, y los datos CLOB de las demás particiones de datos se reparten entre LARGE_TBSP1 y LARGE_TBSP2 de modo rotativo.
       CREATE TABLE DOCUMENTS
         (ID          INTEGER,
          CONTENTS CLOB)
         LONG IN LARGE_TBSP1, LARGE_TBSP2
         PARTITION BY RANGE (ID)
           (STARTING 1 ENDING 100
            IN TBSP1 LONG IN LARGE_TBSP3,
            STARTING 101 ENDING 1000
            EVERY 100)
  27. Cree una tabla particionada denominada ACCESSNUMBERS que tenga dos particiones de datos. La fila (10, NULL) debe colocarse en la primera partición y la fila (NULL, 100) debe colocarse en la segunda partición de datos (la última).
       CREATE TABLE ACCESSNUMBERS
         (AREA INTEGER,
          EXCHANGE INTEGER)
         PARTITION BY RANGE (AREA NULLS LAST, EXCHANGE NULLS FIRST)
           (STARTING (1,1) ENDING (10,100),
            STARTING (11,1) ENDING (MAXVALUE,MAXVALUE))
    Como los valores nulos de la segunda columna se clasificarían en primer lugar, la fila (11, NULL) se clasificaría debajo del límite inferior de la última partición de datos (11, 1); el intento de insertar esta fila devuelve un error. La fila (12, NULL) quedaría en la última partición de datos.
  28. Cree una tabla denominada RATIO que tenga una sola partición de datos y la columna de particionamiento PERCENT.
       CREATE TABLE RATIO
         (PERCENT INTEGER)
         PARTITION BY RANGE (PERCENT)
           (STARTING (MINVALUE) ENDING (MAXVALUE))
    Esta definición de tabla permite insertar cualquier valor entero para la columna PERCENT. La definición siguiente de la tabla RATIO permite insertar en la columna PERCENT cualquier valor entero entre 1 y 100, ambos incluidos.
       CREATE TABLE RATIO
         (PERCENT INTEGER)
         PARTITION BY RANGE (PERCENT)
           (STARTING 0 EXCLUSIVE ENDING 100 INCLUSIVE)
  29. Cree una tabla denominada MYDOCS con dos columnas: una es un identificador y la otra almacena documentos XML.
       CREATE TABLE MYDOCS
         (ID          INTEGER,
          DOC XML)
       IN HLTBSPACE
  30. Cree una tabla denominada NOTES con cuatro columnas, incluyendo una para almacenar notas basadas en XML.
       CREATE TABLE NOTES
         (ID          INTEGER,
          DESCRIPTION VARCHAR(255),
          CREATED     TIMESTAMP,
          NOTE        XML)
  31. Cree una tabla, EMP_INFO, que contiene un número de teléfono y una dirección para cada empleado. Incluya una columna ROW CHANGE TIMESTAMP en la tabla para seguir la modificación de la información del empleado.
    CREATE TABLE EMP_INFO
         (EMPNO       CHAR(6) NOT NULL,
          EMP_INFOCHANGE  TIMESTAMP NOT NULL GENERATED ALWAYS
           FOR EACH ROW ON UPDATE
           AS ROW CHANGE TIMESTAMP,
          EMP_ADDRESS     VARCHAR(300),
          EMP_PHONENO     CHAR(4),
          PRIMARY KEY (EMPNO) )
  32. Cree una tabla particionada denominada DOCUMENTS que tenga dos particiones de datos:
    • El objeto de datos de la primera partición reside en el espacio de tablas TBSP11. La partición de índice particionado de la partición reside en el espacio de tablas TBSP21. El objeto de datos XML reside en el espacio de tablas TBSP31.
    • El objeto de datos de la segunda partición reside en el espacio de tablas TBSP12. La partición de índice particionado de la partición reside en el espacio de tablas TBSP22. El objeto de datos XML reside en el espacio de tablas TBSP32.
    La cláusula INDEX IN de nivel de tabla no tiene ningún impacto en la selección de espacio de tablas para los índices particionados.
       CREATE TABLE DOCUMENTS
       (ID          INTEGER,
        CONTENTS  XML)  INDEX IN TBSPX
       PARTITION BY (ID NULLS LAST)
       (STARTING FROM 1 INCLUSIVE ENDING AT 100 INCLUSIVE
        IN TBSP11 INDEX IN TBSP21 LONG IN TBSP31,
        STARTING FROM 101 INCLUSIVE ENDING AT 200 INCLUSIVE
        IN TBSP21 INDEX IN TBSP22 LONG IN TBSP32)
  33. Cree una tabla particionada denominada SALES que tenga dos particiones de datos:
    • El objeto de datos de la primera partición reside en el espacio de tablas TBSP11. La partición de índice particionado de la partición reside en el espacio de tablas TBSP21.
    • El objeto de datos de la segunda partición reside en el espacio de tablas TBSP12. El objeto de índice particionado reside en el espacio de tablas TBSP22.
    La cláusula INDEX IN de nivel de tabla no tiene ningún impacto en la selección de espacio de tablas para los índices particionados.
       CREATE TABLE SALES
       (SID     INTEGER,
        AMOUNT  INTEGER)  INDEX IN TBSPX
       PARTITION BY RANGE (SID NULLS LAST)
       (STARTING FROM 1 INCLUSIVE ENDING AT 100 INCLUSIVE
        IN TBSP11 INDEX IN TBSP21,
        STARTING FROM 101 INCLUSIVE ENDING AT 200 INCLUSIVE
        IN TBSP12 INDEX IN TBSP22)
  34. Cree una tabla denominada BOOKS con cuatro columnas, incluida una denominada DATE_ADDED, que inserta la TIMESTAMP actual de forma predeterminada.
       CREATE TABLE BOOKS
         (ISBN_NUM   INTEGER,
          TITLE      VARCHAR(255),
          AUTHOR     VARCHAR(255),
          DATE_ADDED TIMESTAMP WITH DEFAULT CURRENT TIMESTAMP)
  35. Cree una tabla Unicode denominada STUDENTS en una base de datos que no es Unicode. Supongamos que la base de datos se ha creado con el conjunto de códigos 1252 y el territorio CA, y que el parámetro de configuración de base de datos ALT_COLLATE se ha actualizado a IDENTITY_16BIT.
       CREATE TABLE STUDENTS (
       		    STUDENTID INT NOT NULL, 
          		FAMILY_NAME VARCHAR(36) NOT NULL,
          		GIVEN_NAME VARCHAR(36) NOT NULL, 
          		PRIMARY KEY(STUDENTID)) 
       	  CCSID UNICODE
  36. Cree una tabla denominada TDEPT_TEMP, basada en la tabla TDEPT que se ha creado en el Ejemplo 1.
       CREATE TABLE TDEPT_TEMP LIKE TDEPT
    La tabla TDEPT_TEMP tendrá la misma definición que TDEPT, excepto que la clave primaria no se definirá y que se elegirá implícitamente un espacio de tablas por omisión.
  37. Cree una tabla de consulta materializada mantenida por el usuario organizada por columnas en la tabla organizada por columnas CDE.TDEPT.
       CREATE TABLE mqt_tdept AS
          (SELECT * FROM cde.tdept WHERE deptno BETWEEN 10 AND 20)
          DATA INITIALLY DEFERRED
          REFRESH DEFERRED
          MAINTAINED BY USER
          ORGANIZE BY COLUMN
  38. Etiquetas de seguridad de columna heredadas por una tabla de consulta materializada.
       CREATE SECURITY LABEL COMPONENT level_array ARRAY ['A', 'B', 'C']
    
       CREATE SECURITY POLICY P COMPONENTS level_array WITH DB2LBACRULES
    
       CREATE SECURITY LABEL P.A COMPONENT level_array 'A'
    
       CREATE SECURITY LABEL P.B COMPONENT level_array 'B'
    
       CREATE SECURITY LABEL P.C COMPONENT level_array 'C'
    
       CREATE TABLE t1 (c1 INT, c2 INT SECURED WITH B, c3 REAL SECURED WITH A)
          SECURITY POLICY P
    
       CREATE TABLE t2 (c4 REAL, c5 INT SECURED WITH C, c6 DB2SECURITYLABEL)
          SECURITY POLICY P
    Genere una tabla de consulta materializada
    CREATE TABLE m1 AS
       (SELECT  c1, c3, c5, c6 FROM  t1,t2 WHERE c2 !=100)
       DATA INITALLY DEFERRED REFRESH DEFERRED
    La etiqueta de seguridad de t1.c2 se utiliza para calcular las etiquetas de seguridad de todas las columnas de m1 porque aparece en los predicados de la consulta. Las propiedades de control de acceso basado en etiquetas de la tabla de consulta materializada m1 son:
    • Política de seguridad = P
    • Etiqueta de seguridad de la columna m1.c1 = P.B
    • Etiqueta de seguridad de la columna m1.c3 = P.A
    • Etiqueta de seguridad de la columna m1.c5 = P.B
    • Etiqueta de seguridad de la columna m1.c6 = P.B y también DB2SECURITYLABEL.
    Una tabla de etapas para una tabla de consulta materializada se protege con control de acceso basado en etiquetas. La tabla de etapas st1 se define como:
       CREATE TABLE st1 FOR m1 PROPAGATE IMMEDIATE
    Las propiedades de control de acceso basado en etiquetas de la tabla de etapas st1 son:
    • Política de seguridad = P
    • Etiqueta de seguridad de la columna st1.c1 = P.B
    • Etiqueta de seguridad de la columna st1.c3 = P.A
    • Etiqueta de seguridad de la columna st1.c5 = P.B
    • Etiqueta de seguridad de la columna st1.c6 = P.B y también DB2SECURITYLABEL.
  39. En el ejemplo siguiente se muestra cómo crear una tabla duplicada denominada T1_SHADOW que se basa en la tabla organizada por filas T1.

    1. Cree la tabla de base y defina una clave primaria. La clave primaria de la tabla base se debe incluir en la lista de selección de la tabla duplicada. La clave primaria de la tabla duplicada es necesaria para proporcionar una correlación de uno a uno para cada fila de la tabla base con la fila correspondiente de la tabla duplicada. La clave primaria también facilita el mantenimiento de la tabla duplicada.
      CREATE TABLE t1 (
        c1 INTEGER NOT NULL,
        c2 INTEGER
      ) ORGANIZE BY ROW;
      
      ALTER TABLE t1
        ADD CONSTRAINT t1_pk PRIMARY KEY(c1);
    2. Cree la tabla duplicada:
      CREATE TABLE t1_shadow AS
          (SELECT c1,c2 FROM t1)
        DATA INITIALLY DEFERRED
        REFRESH DEFERRED
        MAINTAINED BY REPLICATION
        ORGANIZE BY COLUMN;
      
      SET INTEGRITY FOR t1_shadow ALL IMMEDIATE UNCHECKED;
      
      ALTER TABLE t1_shadow
        ADD CONSTRAINT t1_shadow_pk PRIMARY KEY (c1);
  40. Cree una tabla llamada STRING_UNITS, que muestra las posibles especificaciones de unidad de serie.
    CREATE TABLE string_units
       (c1 VARCHAR(10),
        c2 VARCHAR(10 OCTETS),
        c3 VARCHAR(10 CODEUNITS32),
        c4 VARGRAPHIC(10),
        c5 VARGRAPHIC(10 CODEUNITS16),
        c6 VARGRAPHIC(10 CODEUNITS32))
    Las columnas tienen las siguientes unidades de serie:
    • c1 = OCTETS, si la unidad de serie de entorno es SYSTEM; CODEUNITS32 si la unidad de serie de entorno es CODEUNITS32
    • c2 = OCTETS
    • c3 = CODEUNITS32
    • c4 = CODEUNITS16, si la unidad de serie de entorno es SYSTEM; CODEUNITS32 si la unidad de serie de entorno es CODEUNITS32
    • c5 = CODEUNITS16
    • c6 = CODEUNITS32
    Las unidades de serie de entorno se pueden establecer con la variable global de nivel de sesión NLS_STRING_UNITS. Si no se establece la variable global de nivel de sesión NLS_STRING_UNITS o es nula, las unidades de serie de entorno se determinan mediante el valor del parámetro de configuración de base de datos string_units.
  41. Cree una tabla de distribución aleatoria utilizando el método aleatorio por exclusividad. Las claves de distribución se establecen automáticamente en las claves del índice: ID y NAME.
    CREATE TABLE RAND_BY_UNIQUE (ID
    BIGINT NOT NULL,
                                 NAME CHAR(25) NOT NULL,
                                 DESCRIPTION VARCHAR(1000),
                                 PRIMARY KEY(ID, NAME)) DISTRIBUTE BY RANDOM
  42. Cree una tabla de distribución aleatoria utilizando el método aleatorio por generación. La clave de distribución se establece en una columna interna RANDOM_DISTRIBUTION_KEY, que se oculta de SQL a menos que se especifique explícitamente.
    CREATE TABLE RAND_BY_GENERATION (C1 BIGINT) DISTRIBUTE BY RANDOM