Sentencia CREATE TYPE (matriz)

La sentencia CREATE TYPE (matriz) define un tipo de matriz. Los elementos de un tipo de matriz se basan en uno de los tipos de datos incorporados o en un tipo diferenciado definido por el usuario.

Invocación

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

Autorización

Los privilegios que posee el ID de autorización de la sentencia debe tener al menos una de las autorizaciones siguientes:
  • Autorización IMPLICIT_SCHEMA para la base de datos, si el nombre de esquema del tipo de matriz no hace referencia a un esquema existente
  • Privilegio CREATEIN para el esquema, si el nombre de esquema del tipo de matriz hace referencia a un esquema existente
  • Autorización SCHEMAADM en el esquema, si el nombre de esquema del tipo de matriz hace referencia a un esquema existente
  • Autorización DBADM

Sintaxis

Read syntax diagramSkip visual syntax diagramCREATE OR REPLACE TYPEtype-nameASdata-type ARRAY[2147483647integer-constantdata-type2]
data-type
Read syntax diagramSkip visual syntax diagrambuilt-in-typeanchored-data-typerow-type-namearray-type-name
data-type2
Read syntax diagramSkip visual syntax diagram INTEGERINTVARCHARCHARACTERCHARVARYING(integerOCTETSCODEUNITS32)anchored-non-row-data-type
anchored-data-type
Read syntax diagramSkip visual syntax diagramANCHORDATA TYPE TO variable-nametable-name.column-nameROWOFtable-nameview-namecursor-variable-name
built-in-type
Read syntax diagramSkip visual syntax diagramSMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)( integer,0, integer)FLOAT(53)( integer)REALDOUBLEPRECISIONCHARACTERCHAR(1)( integerOCTETSCODEUNITS32)VARCHARCHARACTERCHARVARYING( integerOCTETSCODEUNITS32)FOR BIT DATA1CLOBCHARACTERCHARLARGE OBJECT(1M)( integerKMGOCTETSCODEUNITS32)GRAPHIC(1)( integerCODEUNITS16CODEUNITS32)VARGRAPHIC( integerCODEUNITS16CODEUNITS32)DBCLOB(1M)( integerKMGCODEUNITS16CODEUNITS32)NCHARNATIONALCHARCHARACTER(1)( integer)NVARCHARNCHAR VARYINGNATIONALCHARCHARACTERVARYING( integer)NCLOBNCHAR LARGE OBJECTNATIONAL CHARACTER LARGE OBJECT(1M)( integerKMG)BINARY(1)( integer)VARBINARYBINARY VARYING(integer)BLOBBINARY LARGE OBJECT(1M)( integerKMG)DATETIMETIMESTAMP(6)( integer)BOOLEAN
anchored-non-row-data-type
Read syntax diagramSkip visual syntax diagramANCHORDATA TYPETO variable-nametable-name.column-name
Notes:
  • 1 The FOR BIT DATA clause can be specified in any order with the other column constraints that follow. The FOR BIT DATA clause cannot be specified with string units CODEUNITS32 (SQLSTATE 42613).

Descripción

OR REPLACE
Especifica que ha de sustituirse la definición del tipo de datos si existe uno en el servidor actual. La definición existente se descarta de forma efectiva antes de que la nueva definición se sustituya en el catálogo, con la excepción de que las funciones y métodos se invalidan en lugar de descartarse cuando éstos tienen parámetros o un valor de retorno definido con el tipo de datos que se sustituye. La definición existente no debe ser de un tipo estructurado (SQLSTATE 42809). Esta opción se pasa por alto si no existe una definición para el tipo de datos en el servidor actual.
nombre-tipo
Indica el tipo. El nombre, incluido el calificador implícito o explícito, no debe identificar ningún otro tipo (incorporado o definido por el usuario) que ya exista en el servidor actual. El nombre sin calificar no debe ser el mismo que un tipo de datos incorporado o VARBINARY (SQLSTATE 42918).

Algunos nombres utilizados como palabras clave en predicados están reservados para su uso por el sistema, y no pueden utilizarse como nombre-tipo (SQLSTATE 42939). Los nombres son SOME, ANY, ALL, NOT, AND, OR, BETWEEN, NULL, LIKE, EXISTS, IN, UNIQUE, OVERLAPS, SIMILAR, MATCH y los operadores de comparación.

Si se especifica un nombre-tipo compuesto de dos partes, el nombre de esquema no puede empezar por los caracteres 'SYS' (SQLSTATE 42939).

tipo-datos
Especifica el tipo de datos de los elementos de matriz.
tipo-incorporado
Especifica un tipo de datos incorporado. Consulte en "CREATE TABLE" la descripción de los tipos de datos incorporados. Los tipos incorporados incluyen los tipos de datos descritos en CREATE TABLE, que no sean los tipos de referencia, SYSPROC.DB2SECURITYLABEL, XML o los tipos definidos por el usuario (SQLSTATE 429C2).
nombre-tipo-fila
Especifica el nombre de un tipo de fila definido por el usuario. Si se especifica un nombre-tipo-fila sin un nombre de esquema, el nombre-tipo-fila se resuelve buscando los esquemas en la vía de acceso de SQL. Los tipos de fila se pueden anidar como elementos en otros tipos de matriz con un nivel máximo de anidamiento de dieciséis.
nombre-tipo-matriz
Especifica un tipo de matriz. Si se especifica un nombre-tipo-matriz sin un nombre de esquema, el nombre-tipo-matriz se resuelve buscando los esquemas en la vía de acceso de SQL. Los tipos de matriz se pueden anidar como elementos en otros tipos de matriz con un nivel máximo de anidamiento de dieciséis.
tipo-datos-anclados
Identifica otro objeto que se utiliza para determinar el tipo de datos. El tipo de datos del objeto de anclaje se ve afectado por las mismas limitaciones que se aplican cuando se especifica el tipo de datos directamente o, en el caso de una fila, cuando se crea un tipo de fila.
ANCHOR DATA TYPE TO
Indica que se utiliza un tipo de datos anclados para especificar el tipo de datos.
nombre-variable
Identifica una variable global. El tipo de datos de la variable global se utiliza como tipo de datos para los elementos de matriz.
table-name.column-name
Identifica un nombre de columna de una tabla o vista existente. El tipo de datos de la columna se utiliza como tipo de datos para los elementos de matriz.
ROW OF nombre-tabla o nombre-vista
Especifica una fila de campos con nombres y tipos de datos que se basan en los nombres de columna y los tipos de datos de columna de la tabla identificada por nombre-tabla o la vista identificada por nombre-vista.El tipo de datos de los elementos de matriz es un tipo de fila sin nombre.
ROW OF nombre-variable-cursor
Especifica una fila de campos con nombres y tipos de datos que se basan en los nombres de campo y los tipos de datos de campos de la variable de cursor identificada por nombre-variable-cursor. La variable de cursor especificada debe ser uno de los elementos siguientes (SQLSTATE 428HS):
  • Una variable global con un tipo de datos de cursor de tipado fuerte.
  • Una variable global con un tipo de datos de cursor de tipado débil que se creó o declaró con una cláusula CONSTANT especificando una sentencia-select en la que todas las columnas de resultados tienen nombre.
Si el tipo de cursor de la variable de cursor no está fuertemente tipado mediante un tipo de fila con nombre, el tipo de datos de los elementos de matriz es un tipo de fila sin nombre.
tipo-datos-no-fila-anclados
Identifica otro objeto que se utiliza para determinar el tipo de datos. El tipo de datos del objeto de anclaje se ve afectado por las mismas limitaciones que se aplican cuando se especifica el tipo de datos directamente.
ANCHOR DATA TYPE TO
Indica que se utiliza un tipo de datos anclados para especificar el tipo de datos.
nombre-variable
Identifica una variable global con un tipo de datos que es un tipo de datos VARCHAR o INTEGER. El tipo de datos de la variable global se utiliza como tipo de datos para el índice de matriz.
table-name.column-name
Identifica un nombre de columna de una tabla o vista existente con un tipo de datos INTEGER o VARCHAR. El tipo de datos de la columna se utiliza como tipo de datos para el índice de matriz.
ARRAY [constante-entera]
Especifica que el tipo es una matriz con una cardinalidad máxima de constante-entera. El valor debe ser un entero positivo (no cero) y menor que el valor entero positivo más grande (SQLSTATE 42820). El valor por omisión es el mayor valor entero positivo (2 147 483 647). La cardinalidad del valor de una matriz se determina mediante la posición de elemento más alta que se ha asignado al valor de la matriz.

La cardinalidad máxima de una matriz de un determinado sistema está limitada por la cantidad total de memoria disponible para las aplicaciones de base de datos. como tal, aunque puedan crearse matrices con grandes cardinalidades, es posible que no puedan utilizarse todos los elementos.

ARRAY [data-type2]
Especifica que el tipo es una matriz asociativa que está indexada según los valores de tipo de datos tipo2-datos. El tipo de datos debe ser el tipo de datos INTEGER o VARCHAR (SQLSTATE 429C2). Los valores especificados como índice al asignar un elemento de matriz deben poder asignarse a un valor de tipo2-datos. La cardinalidad del valor de una matriz se determina mediante el número de valores de índice exclusivos que se utilizan al asignar elementos de matriz.

Reglas

  • Utilización de tipos de datos anclados: Un tipo de datos anclado no puede hacer referencia a los siguientes objetos (SQLSTATE 428HS): un apodo, una tabla con tipo, una vista con tipo, una vista estadística asociada con un índice basado en la expresión, una tabla temporal declarada, una definición de fila asociada con un cursor de tipo débil, un objeto con una página de códigos o una clasificación que es diferente de la página de códigos de la base de datos o la asignación de base de datos.

Notas

  • Uso del tipo de matriz: el tipo de matriz sólo puede utilizarse como el tipo de datos de:
    • Una variable local en una sentencia de SQL compuesto (compilado)
    • Un parámetro de una rutina de SQL
    • Un parámetro de un procedimiento Java™ (sólo matrices ordinarias no anidadas)
    • El tipo de retorno de una función de SQL
    • Una variable global
  • Una variable o un parámetro definido con un tipo de matriz sólo se puede utilizar en sentencias de SQL compuesto (compilado)

ejemplos

Ejemplo 1: Cree un tipo de matriz denominado PHONENUMBERS con un máximo de 50 elementos que tengan el tipo de datos DECIMAL(10, 0).
   CREATE TYPE PHONENUMBERS AS DECIMAL(10,0)
     ARRAY[50]
Ejemplo 2: Cree un tipo de matriz denominado NUMBERS con un valor predeterminado número de elementos en el esquema GENERIC.
   CREATE TYPE GENERIC.NUMBERS AS DECFLOAT(34)
     ARRAY[]
Ejemplo 3: Cree una matriz asociativa denominada PERSONAL_PHONENUMBERS con elementos DECIMAL (16, 0) indexados por series como 'Casa', 'Trabajo' o 'Mamá'.
   CREATE TYPE PERSONALPHONENUMBERS AS DECIMAL(16, 0) ARRAY[VARCHAR(8)]
Ejemplo 4: Cree un tipo de matriz asociativa donde los índices sean nombres de provincia, territorio o país y los elementos sean ciudades capitales:
   CREATE TYPE CAPITALSARRAY AS VARCHAR(30) ARRAY[VARCHAR(20)]
Ejemplo 5: Cree un tipo de matriz asociativa para descripciones de producto de un máximo de 40 caracteres de longitud, donde los índices son números de producto de un máximo de 12 caracteres de longitud:
   CREATE TYPE PRODUCTS AS VARCHAR(40) ARRAY[VARCHAR(12)]