Consulta de SQL (PDFDrive)
Consulta de SQL (PDFDrive)
1
para Linux, UNIX y Windows
SC11-8071-00
IBM DB2 10.1
para Linux, UNIX y Windows
SC11-8071-00
Nota
Antes de utilizar esta información y el producto al que da soporte, lea la información general contenida en el apartado
Apéndice B, “Avisos”, en la página 1443.
Nota de edición
Este manual es la traducción del original en inglés IBM DB2 10.1 for Linux, UNIX, and Windows SQL Reference
Volume 2 (SC27-3886-00).
Este documento contiene información propiedad de IBM. Se proporciona según un acuerdo de licencia y está
protegido por la ley de la propiedad intelectual. La información contenida en esta publicación no incluye ninguna
garantía de producto, por lo que ninguna declaración proporcionada en este manual deberá interpretarse como tal.
Puede realizar pedidos de publicaciones de IBM en línea o a través del representante de IBM de su localidad.
v Para solicitar publicaciones en línea, vaya a IBM Publications Center en http://www.ibm.com/shop/
publications/order
v Para encontrar al representante local de IBM que le corresponde, vaya a la sección Worlwide Contacts de IBM
Directory en http://www.ibm.com/planetwide/
Para realizar pedidos de publicaciones de DB2 desde DB2 Marketing and Sales, en los EE.UU. o en Canadá, llame
al 1-800-IBM-4YOU (426-4968).
Cuando envía información a IBM, está otorgando a IBM el derecho no exclusivo de utilizar o distribuir la
información de cualquier forma que considere adecuada sin incurrir por ello a ninguna obligación para con usted.
© Copyright IBM Corporation 2012.
Contenido
Acerca de este manual . . . . . . . . vii ALTER STOGROUP . . . . . . . . . . . 116
Quién debe utilizar este manual . . . . . .
. vii ALTER TABLE . . . . . . . . . . . . . 121
Cómo esta estructurado este manual . . . . .
. vii ALTER TABLESPACE . . . . . . . . . . 192
Cómo leer los diagramas de sintaxis . . . . . . viii ALTER THRESHOLD . . . . . . . . . . 209
Convenciones utilizadas en este manual . . . . . x ALTER TRIGGER . . . . . . . . . . . . 223
Condiciones de error . . . . . . . . . . x ALTER TRUSTED CONTEXT . . . . . . . . 224
Convenios de resaltado . . . . . . . . . . x ALTER TYPE (estructurado) . . . . . . . . 233
Documentación relacionada . . . . . . . . . x ALTER USAGE LIST . . . . . . . . . . . 240
ALTER USER MAPPING . . . . . . . . . 242
Sentencias de SQL . . . . . . . . . . 1 ALTER VIEW . . . . . . . . . . . . . 245
ALTER WORK ACTION SET . . . . . . . . 247
Cómo se invocan las sentencias de SQL . . . . . 11
ALTER WORK CLASS SET . . . . . . . . . 262
Incorporación de una sentencia a un programa de
ALTER WORKLOAD. . . . . . . . . . . 268
aplicación . . . . . . . . . . . . . . 11
ALTER WRAPPER . . . . . . . . . . . 285
Preparación y ejecución dinámicas. . . . . . 12
ALTER XSROBJECT . . . . . . . . . . . 287
Invocación estática de una sentencia de selección 13
ASSOCIATE LOCATORS . . . . . . . . . 288
Invocación dinámica de una sentencia de
AUDIT . . . . . . . . . . . . . . . 290
selección . . . . . . . . . . . . . . 13
BEGIN DECLARE SECTION . . . . . . . . 294
Invocación interactiva . . . . . . . . . . 13
CALL . . . . . . . . . . . . . . . . 296
Utilización de SQL con otros sistemas principales 13
CASE . . . . . . . . . . . . . . . . 305
Detección y proceso de condiciones de error y de
CLOSE . . . . . . . . . . . . . . . 308
aviso en aplicaciones de lenguaje principal . . . . 14
COMMENT . . . . . . . . . . . . . . 310
Comentarios de SQL . . . . . . . . . . . 15
COMMIT. . . . . . . . . . . . . . . 321
Compilación condicional en SQL . . . . . . . 15
SQL compuesto. . . . . . . . . . . . . 323
Acerca de las sentencias de control de SQL . . . . 18
SQL compuesto (en línea) . . . . . . . . . 324
Referencias a parámetros de SQL, variables de
SQL compuesto (incorporado) . . . . . . . . 329
SQL y variables globales . . . . . . . . . 19
SQL compuesto (compilado) . . . . . . . . 333
Referencias a etiquetas de SQL . . . . . . . 20
CONNECT (tipo 1) . . . . . . . . . . . 351
Referencias a nombres de condición de SQL . . 20
CONNECT (tipo 2) . . . . . . . . . . . 359
Referencias a nombres de sentencia de SQL . . 20
CREATE ALIAS . . . . . . . . . . . . 367
Referencias a nombre de cursor de SQL . . . . 21
CREATE AUDIT POLICY . . . . . . . . . 371
Designadores de función, método y procedimiento 22
CREATE BUFFERPOOL . . . . . . . . . . 375
ALLOCATE CURSOR . . . . . . . . . . . 27
CREATE DATABASE PARTITION GROUP . . . 379
ALTER AUDIT POLICY . . . . . . . . . . 29
CREATE EVENT MONITOR . . . . . . . . 382
ALTER BUFFERPOOL . . . . . . . . . . . 33
CREATE EVENT MONITOR (actividades) . . . . 404
ALTER DATABASE PARTITION GROUP . . . . 36
CREATE EVENT MONITOR (historial de cambios) 416
ALTER DATABASE. . . . . . . . . . . . 40
CREATE EVENT MONITOR (bloqueo) . . . . . 423
ALTER EVENT MONITOR . . . . . . . . . 45
Sentencia CREATE EVENT MONITOR
ALTER FUNCTION . . . . . . . . . . . 50
(antememoria de paquete) . . . . . . . . . 429
ALTER HISTOGRAM TEMPLATE . . . . . . . 54
CREATE EVENT MONITOR (estadísticas) . . . . 436
ALTER INDEX . . . . . . . . . . . . . 56
CREATE EVENT MONITOR (violaciones de
ALTER MASK . . . . . . . . . . . . . 57
umbral) . . . . . . . . . . . . . . . 449
ALTER METHOD . . . . . . . . . . . . 58
CREATE EVENT MONITOR (unidad de trabajo) 462
ALTER MODULE . . . . . . . . . . . . 60
CREATE FUNCTION. . . . . . . . . . . 468
ALTER NICKNAME . . . . . . . . . . . 68
CREATE FUNCTION (escalar externa) . . . . . 469
ALTER PACKAGE . . . . . . . . . . . . 77
CREATE FUNCTION (tabla externa) . . . . . 499
ALTER PERMISSION . . . . . . . . . . . 81
CREATE FUNCTION (tabla externa OLE DB) . . 521
ALTER PROCEDURE (externo) . . . . . . . . 82
CREATE FUNCTION (derivado o plantilla) . . . 532
ALTER PROCEDURE (derivado) . . . . . . . 85
CREATE FUNCTION (tabla, fila o escalar de SQL) 547
ALTER PROCEDURE (SQL) . . . . . . . . . 87
CREATE FUNCTION MAPPING . . . . . . . 564
ALTER SCHEMA . . . . . . . . . . . . 89
CREATE GLOBAL TEMPORARY TABLE . . . . 569
ALTER SECURITY LABEL COMPONENT . . . . 91
CREATE HISTOGRAM TEMPLATE . . . . . . 582
ALTER SECURITY POLICY . . . . . . . . . 94
CREATE INDEX . . . . . . . . . . . . 584
ALTER SEQUENCE . . . . . . . . . . . 98
SCREATE INDEX EXTENSION . . . . . . . 606
ALTER SERVER . . . . . . . . . . . . 102
CREATE MASK . . . . . . . . . . . . 613
ALTER SERVICE CLASS . . . . . . . . . 105
CREATE METHOD . . . . . . . . . . . 620
Contenido v
vi Consulta de SQL - Volumen 2
Acerca de este manual
El manual Consulta de SQL en dos volúmenes define el lenguaje SQL utilizado por
la base de datos DB2 para Linux, UNIX y Windows.
Éste incluye:
v Información acerca de los conceptos de las bases de datos relacionales, los
elementos del lenguaje, las funciones y los formatos de las consultas (Volumen 1)
v Información acerca de la sintaxis y la semántica de las sentencias de SQL
(Volumen 2)
Este manual sirve más de consulta que de guía de aprendizaje. Supone que va a
escribir programas de aplicación y, por lo tanto, presenta todas las funciones del
gestor de bases de datos.
Los fragmentos de sintaxis empiezan con el símbolo +--- y finalizan con el símbolo
---¦.
elemento_necesario
elemento_necesario
elemento_opcional
elemento_opcional
elemento_necesario
Si puede elegir entre dos o más elementos, éstos aparecen en una pila.
elemento_necesario opción_necesaria1
opción_necesaria2
Si la elección de uno de los elementos es opcional, la pila entera aparece bajo la vía
de acceso principal.
elemento_necesario
opción_opcional1
opción_opcional2
Si uno de los elementos es el valor por omisión, aparecerá sobre la vía de acceso
principal y las opciones restantes se mostrarán debajo.
opción_por_omisión
elemento_necesario
opción_opcional
opción_opcional
Una flecha que vuelve a la izquierda, sobre la línea principal, indica un elemento
que se puede repetir. En este caso, los elementos repetidos se deben separar
mediante uno o más espacios en blanco.
elemento_necesario elemento_repetible
Si la flecha de repetición contiene una coma, debe separar los elementos repetidos
con una coma.
elemento_necesario elemento_repetible
Una flecha de repetición sobre una pila indica que puede realizar más una elección
en los elementos apilados o repetir una sola elección.
Las palabras clave aparecen en mayúsculas (por ejemplo FROM). Se deben escribir
exactamente tal como se muestran. Las variables aparecen en minúsculas (por
ejemplo nombre-columna). Representan nombres o valores proporcionados por el
usuario en la sintaxis.
elemento_necesario bloque-parámetros
bloque-parámetros:
parámetro1
parámetro2 parámetro3
parámetro4
Los segmentos adyacentes que aparecen entre “puntos” (?) se pueden especificar
en cualquier secuencia.
Condiciones de error
Una condición de error se indica en el texto del manual listando entre paréntesis el
SQLSTATE asociado al error.
Por ejemplo:
Una signatura duplicada devuelve un error de SQL (SQLSTATE 42723).
Convenios de resaltado
En este tema se indican los convenios utilizados en esta publicación.
v La negrita indica mandatos, palabras clave y otros elementos cuyos nombres
están predefinidos por el sistema.
v La cursiva indica uno de los elementos siguientes:
– Nombres o valores (variables) que el usuario debe proporcionar
– Énfasis general
– La introducción de un término nuevo
– Una referencia a otra fuente de información
Documentación relacionada
Las siguientes publicaciones pueden resultarle útiles al preparar las aplicaciones:
v Iniciación al desarrollo de aplicaciones de bases de datos
– Presenta el desarrollo de la aplicación DB2 e incluye los requisitos previos de
la plataforma, el software de desarrollo soportado y una orientación sobre las
ventajas y limitaciones de los API de programación soportados.
v DB2 for i5/OS SQL Reference
– Este manual define el soporte para SQL de DB2 Query Manager y SQL
Development Kit en System i. Contiene información de consulta para las
tareas de administración del sistema, administración de la base de datos,
programación de aplicaciones y operación. Este manual incluye sintaxis, notas
acerca del uso, palabras claves y ejemplos para cada una de las sentencias de
SQL utilizadas en sistemas i5/OS que ejecutan DB2.
v DB2 para z/OS SQL Reference
– Este manual define el SQL utilizado en DB2 para z/OS. Proporciona formatos
de consulta, sentencias de SQL, sentencias de procedimientos de SQL, límites
de DB2, SQLCA, SQLDA, tablas de catálogos y palabras reservadas de SQL
para sistemas z/OS que ejecutan DB2.
v DB2 Spatial Extender User's Guide and Reference
– Este manual describe cómo escribir aplicaciones para crear y utilizar un
sistema de información geográfica (GIS). Para crear y utilizar un GIS es
necesario proporcionar una base de datos con recursos y luego consultar los
datos para obtener información, tal como ubicaciones, distancias y
distribuciones dentro de zonas geográficas.
v IBM SQL Reference
– Este manual contiene todos los elementos comunes de SQL que están
distribuidos por todos los productos de base de datos de IBM. Proporciona
Sentencias 3
Sentencias de SQL
Sentencias 5
Sentencias de SQL
Sentencias 7
Sentencias de SQL
Sentencias 9
Sentencias de SQL
Sentencias 11
Incorporación de una sentencia a un programa de aplicación
v Como entrada (el valor actual de la variable del lenguaje principal se utiliza en
la ejecución de la sentencia)
v Como salida (como resultado de la ejecución de la sentencia, a la variable se
asigna un nuevo valor)
A todas las sentencias ejecutables debe seguir una prueba del código de retorno de
SQL. Por otra parte, la sentencia WHENEVER (que, en sí, es no ejecutable) puede
utilizarse para cambiar el flujo de control inmediatamente después de la ejecución
de una sentencia incorporada.
Todos los objetos a los que se hace referencia en las sentencias de lenguaje de
manipulación de datos (DML) deben existir al enlazar las sentencias con una base
de datos.
Una sentencia de este tipo se ejecuta cada vez que se abre el cursor por medio de
la sentencia OPEN (incorporada). Después de haberse abierto el cursor, la tabla de
resultados puede recuperarse, una fila cada vez, mediante la realización de
ejecuciones sucesivas de la sentencia FETCH.
Invocación interactiva
Posibilidad de entrar sentencias de SQL desde una estación de trabajo como parte
de la arquitectura del gestor de bases de datos. Se dice que una sentencia entrada
así se emite interactivamente.
Una sentencia de este tipo debe ser una sentencia ejecutable que no contenga
marcadores de parámetro o referencias a las variables del lenguaje principal, pues
ello sólo tiene sentido en el contexto de un programa de aplicación.
Sentencias 13
Utilización de SQL con otros sistemas principales
Comentarios de SQL
Las sentencias de SQL estático pueden incluir comentarios de SQL o del lenguaje
principal. Las sentencias de SQL dinámico pueden incluir comentarios de SQL.
Ejemplos
v Ejemplo 1: Este ejemplo muestra cómo incluir comentarios simples en una
sentencia:
CREATE VIEW PRJ_MAXPER -- PROJECTS WITH MOST SUPPORT PERSONNEL
AS SELECT PROJNO, PROJNAME -- NUMBER AND NAME OF PROJECT
FROM PROJECT
WHERE DEPTNO = ’E21’ -- SYSTEMS SUPPORT DEPT CODE
AND PRSTAFF > 1
v Ejemplo 2: Este ejemplo muestra cómo incluir comentarios compuestos en una
sentencia:
CREATE VIEW PRJ_MAXPER /* PROJECTS WITH MOST SUPPORT
PERSONNEL */
AS SELECT PROJNO, PROJNAME /* NUMBER AND NAME OF PROJECT */
FROM PROJECT
WHERE DEPTNO = ’E21’ /* SYSTEMS SUPPORT DEPT CODE */
AND PRSTAFF > 1
Sentencias 15
Compilación condicional en SQL
Directiva de selección
_ELSEIF condición-búsqueda _THEN fragmento-código
_END
_ELSE fragmento-código
condición-búsqueda
Especifica la condición que se evalúa para determinar qué fragmento-código, si
existe, ha de incluirse. Si la condición es desconocida o falsa, la evaluación
continúa con la siguiente condición de búsqueda, hasta que una condición es
verdadera, se ha llegado a la cláusula _ELSE o se ha alcanzado el final de la
directiva de selección. La condición de búsqueda sólo puede incluir los
elementos siguientes (SQLSTATE 428HV):
v Constantes de tipo BOOLEAN, INTEGER o VARCHAR
v Constantes nulas (NULL)
v Directivas de consulta
v Constantes globales, donde el valor de constante definido es un literal
simple de tipo BOOLEAN, INTEGER o VARCHAR
v Predicados básicos
v Predicados nulos (NULL)
Directiva de consulta
Notas
v Referencias a variables globales definidas como constantes: una referencia a
una variable global (que también puede ser una referencia a una variable de
módulo publicada en un módulo) de una directiva de selección sólo se utiliza
para proporcionar un valor basado en una constante en tiempo de compilación.
La variable global a la que se hace referencia debe satisfacer los requisitos
siguientes:
– Debe existir en el servidor actual (SQLSTATE 42704)
– Debe tener un tipo de datos BOOLEAN, INTEGER o VARCHAR (SQLSTATE
428HV)
– Debe haberse definido mediante la utilización de la cláusula CONSTANT con
un único valor de constante (SQLSTATE 428HV)
Una variable global de este tipo se denomina constante global. Los cambios que
posteriormente se realicen en la constante global no tendrán ningún efecto en las
sentencias que ya se han compilado.
v Alternativas de sintaxis: si el entorno de servidor de datos se ha habilitado para
la ejecución de sentencias de PL/SQL:
– Puede especificarse ELSIF en lugar de ELSEIF
– Puede usarse un carácter de dólar ($) en lugar de un carácter de subrayado
(_) como prefijo para las palabras clave para la compilación condicional
– Pueden usarse dos caracteres de dólar ($$) en lugar de dos caracteres de
subrayado (__) como prefijo para una directiva de consulta
Sentencias 17
Compilación condicional en SQL
La única finalidad del prefijo del carácter del dólar es dar soporte a las
sentencias de SQL existentes que utilizan directivas de consulta y no se
recomienda utilizarlo para escribir nuevas sentencias de SQL.
Ejemplo
El valor está disponible como valor por omisión para cualquier conexión que se
establezca posteriormente con la base de datos.
Todos los parámetros de SQL, las variables de SQL, los campos de variables de
filas y las variables globales se consideran anulables. El nombre de un parámetro
de SQL, de una variable de SQL, de un campo de variable de fila o de una
variable global de una rutina de SQL puede ser igual al nombre de una columna
de una tabla o vista a la que se haga referencia en la rutina. El nombre de una
variable de SQL o un campo de variable de fila también puede ser el mismo que el
nombre de otra variable de SQL o campo de variable de fila declarado en la misma
rutina. Esto puede ocurrir cuando las dos variables de SQL están declaradas en
sentencias compuestas diferentes. La sentencia compuesta que contiene la
declaración del nombre de una variable de SQL determina el ámbito del nombre
de dicha variable. Para obtener más información, consulte “SQL compuesto
(procedimiento)”.
Sentencias 19
Referencias a parámetros de SQL, variables de SQL y variables globales
Esto puede ocurrir cuando las dos condiciones de SQL están declaradas en
sentencias compuestas diferentes. La sentencia compuesta que contiene la
declaración del nombre de una condición de SQL determina el ámbito del nombre
de dicha condición. El nombre de una condición debe ser exclusivo dentro de la
sentencia compuesta en la que está declarada, salvo en el caso de las declaraciones
de las sentencias compuestas anidadas dentro de dicha sentencia compuesta
(SQLSTATE 42734). Sólo se puede hacer referencia al nombre de una condición
dentro de la sentencia compuesta en la que está declarada, incluidas las sentencias
compuestas anidadas dentro de dicha sentencia compuesta. Cuando se hace
referencia a un nombre de condición, se utiliza la condición declarada en la
sentencia compuesta más interior. Para obtener más información, consulte “SQL
compuesto (en línea)”.
Esto puede ocurrir cuando las dos sentencias de SQL están declaradas en
sentencias compuestas diferentes. La sentencia compuesta que contiene la
declaración del nombre de una sentencia de SQL determina el ámbito del nombre
de dicha sentencia. El nombre de una sentencia debe ser exclusivo dentro de la
sentencia compuesta en la que está declarada, salvo en el caso de las declaraciones
de las sentencias compuestas anidadas dentro de dicha sentencia compuesta
(SQLSTATE 42734). Sólo se puede hacer referencia al nombre de una sentencia
dentro de la sentencia compuesta en la que está declarada, incluidas las sentencias
compuestas anidadas dentro de dicha sentencia compuesta. Cuando se hace
referencia a un nombre de sentencia, se utiliza la sentencia declarada en la
sentencia compuesta más interior. Para obtener más información, consulte “SQL
compuesto (en línea)”.
El nombre de un cursor de SQL puede ser el mismo que el de otro cursor de SQL
declarado en la misma rutina. Esto puede ocurrir cuando los dos cursores de SQL
están declarados en sentencias compuestas diferentes.
Sentencias 21
Designadores de función, método y procedimiento
Designador de función
designador-función:
FUNCTION nombre-función
( )
,
tipo-datos
SPECIFIC FUNCTION nombre-específico
FUNCTION nombre-función
Identifica una función en particular y sólo es válido si existe exactamente una
instancia de función con el nombre nombre-función en el esquema. Para la
función identificada puede definirse cualquier número de parámetros. En las
sentencias de SQL dinámico, el registro especial CURRENT SCHEMA se utiliza
como calificador para un nombre de objeto no calificado. En las sentencias de
SQL estático, la opción de precompilación/enlace QUALIFIER especifica
implícitamente el calificador para los nombres de objeto no calificados. Si no
existe ninguna función con este nombre en el esquema nombrado o implícito,
se produce un error (SQLSTATE 42704). Si existe más de una instancia de la
función en el esquema especificado o implícito, se genera un error (SQLSTATE
42725).
FUNCTION nombre-función (tipo-datos,...)
Proporciona la signatura de la función, que identifica la función de forma
exclusiva. No se utiliza el algoritmo de resolución de función.
nombre-función
Especifica el nombre de la función. En las sentencias de SQL dinámico, el
registro especial CURRENT SCHEMA se utiliza como calificador para un
nombre de objeto no calificado. En las sentencias de SQL estático, la opción
de precompilación/enlace QUALIFIER especifica implícitamente el
calificador para los nombres de objeto no calificados.
(tipo-datos,...)
Los valores deben coincidir con los tipos de datos que se han especificado
(en la posición correspondiente) en la sentencia CREATE FUNCTION. Para
identificar la instancia de función específica, se utilizan el número de tipos
de datos y la concatenación lógica de los tipos de datos.
Si un tipo de datos no está calificado, el nombre del tipo se resuelve
realizando una búsqueda en los esquemas de la vía de acceso de SQL. Esto
también se aplica a los nombres de tipo de datos especificados para un
tipo REFERENCE.
Designador de método
Un designador de método identifica un único método de forma exclusiva. Por lo
general, los designadores de método aparecen en las sentencias de DDL de los
métodos (como, por ejemplo, DROP o ALTER).
designador-método:
METHOD nombre-método
Identifica un método en particular y sólo es válido si existe exactamente una
instancia de método con el nombre nombre-método para el tipo nombre-tipo. Para
el método identificado puede definirse cualquier número de parámetros. Si no
existe ningún método con este nombre para el tipo, se generará un error
(SQLSTATE 42704). Si existe más de una instancia del método para el tipo, se
generará un error (SQLSTATE 42725).
METHOD nombre-método (tipo-datos,...)
Proporciona la signatura del método, que identifica de forma exclusiva al
método. No se utiliza el algoritmo de resolución de método.
nombre-método
Especifica el nombre del método para el tipo nombre-tipo.
Sentencias 23
Designadores de función, método y procedimiento
(tipo-datos,...)
Los valores deben coincidir con los tipos de datos que se han especificado
(en la posición correspondiente) en la sentencia CREATE TYPE. Para
identificar la instancia de método específica, se utilizan el número de tipos
de datos y la concatenación lógica de los tipos de datos.
Si un tipo de datos no está calificado, el nombre del tipo se resuelve
realizando una búsqueda en los esquemas de la vía de acceso de SQL. Esto
también se aplica a los nombres de tipo de datos especificados para un
tipo REFERENCE.
No es necesario especificar la longitud, la precisión o la escala para los
tipos de datos con parámetros. En lugar de ello, puede codificarse un
conjunto de paréntesis vacío para indicar que esos atributos deben pasarse
por alto durante la búsqueda de una coincidencia de tipo de datos.
FLOAT() no puede utilizarse (SQLSTATE 42601), ya que el valor del
parámetro indica tipos de datos distintos (REAL o DOUBLE).
Si se codifica la longitud, la precisión o la escala, el valor debe coincidir
exactamente con el valor especificado en la sentencia CREATE TYPE.
No es necesario que un tipo de FLOAT(n) coincida con el valor que se ha
definido para n, pues 0 < n < 25 significa REAL y 24 < n < 54 significa
DOUBLE. La coincidencia se produce basándose en si el tipo es REAL o
DOUBLE.
Si no existe ningún método con la signatura especificada para el tipo en el
esquema indicado o implícito, se generará un error (SQLSTATE 42883).
FOR nombre-tipo
Especifica el nombre del tipo al que va a asociarse el método especificado.
El nombre debe identificar un tipo que ya esté descrito en el catálogo
(SQLSTATE 42704). En las sentencias de SQL dinámico, el registro especial
CURRENT SCHEMA se utiliza como calificador para un nombre de objeto
no calificado. En las sentencias de SQL estático, la opción de
precompilación/enlace QUALIFIER especifica implícitamente el calificador
para los nombres de objeto no calificados.
SPECIFIC METHOD nombre-específico
Identifica un método en particular, utilizándose el nombre que se ha
especificado o que se ha tomado por omisión durante la creación del método.
En las sentencias de SQL dinámico, el registro especial CURRENT SCHEMA se
utiliza como calificador para un nombre de objeto no calificado. En las
sentencias de SQL estático, la opción de precompilación/enlace QUALIFIER
especifica implícitamente el calificador para los nombres de objeto no
calificados. El nombre-específico debe identificar una instancia de método
específica en el esquema indicado o implícito; en caso contrario, se genera un
error (SQLSTATE 42704).
Designador de procedimiento
designador-procedimiento:
PROCEDURE nombre-procedimiento
( )
,
tipo-datos
SPECIFIC PROCEDURE nombre-específico
PROCEDURE nombre-procedimiento
Identifica un procedimiento en particular y sólo es válido si existe exactamente
una instancia de procedimiento con el nombre nombre-procedimiento en el
esquema. Para el procedimiento identificado puede definirse cualquier número
de parámetros. En las sentencias de SQL dinámico, el registro especial
CURRENT SCHEMA se utiliza como calificador para un nombre de objeto no
calificado. En las sentencias de SQL estático, la opción de precompilación/
enlace QUALIFIER especifica implícitamente el calificador para los nombres de
objeto no calificados. Si no existe ningún procedimiento con este nombre en el
esquema nombrado o implícito, se genera un error (SQLSTATE 42704). Si existe
más de una instancia del procedimiento en el esquema especificado o implícito,
se genera un error (SQLSTATE 42725).
PROCEDURE nombre-procedimiento (tipo-datos,...)
Proporciona la signatura del procedimiento, que identifica el procedimiento de
forma exclusiva. No se utiliza el algoritmo de resolución de procedimiento.
nombre-procedimiento
Especifica el nombre del procedimiento. En las sentencias de SQL
dinámico, el registro especial CURRENT SCHEMA se utiliza como
calificador para un nombre de objeto no calificado. En las sentencias de
SQL estático, la opción de precompilación/enlace QUALIFIER especifica
implícitamente el calificador para los nombres de objeto no calificados.
(tipo-datos,...)
Los valores deben coincidir con los tipos de datos que se han especificado
(en la posición correspondiente) en la sentencia CREATE PROCEDURE.
Para identificar la instancia de procedimiento específica, se utilizan el
número de tipos de datos y la concatenación lógica de los tipos de datos.
Si un tipo de datos no está calificado, el nombre del tipo se resuelve
realizando una búsqueda en los esquemas de la vía de acceso de SQL. Esto
también se aplica a los nombres de tipo de datos especificados para un
tipo REFERENCE.
No es necesario especificar la longitud, la precisión o la escala para los
tipos de datos con parámetros. En lugar de ello, puede codificarse un
conjunto de paréntesis vacío para indicar que esos atributos deben pasarse
por alto durante la búsqueda de una coincidencia de tipo de datos.
FLOAT() no puede utilizarse (SQLSTATE 42601), ya que el valor del
parámetro indica tipos de datos distintos (REAL o DOUBLE).
Si se codifica la longitud, la precisión o la escala, el valor debe coincidir
exactamente con el valor especificado en la sentencia CREATE
PROCEDURE.
No es necesario que un tipo de FLOAT(n) coincida con el valor que se ha
definido para n, pues 0 < n < 25 significa REAL y 24 < n < 54 significa
DOUBLE. La coincidencia se produce basándose en si el tipo es REAL o
DOUBLE.
Sentencias 25
Designadores de función, método y procedimiento
ALLOCATE CURSOR
La sentencia ALLOCATE CURSOR asigna un cursor para el conjunto de resultados
identificado por la variable localizadora de conjuntos de resultados.
Invocación
Autorización
No se necesita.
Sintaxis
Descripción
nombre-cursor
Indica el cursor. El nombre no debe identificar un cursor que ya esté declarado
en el procedimiento SQL fuente (SQLSTATE 24502).
CURSOR FOR RESULT SET variable-localizadora-cr
Indica una variable localizadora de conjuntos de resultados que se ha
declarado en el procedimiento SQL fuente, de acuerdo con las normas para
declarar variables localizadoras de conjuntos de resultados. Para obtener más
información acerca de la declaración de variables de SQL, consulte el apartado
“Sentencia de SQL compuesto (procedimiento)”.
La variable localizadora de conjuntos de resultados debe contener un valor
válido, tal como lo devuelve la sentencia ASSOCIATE LOCATORS de SQL
(SQLSTATE 0F001).
Normas
v Son aplicables las normas siguientes cuando se utiliza un cursor asignado:
– Un cursor asignado no se puede abrir con la sentencia OPEN (SQLSTATE
24502).
– Un cursor asignado no puede utilizarse en una sentencia UPDATE o DELETE
con posición (SQLSTATE 42828).
– Un cursor asignado se puede cerrar con la sentencia CLOSE. El cierre de un
cursor asignado cierra el cursor asociado.
– Sólo se puede asignar un único cursor a cada conjunto de resultados.
v Los cursores asignados permanecen vigentes hasta que se ejecuta una operación
de retrotracción, un cierre implícito o un cierre explícito.
v Una operación de confirmación destruye los cursores asignados que no se han
definido como WITH HOLD.
v La destrucción de un cursor asignado cierra el cursor asociado existente en el
procedimiento SQL.
Sentencias 27
ALLOCATE CURSOR
Ejemplo
Invocación
Autorización
Sintaxis
,
(1) (2)
CATEGORIES ALL STATUS BOTH
AUDIT FAILURE
CHECKING NONE
CONTEXT SUCCESS
WITHOUT DATA
EXECUTE
WITH DATA
OBJMAINT
SECMAINT
SYSADMIN
VALIDATE
ERROR TYPE NORMAL
AUDIT
Notas:
1 Cada una de las cláusulas CATEGORIES y ERROR TYPE puede especificarse
una vez como máximo (SQLSTATE 42614).
2 Cada categoría puede especificarse una vez como máximo (SQLSTATE 42614)
y no puede especificarse ninguna otra categoría si se especifica ALL
(SQLSTATE 42601).
Descripción
nombre-política
Identifica la política de auditoría que se va a modificar. Este nombre consta de
una sola parte. Se trata de un identificador de SQL (ordinario o delimitado). El
nombre debe identificar exclusivamente una política de auditoría en el servidor
actual (SQLSTATE 42704).
CATEGORIES
Una lista de una o más categorías de auditoría para las que se especifica un
nuevo valor de estado. Si no se especifica ALL, el STATUS de cualquier
categoría que no se especifique explícitamente permanece sin modificar.
Sentencias 29
ALTER AUDIT POLICY
ALL
Establece todas las categorías en el mismo estado. La categoría EXECUTE
es WITHOUT DATA.
AUDIT
Genera registros cuando se modifican los valores de auditoría o cuando se
accede a las anotaciones cronológicas de auditoría.
CHECKING
Genera registros durante la comprobación de autorización de intentos de
acceder o manipular funciones u objetos de base de datos.
CONTEXT
Genera registros para mostrar el contexto de operación cuando se realiza
una operación de base de datos.
EXECUTE
Genera registros para mostrar la ejecución de sentencias de SQL.
WITHOUT DATA o WITH DATA
Especifica si se proporcionan valores de datos de entrada para las
variables del lenguaje principal y deben registrarse marcadores de
parámetro como parte de la categoría EXECUTE.
WITHOUT DATA
Se proporcionan valores de datos de entrada para las variables del
lenguaje principal y no se registran marcadores de parámetro como
parte de la categoría EXECUTE.
WITH DATA
Se proporcionan valores de datos de entrada para las variables del
lenguaje principal y se registran marcadores de parámetro como
parte de la categoría EXECUTE. No se registran todos los valores
de entrada; específicamente, los parámetros de tipo estructurado,
LOB, LONG y XML aparecen como valor nulo. Los campos de
fecha, hora e indicación de fecha y hora se registran en formato
ISO. Los valores de datos de entrada se convierten a la página de
códigos de base de datos antes de registrarse. Si falla la conversión
de página de códigos, no se devuelven errores y se registran los
datos no convertidos.
OBJMAINT
Genera registros cuando se crean o descartan los objetos de datos.
SECMAINT
Genera registros cuando se otorgan o revocan privilegios de objeto,
privilegios de base de datos o la autorización DBADM. También se
generan registros cuando se modifican los parámetros de configuración de
seguridad del gestor de base de datos grupo_sysadm, grupo_sysctrl o
grupo_sysmaint.
SYSADMIN
Genera registros cuando se realizan operaciones que requieren autorización
SYSADM, SYSMAINT o SYSCTRL.
VALIDATE
Genera registros cuando se autentifican usuarios o cuando se recupera
información de seguridad del sistema relacionada con un usuario.
STATUS
Especifica un estado para la categoría especificada.
BOTH
Se auditarán los sucesos satisfactorios y anómalos.
FAILURE
Sólo se auditarán los sucesos anómalos.
SUCCESS
Sólo se auditarán los sucesos satisfactorios.
NONE
No se auditarán los sucesos de esta categoría.
ERROR TYPE
Especifica si van a devolverse o ignorarse los errores de auditoría.
NORMAL
Los errores generados por la auditoría se ignorarán y sólo se devolverán a
la aplicación los SQLCODE para los errores asociados con la operación que
se está realizando.
AUDIT
Se devuelven a la aplicación todos los errores, incluyendo los errores que
se producen dentro del propio recurso de auditoría.
Normas
v Una sentencia de SQL exclusiva de AUDIT debe ir después de una sentencia
COMMIT o ROLLBACK (SQLSTATE 5U021). Las sentencias de SQL exclusivas
de AUDIT son:
– AUDIT
– CREATE AUDIT POLICY, ALTER AUDIT POLICY o DROP (AUDIT POLICY)
– DROP (ROLE) o DROP (TRUSTED CONTEXT) si el rol o contexto fiable está
asociado a una política de auditoría.
v Una sentencia de SQL exclusiva de AUDIT no puede emitirse en una transacción
global (SQLSTATE 51041) como por ejemplo, una transacción XA.
Notas
v Sólo se permite una sentencia de SQL exclusiva de AUDIT sin confirmar a la vez
entre todas las particiones de la base de datos. Si se ejecuta una sentencia de
SQL exclusiva de AUDIT sin confirmar, las siguientes sentencias de SQL
exclusivas de AUDIT esperarán hasta que se confirme o retrotraiga la sentencia
de SQL exclusiva de AUDIT actual.
v Los cambios se graban en el catálogo del sistema, pero no surten efecto hasta
que se confirmen, incluso para la conexión que emite la sentencia.
v Si la política de auditoría que se está modificando está asociada en la actualidad
a un objeto de base de datos, los cambios no surtirán efecto hasta que el cambio
afecte a la siguiente unidad de trabajo para la aplicación. Por ejemplo, si se
utiliza la política de auditoría para la base de datos, ninguna unidad de trabajo
actual verá el cambio para la política hasta después de que se complete una
sentencia COMMIT o ROLLBACK para dicha unidad de trabajo.
Ejemplo
Sentencias 31
ALTER AUDIT POLICY
ALTER BUFFERPOOL
La sentencia ALTER BUFFERPOOL se utiliza para modificar las características o el
comportamiento de una agrupación de almacenamientos intermedios.
Invocación
Autorización
Sintaxis
IMMEDIATE
SIZE número-de-páginas
DEFERRED MEMBER número-miembro AUTOMATIC
número-de-páginas
ADD DATABASE PARTITION GROUP nombre-grupo-particiones-bd
NUMBLOCKPAGES número-de-páginas
BLOCKSIZE número-de-páginas
BLOCKSIZE número-de-páginas
Descripción
nombre-agrup-almac-interm
Indica el nombre de la agrupación de almacenamientos intermedios. Este
nombre consta de una sola parte. Se trata de un identificador de SQL
(ordinario o delimitado). Debe ser una agrupación de almacenamientos
intermedios descrita en el catálogo.
IMMEDIATE o DEFERRED
Indica si el tamaño de la agrupación de almacenamientos intermedios cambiará
de forma inmediata.
IMMEDIATE
El Tamaño de la agrupación de almacenamientos intermedios cambiará de
forma inmediata. Si no existe suficiente espacio reservado en la memoria
compartida de base de datos para asignar nuevo espacio (SQLSTATE
01657), la sentencia se ejecutará como DEFERRED.
Sentencias 33
ALTER BUFFERPOOL
DEFERRED
El tamaño de la agrupación de almacenamientos intermedios cambiará al
reactivar la base de datos (todas las aplicaciones deben desconectarse de la
base de datos). No es necesario tener espacio de memoria reservado; la
base de datos DB2 asignará la memoria necesaria del sistema en el
momento de la activación.
MEMBER número-miembro
Especifica el miembro en el que se modifica el tamaño de la agrupación de
almacenamientos intermedios. Se crea una entrada de excepción en la vista de
catálogo SYSCAT.BUFFERPOOLEXCEPTIONS. El miembro debe encontrarse en
uno de los grupos de particiones de base de datos para la agrupación de
almacenamientos intermedios (SQLSTATE 42729). Si la cláusula no se
especifica, el tamaño de la agrupación de almacenamientos intermedios se
modifica en todos los miembros con la excepción de aquellas que presentan
una entrada de excepción en SYSCAT.BUFFERPOOLEXCEPTIONS.
SIZE
Especifica un tamaño nuevo para la agrupación de almacenamientos
intermedios, o habilita o inhabilita el ajuste automático para esta agrupación de
almacenamientos intermedios.
número-de-páginas
Número de páginas para el nuevo tamaño de la agrupación de
almacenamientos intermedios. Si la agrupación de almacenamientos
intermedios ya es una agrupación de almacenamientos intermedios de
ajuste automático y se especifica la cláusula SIZE número-de-páginas, la
operación de modificación inhabilita la función de ajuste automático para
esta agrupación de almacenamientos intermedios.
AUTOMATIC
Habilita el ajuste automático para la agrupación de almacenamientos
intermedios. El gestor de bases de datos ajusta el tamaño de la agrupación
de almacenamientos intermedios como respuesta a los requisitos de carga
de trabajo. Si se especifica el número de páginas, el tamaño actual de la
agrupación de almacenamientos intermedios se establece con ese valor, a
menos que la palabra clave diferida también se especifique, en cuyo caso
se omitirá el número de páginas. Tenga en cuenta que el gestor de
memoria de ajuste automático (STMM) aplica un tamaño mínimo para las
agrupaciones de almacenamientos intermedios automáticas y que cualquier
tamaño especificado es un valor de una vez y que cuando se vuelva a
activar posteriormente la base de datos, el tamaño de la agrupación de
almacenamientos intermedios estará basado en el último valor de ajuste.
Para determinar el tamaño actual de las agrupaciones de almacenamientos
intermedios que se han habilitado para el autoajuste, utilice el mandato GET
SNAPSHOT y examine el tamaño actual de las agrupaciones de
almacenamientos intermedios (el valor del elemento de supervisor
bp_cur_buffsz). Si se especifica AUTOMATIC, la cláusula MEMBER no
puede especificarse (SQLSTATE 42601).
ADD DATABASE PARTITION GROUP nombre-grupo-particiones-bd
Añade este grupo de particiones de base de datos a la lista de grupos de
particiones de base de datos a la que se aplica la definición de agrupación de
almacenamientos intermedios. Para cualquier miembro del grupo de
particiones de base de datos que todavía no tenga la agrupación de
almacenamientos intermedios definida, para crear dicha agrupación en el
miembro se utiliza el tamaño por omisión especificado para la agrupación de
almacenamientos intermedios. Los espacios de tablas de nombre-grupo-
Notas
v Sólo el tamaño de agrupación de almacenamientos intermedios puede cambiarse
dinámicamente (inmediatamente). Todos los demás cambios se aplican de forma
diferida y sólo entrarán en vigor tras la reactivación de la base de datos.
v Si la sentencia se ejecuta como sentencia diferida, aunque la definición de
agrupación de almacenamientos intermedios sea transaccional y los cambios
realizados en la definición de agrupación de almacenamientos intermedios
aparezcan reflejados en las tablas de catálogo durante la confirmación, ningún
cambio realizado en la agrupación de almacenamientos intermedios real entrará
en vigor hasta la próxima vez que se inicie la base de datos. Los atributos
actuales de la agrupación de almacenamientos intermedios existirán hasta
entonces y no afectará a la agrupación de almacenamientos intermedios mientras
tanto. Las tablas que se han creado en los espacios de tablas de los nuevos
grupos de particiones de base de datos utilizarán la agrupación de
almacenamientos intermedios por omisión. Por omisión, la sentencia es
IMMEDIATE cuando se aplica dicha palabra clave.
v Debe haber suficiente memoria real en la máquina para el total de las
agrupaciones de almacenamientos intermedios, así como para el resto de
necesidades de espacio del gestor de bases de datos y de las aplicaciones.
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con las versiones anteriores de los productos
DB2 y con otros productos de base de datos. Estas alternativas no son estándar y
no deberían utilizarse.
– Puede especificarse DBPARTITIONNUM o NODE en lugar de MEMBER,
salvo cuando la variable de registro DB2_ENFORCE_MEMBER_SYNTAX se
establece en ON.
– NODEGROUP puede especificarse en lugar de DATABASE PARTITION
GROUP
Sentencias 35
ALTER DATABASE PARTITION GROUP
Invocación
Autorización
Sintaxis
cláusula-particiones-bd:
( partición-bd-número1 )
TO partición-bd-número2
opciones-partición-bd:
Descripción
nombre-partición-base-datos
Indica el nombre del grupo de particiones de base de datos. Este nombre
consta de una sola parte. Se trata de un identificador de SQL (ordinario o
delimitado). Debe ser un grupo de particiones de base de datos descrito en el
catálogo. No se puede especificar IBMCATGROUP ni IBMTEMPGROUP
(SQLSTATE 42832).
ADD DBPARTITIONNUM
Especifica las particiones de base de datos específicas que deben añadirse al
grupo de particiones de base de datos. DBPARTITIONNUMS es sinónimo de
DBPARTITIONNUM. Las particiones de base de datos especificadas no deben
estar definidas en el grupo de particiones de base de datos (SQLSTATE 42728).
DROP DBPARTITIONNUM
Especifica las particiones de base de datos específicas que deben descartarse
del grupo de particiones de base de datos. DBPARTITIONNUMS es sinónimo
de DBPARTITIONNUM. Las particiones de base de datos especificadas deben
estar definidas en el grupo de particiones de base de datos (SQLSTATE 42729).
cláusula-particiones-bd
Especifica las particiones de base de datos que deben añadirse o descartarse.
partición-bd-núm-1
Especifica un número de partición de base de datos específica.
TO partición-bd-número2
Especifique un rango de números de partición de base de datos. El valor
de partición-bd-número2 debe ser mayor que o igual al valor de
partición-bd-número1 (SQLSTATE 428A9).
opciones-partición-bd
LIKE DBPARTITIONNUM núm-partición-bd
Especifica que los contenedores de los espacios de tablas existentes del
grupo de particiones de base de datos serán iguales a los contenedores del
número-partición-base-de-datos especificado. La partición de base de datos
especificada debe ser una partición que ya exista en el grupo de particiones
de base de datos antes de esta sentencia, y que no esté incluida en una
cláusula DROP DBPARTITIONNUM de la misma sentencia.
Para los espacios de tablas que están definidos para utilizar el
almacenamiento automático (es decir, espacios de tablas creados con la
cláusula MANAGED BY AUTOMATIC STORAGE de la sentencia CREATE
TABLESPACE, o para las que no se ha especificado ninguna cláusula
MANAGED BY), los contenedores no coincidirán necesariamente con los
de la partición especificada. En lugar de ello, el gestor de bases de datos
asignará automáticamente los contenedores en función de las vías de
acceso de almacenamiento asociadas con la base de datos, y esto puede dar
lugar o no al uso de los mismos contenedores. El tamaño de cada espacio
de tablas se basa en el tamaño inicial especificado al crear la tabla, y es
posible que no coincida con el tamaño actual del espacio de tablas de la
partición especificada.
WITHOUT TABLESPACES
Especifica que los contenedores para los espacios de tablas existentes en el
grupo de particiones de base de datos no se crean en las particiones de
base de datos añadidas recientemente. La sentencia ALTER TABLESPACE
que utiliza la cláusula-particiones-bd o MANAGED BY AUTOMATIC
STORAGE debe utilizarse para definir los contenedores que deben
utilizarse con los espacios de tablas que se han definido en este grupo de
particiones de base de datos. Si no se especifica esta opción, los
contenedores por omisión se especifican en las particiones de base de datos
añadidas recientemente para cada espacio de tablas definido en el grupo
de particiones de base de datos.
Esta opción se pasa por alto para los espacios de tablas que se han
definido para utilizar el almacenamiento automático (es decir, los espacios
de tablas que se han creado con la cláusula MANAGED BY AUTOMATIC
STORAGE de la sentencia CREATE TABLESPACE, o para los que no se ha
especificado ninguna cláusula MANAGED BY). No existe ninguna forma
de diferir la creación de los contenedores para estos espacios de tablas. El
gestor de bases de datos asignará los contenedores automáticamente en
función de las vías de acceso de almacenamiento asociadas con la base de
Sentencias 37
ALTER DATABASE PARTITION GROUP
Normas
v Cada partición de base de datos especificada por número debe estar definida en
el archivo db2nodes.cfg (SQLSTATE 42729).
v Cada núm-partición-bd listado en la cláusula-particiones-bd debe ser para una
partición de base de datos exclusiva (SQLSTATE 42728).
v Un número de partición de base de datos válido oscila entre 0 y 999, ambos
inclusive (SQLSTATE 42729).
v Una partición de base de datos no puede aparecer en la cláusula ADD y en la
cláusula DROP al mismo tiempo (SQLSTATE 42728).
v Debe haber como mínimo una partición de base de datos que permanezca en el
grupo de particiones de base de datos. La última partición de base de datos de
un grupo de particiones de base de datos no puede descartarse (SQLSTATE
428C0).
v Si no se especifica la cláusula LIKE DBPARTITIONNUM ni la cláusula
WITHOUT TABLESPACES al añadir una partición de base de datos, por omisión
se utiliza el número de partición de base de datos más bajo de las particiones de
base de datos existentes en el grupo de particiones de base de datos (es decir, el
2) y se procede como si se hubiera especificado LIKE DBPARTITIONNUM 2.
Para que una partición de base de datos existente se utilice como partición por
omisión, debe tener contenedores definidos para todos los espacios de tablas del
grupo de particiones de base de datos (la columna IN_USE de
SYSCAT.DBPARTITIONGROUPDEF no es 'T').
v La sentencia ALTER DATABASE PARTITION GROUP puede resultar anómala
(SQLSTATE 55071) si una petición para añadir un servidor de particiones de
base de datos está pendiente o en curso. Esta sentencia puede también resultar
anómala (SQLSTATE 55077) si se añade en línea un servidor de particiones de
base de datos nuevo a la instancia y no todas las aplicaciones saben de la
existencia del servidor de particiones de base de datos nuevo.
Notas
v Cuando se añade una partición de base de datos a un grupo de particiones de
base de datos, se crea una entrada de catálogo para la partición de base de datos
(consulte SYSCAT.DBPARTITIONGROUPDEF). La correlación de distribución
cambia inmediatamente para incluir la nueva partición de base de datos, junto
con un indicador (IN_USE) que indica que la partición de base de datos se
encuentra en la correlación de distribución si se cumple una de las condiciones
siguientes:
– No se ha definido ningún espacio de tablas para el grupo de particiones de
base de datos, o bien
– No se ha definido ninguna tabla en los espacios de tablas definidos en el
grupo de particiones de base de datos y no se ha especificado la cláusula
WITHOUT TABLESPACES.
La correlación de distribución no cambia y el indicador (IN_USE) se establece
para indicar que la partición de base de datos no se incluye en la correlación de
distribución si se cumple una de las condiciones siguientes:
– Existen tablas en los espacios de tablas en el grupo de particiones de base de
datos, o bien
– Existen espacios de tablas en el grupo de particiones de base de datos y se ha
especificado la cláusula WITHOUT TABLESPACES (a menos que todos los
Ejemplo
Supongamos que tiene una base de datos de seis particiones con las particiones
siguientes: 0, 1, 2, 5, 7 y 8. Se añaden dos particiones de base de datos (3 y 6) al
sistema.
v Ejemplo 1: supongamos que desea añadir las particiones de base de datos 3 y 6 a
un grupo de particiones de base de datos denominado MAXGROUP, y que tiene
contenedores de espacios de tablas como los de la partición de base de datos 2.
La sentencia sería la siguiente:
ALTER DATABASE PARTITION GROUP MAXGROUP
ADD DBPARTITIONNUMS (3,6)LIKE DBPARTITIONNUM 2
v Ejemplo 2: supongamos que desea descartar la partición de base de datos 1 y
añadir la partición de base de datos 6 al grupo de particiones de base de datos
denominado MEDGROUP. Definirá los contenedores de espacios de tablas por
separado para la partición de base de datos 6 utilizando ALTER TABLESPACE.
La sentencia es la siguiente:
ALTER DATABASE PARTITION GROUP MEDGROUP
ADD DBPARTITIONNUM(6)WITHOUT TABLESPACES
DROP DBPARTITIONNUM(1)
Sentencias 39
ALTER DATABASE
ALTER DATABASE
La sentencia ALTER DATABASE añade nuevas vías de acceso de almacenamiento a
la colección de vías de acceso que se utilizan para los espacios de tablas de
almacenamiento automático, o elimina vías de acceso de almacenamiento existentes
de dicha colección.
Invocación
Autorización
Sintaxis
ALTER DATABASE
nombre-base-datos
,
(1)
ADD STORAGE ON 'vía_acceso_almacenamiento'
,
Notas:
1 Cada cláusula sólo puede especificarse una vez.
Descripción
nombre-base-datos
Un valor opcional que especifica el nombre de la base de datos que debe
Normas
v Para una base de datos que se ejecuta en Versión 10.1 o posterior, las
operaciones de esta sentencia se aplican al grupo de almacenamiento por
omisión para la base de datos. Si no se define ningún grupo de almacenamiento
para la base de datos, se utiliza el nombre IBMSTOGROUP.
v La vía de acceso de almacenamiento que se está añadiendo debe ser válida
según las normas de denominación y debe ser accesible (SQLSTATE 57019). De
igual modo, en un entorno de base de datos particionada, la vía de acceso de
almacenamiento debe existir y ser accesible en cada partición de base de datos
(SQLSTATE 57019).
v La vía de acceso de almacenamiento que se está descartando debe existir
actualmente en la base de datos (SQLSTATE 57019) y no puede tener ya el
estado “Descarte pendiente” (SQLSTATE 55073).
v La base de datos habilitada para el almacenamiento automático debe tener una
vía de acceso de almacenamiento como mínimo. No se pueden descartar todas
las vías de acceso de almacenamiento de la base de datos (SQLSTATE 428HH).
v No se puede ejecutar la sentencia ALTER DATABASE mientras se está
añadiendo un servidor de particiones de base de datos (SQLSTATE 55071).
v DROP STORAGE ON no se puede especificar en un entorno DB2 pureScale
(SQLSTATE 56038).
Notas
v Cuando se añaden nuevas vías de acceso de almacenamiento:
– Los espacios de tablas normales y grandes existentes que utilicen el
almacenamiento automático no utilizarán estas nuevas vías de acceso
inicialmente. El gestor de bases de datos puede elegir crear nuevos
Sentencias 41
ALTER DATABASE
Ejemplos
v Ejemplo 1: Añadir dos vías de acceso bajo el directorio /db2 (/db2/filesystem1 y
/db2/filesystem2) y una tercera vía de acceso llamada /filesystem3 a la
ubicación para los espacios de tablas de almacenamiento automático asociados
con la base de datos conectada actualmente.
ALTER DATABASE ADD STORAGE ON ’/db2/filesystem1’, ’/db2/filesystem2’,
’/filesystem3’
v Ejemplo 2: Añadir las unidades D y E al espacio para los espacios de tablas de
almacenamiento automático que está asociado con la base de datos SAMPLE.
Sentencias 43
ALTER DATABASE
Invocación
Autorización
Sintaxis
(1)
ADD LOGICAL GROUP grupo-evm
( opciones-tabla-destino )
opciones-tabla-destino:
(2)
TABLE nombre-tabla
IN nombre-espacio-tablas
PCTDEACTIVATE entero
Notas:
1 Se puede añadir un grupo lógico a los supervisores de sucesos de TABLE (no
supervisores de sucesos de UNFORMATTED EVENT TABLE).
2 Cada cláusula sólo puede especificarse una vez.
Descripción
nombre-supervisor-sucesos
El nombre-supervisor-sucesos debe identificar un supervisor de sucesos que existe
en el servidor actual y que tiene un destino para la tabla del supervisor de
sucesos de TABLE.
ADD LOGICAL GROUP
Añade un grupo lógico al supervisor de sucesos que tiene un destino para los
datos de TABLE.
Sentencias 45
ALTER EVENT MONITOR
grupo-evm
Identifica el grupo de datos lógicos para el que está añadiéndose una tabla
de destino. El valor depende del tipo de supervisor de sucesos, tal como se
muestra en la tabla siguiente:
Tabla 10. Valores para grupo-evm basados en el tipo de supervisor de sucesos
Tipo de supervisor de
sucesos Valor grupo-evm
Base de datos v DB
v CONTROL1
v DBMEMUSE
Tablas v TABLE
v CONTROL1
Puntos muertos v CONNHEADER
v DEADLOCK
v DLCONN
v CONTROL1
Puntos muertos con detalles v CONNHEADER
v DEADLOCK
v DLCONN2
v DLLOCK3
v CONTROL1
Puntos muertos con detalles e v CONNHEADER
histórico
v DEADLOCK
v DLCONN2
v DLLOCK3
v STMTHIST
v CONTROL1
Puntos muertos con detalles, v CONNHEADER
histórico y valores
v DEADLOCK
v DLCONN2
v DLLOCK3
v STMTHIST
v STMTVALS
v CONTROL1
Espacios de tablas v TABLESPACE
v CONTROL1
Agrupaciones de v BUFFERPOOL
almacenamientos intermedios
v CONTROL1
Conexiones v CONNHEADER
v CONN
v CONTROL1
v CONNMEMUSE
Sentencias 47
ALTER EVENT MONITOR
1
La cabecera de base de datos de los grupos de datos lógicos (sólo el elemento conn_time),
el inicio y el desbordamiento se graban en el grupo CONTROL. El desbordamiento se graba
si el supervisor de sucesos está en estado no bloqueado y se han descartado los sucesos.
2
Corresponde al suceso DETAILED_DLCONN.
3
Corresponde a los grupos de datos lógicos LOCK que se producen dentro de cada suceso
DETAILED_DLCONN.
4
Sólo se crea para los entornos de bases de datos particionadas.
5
Se refiere a la versión de la tabla de sucesos con formato de este tipo de supervisor de
sucesos.
TABLE nombre-tabla
Especifica el nombre de la tabla de destino. La tabla de destino debe ser
una tabla no particionada. Si el nombre es un nombre no calificado, el
esquema de tabla toma por omisión el valor del registro especial
CURRENT SCHEMA. Si no se proporciona ningún nombre, el nombre no
calificado se obtiene de grupo-evm y de nombre-supervisor-sucesos como se
indica a continuación:
substring(grupo-evm CONCAT ’_’
CONCAT nombre-supervisor-sucesos,1,128)
IN nombre-espacio-tablas
Define el espacio de tablas en el que va a crearse la tabla. Si no se
proporciona un nombre de espacio de tablas, el espacio de tablas se
selecciona utilizando el mismo proceso que cuando se crea una tabla sin
nombre de espacio de tablas utilizando la sentencia CREATE TABLE.
Al especificar un nombre de espacio de tablas para actividades, bloqueos,
paquetes de antememoria o unidades del supervisor de sucesos de trabajo,
el tamaño de la página del espacio de tablas afecta a las longitudes de
INLINE LOB utilizadas. Por lo tanto, considere la posibilidad de especificar
un espacio de tablas con el tamaño de página más grande posible para
mejorar el rendimiento de INSERT del supervisor de sucesos.
PCTDEACTIVATE entero
Si está creándose una tabla en un espacio de tablas DMS, el parámetro
PCTDEACTIVATE especifica hasta qué punto debe llenarse el espacio de
Notas
v Cuándo entran en vigor los cambios en el catálogo del sistema: los cambios se
graban en el catálogo del sistema, pero no surten efecto hasta que se confirman
y se reactiva el supervisor de sucesos.
Ejemplo
Sentencias 49
ALTER FUNCTION
ALTER FUNCTION
La sentencia ALTER FUNCTION modifica las propiedades de una función
existente.
Invocación
Autorización
Para modificar una función con el fin establecerla como no delimitada, los
privilegios del ID de autorización de la sentencia también deben incluir, como
mínimo, una de las autorizaciones siguientes:
v Autorización CREATE_NOT_FENCED_ROUTINE para la base de datos
v Autorización DBADM
Para modificar una función con el fin de que esté delimitada, no se necesita
ninguna autorización ni privilegio adicional.
Para modificar una función con el fin de establecerla como SECURED o NOT
SECURED, los privilegios del ID de autorización de la sentencia deben incluir,
como mínimo, una de las autorizaciones siguientes:
v Autorización SECADM
v Autorización CREATE_SECURE_OBJECT
Sintaxis
designador-función:
FUNCTION nombre-función
( )
,
tipo-datos
SPECIFIC FUNCTION nombre-específico
Descripción
designador-función
Identifica de forma exclusiva la función que va a modificarse. Para obtener
más información, consulte el apartado “Designadores de función, método y
procedimiento” en la página 22.
EXTERNAL NAME 'serie' o identificador
Identifica el nombre del código escrito por el usuario que implementa la
función. Esta opción sólo puede especificarse cuando se alteran funciones
externas (SQLSTATE 42849).
FENCED o NOT FENCED
Especifica si se considera que la función es segura para ejecutarse en el espacio
de dirección o en el proceso del entorno operativo del gestor de bases de datos
(NOT FENCED) o no (FENCED). La mayoría de las funciones tienen la opción
de ejecutarse como FENCED o como NOT FENCED.
Si una función se altera para que sea FENCED, el gestor de bases de datos
aísla sus recursos internos (por ejemplo, los almacenamientos intermedios de
datos) para que la función no pueda acceder a ellos. En general, una función
que se ejecute como FENCED no funcionará tan bien como otra de iguales
características que se ejecute como NOT FENCED.
PRECAUCIÓN:
El uso de NOT FENCED en funciones que no se han codificado, revisado ni
probado adecuadamente puede comprometer la integridad de una base de
datos DB2. Las bases de datos DB2 disponen de algunos mecanismos para
hacer frente a la mayoría de los tipos de errores involuntarios más habituales
que pueden producirse, pero no pueden garantizar la integridad completa
cuando se utilizan funciones NOT FENCED definidas por el usuario.
Una función declarada como NOT THREADSAFE no puede modificarse para
que sea NOT FENCED (SQLSTATE 42613).
Si una función tiene algún parámetro cuya definición sea AS LOCATOR y se
ha definido con la opción NO SQL, la función no puede modificarse para que
sea FENCED (SQLSTATE 42613).
Sentencias 51
ALTER FUNCTION
Notas
v No es posible modificar una función que esté en el esquema SYSIBM, SYSFUN o
SYSPROC (SQLSTATE 42832).
v Las funciones declaradas como LANGUAGE SQL, las funciones derivadas o las
funciones de plantilla no pueden modificarse (SQLSTATE 42917).
v Alteración de una función de NOT SECURED a SECURED: Por lo general los
usuarios con autorización SECADM no tienen privilegios para alterar objetos de
base de datos como funciones definidas por el usuario y activadores. Suelen
examinar las acciones que lleva a cabo una función, garantizar que es segura y, a
continuación, otorgar la autorización CREATE_SECURE_OBJECT a quien ya
tenga los privilegios obligatorios para alterar la función definida por el usuario
para convertirla en segura. Tras alterar la función, revocan la autorización
CREATE_SECURE_OBJECT al usuario al que se le ha otorgado.
Ejemplo
Sentencias 53
ALTER HISTOGRAM TEMPLATE
Invocación
Autorización
Sintaxis
ALTER HISTOGRAM TEMPLATE nombre-plantilla
Descripción
nombre-plantilla
Da nombre a la plantilla del histograma. Este nombre consta de una sola parte.
Se trata de un identificador de SQL (ordinario o delimitado). El nombre debe
identificar una plantilla de histograma existente en el servidor actual
(SQLSTATE 42704). El nombre de plantilla puede ser la plantilla de histograma
del sistema por omisión SYSDEFAULTHISTOGRAM.
HIGH BIN VALUE constante-bigint
Especifica el valor superior desde el segundo binario hasta el último (el último
binario tiene un valor superior no vinculado). Las unidades dependen del
modo en que se utiliza el histograma. El valor máximo es 268 435 456.
Normas
v Una sentencia de SQL exclusiva de gestión de carga de trabajo (WLM) debe ir
después de una sentencia COMMIT o ROLLBACK (SQLSTATE 5U021). Las
sentencias de SQL exclusivas de WLM son:
– CREATE HISTOGRAM TEMPLATE, ALTER HISTOGRAM TEMPLATE o
DROP (HISTOGRAM TEMPLATE)
– CREATE SERVICE CLASS, ALTER SERVICE CLASS o DROP (SERVICE
CLASS)
– CREATE THRESHOLD, ALTER THRESHOLD o DROP (THRESHOLD)
– CREATE WORK ACTION SET, ALTER WORK ACTION SET o DROP (WORK
ACTION SET)
– CREATE WORK CLASS SET, ALTER WORK CLASS SET o DROP (WORK
CLASS SET)
– CREATE WORKLOAD, ALTER WORKLOAD o DROP (WORKLOAD)
Notas
v Sólo se permite una sentencia de SQL exclusiva de WLM no confirmada a la vez
entre todas las particiones. Si se ejecuta una sentencia de SQL exclusiva de WLM
sin confirmar, las siguientes sentencias de SQL exclusivas de WLM esperarán
hasta que se confirme o retrotraiga la sentencia de SQL exclusiva de XML actual.
v Los cambios se graban en el catálogo del sistema, pero no surten efecto hasta
que se confirmen, incluso para la conexión que emite la sentencia.
Ejemplo
Sentencias 55
ALTER INDEX
ALTER INDEX
La sentencia ALTER INDEX modifica la definición de un índice.
Invocación
Autorización
Sintaxis
ALTER INDEX nombre-índice COMPRESS NO
YES
Descripción
INDEX nombre-índice
Identifica el índice que se va a modificar. El nombre debe identificar un índice
existente en el servidor actual (SQLSTATE 42704).
COMPRESS
Especifica si hay que habilitar o inhabilitar la compresión de índice. El índice
no debe ser un índice de bloque MDC o ITC, un índice de catálogo, un índice
de vía de acceso XML, una especificación de índice o un índice en una tabla
temporal creada o declarada (SQLSTATE 42995).
NO Especifica que la compresión de índice está inhabilitada. Un índice
comprimido permanecerá comprimido hasta que se vuelva a crear
mediante la reorganización o recreación.
YES
Especifica que la compresión de índice está habilitada. Un índice sin
comprimir permanecerá sin comprimir hasta que se vuelva a crear
mediante la reorganización o recreación.
Ejemplo
Modificar el índice JOB_BY_DPT para que sea comprimido.
ALTER INDEX JOB_BY_DPT
COMPRESS YES
ALTER MASK
La sentencia ALTER MASK modifica una máscara de columna que existe en el
servidor actual.
Invocación
Autorización
Sintaxis
ALTER MASK nombre-máscara ENABLE
DISABLE
Descripción
nombre-máscara
Identifica la máscara de columna que se va a modificar. El nombre debe
identificar una máscara existente en el servidor actual (SQLSTATE 42704).
ENABLE
Habilita la máscara de columna. Si el control de acceso de nivel de columna no
está activado actualmente en la tabla, el permiso de columna será efectivo
cuando se active el control de acceso de nivel de columna en la tabla. Si el
control de acceso de nivel de columna está activado actualmente para la tabla,
la máscara de columna será efectiva inmediatamente y todos los paquetes y las
sentencias colocadas dinámicamente en antememoria que hacen referencia a la
tabla se invalidarán.
La sentencia ENABLE se ignorará si la máscara de columna ya está habilitada.
DISABLE
Inhabilita la máscara de columna. Si el control de acceso de nivel de columna
no está activado actualmente en la tabla, el permiso de columna seguirá sin ser
efectivo cuando se active el control de acceso de nivel de columna en la tabla.
Si el control de acceso de nivel de columna está activado actualmente para la
tabla, la máscara de columna dejará de ser efectiva inmediatamente y todos los
paquetes y las sentencias colocados dinámicamente en antememoria que hacen
referencia a la tabla se invalidarán.
La sentencia DISABLE se ignorará si la máscara de columna ya está
inhabilitada.
Ejemplos
v Ejemplo 1: habilitar máscara de columna M1.
ALTER MASK M1 ENABLE
v Ejemplo 2: inhabilitar máscara de columna M1.
ALTER MASK M1 DISABLE
Sentencias 57
ALTER METHOD
ALTER METHOD
La sentencia ALTER METHOD modifica un método existente cambiando el cuerpo
de método que se asocia al método.
Invocación
Autorización
Sintaxis
ALTER designador-método EXTERNAL NAME 'serie'
identificador
designador-método:
Descripción
designador-método
Identifica de forma exclusiva el método que va a modificarse. Para obtener
más información, consulte el apartado “Designadores de función, método y
procedimiento” en la página 22.
EXTERNAL NAME 'serie' o identificador
Identifica el nombre del código escrito por el usuario que implementa el
método. Esta opción sólo puede especificarse cuando se alteran métodos
externos (SQLSTATE 42849).
Notas
v No es posible modificar un método que esté en el esquema SYSIBM, SYSFUN o
SYSPROC (SQLSTATE 42832).
v Los métodos declarados como LANGUAGE SQL no pueden modificarse
(SQLSTATE 42917).
Ejemplo
Altere el método DISTANCE() del tipo estructurado ADDRESS_T para que utilice
la biblioteca newaddresslib.
ALTER METHOD DISTANCE()
FOR ADDRESS_T
EXTERNAL NAME ’newaddresslib!distance2’
Sentencias 59
ALTER MODULE
ALTER MODULE
La sentencia ALTER MODULE modifica la definición de un módulo.
Invocación
Autorización
Sintaxis
ALTER MODULE nombre-módulo
ADD definición-condición-módulo
definición-función-módulo
definición-procedimiento-módulo
definición-tipo-módulo
definición-variable-módulo
DROP BODY
identificación-objeto-módulo
PUBLISH definición-condición-módulo
definición-función-módulo
definición-procedimiento-módulo
definición-tipo-módulo
definición-variable-módulo
definición-condición-módulo:
CONDITION nombre-condición
VALUE
SQLSTATE
FOR constante-serie
identificación-objeto-módulo:
designador-función-módulo
designador-procedimiento-módulo
CONDITION nombre-condición
TYPE nombre-tipo
VARIABLE nombre-variable
designador-función-módulo:
FUNCTION nombre-función-no-calificada
( )
,
tipo-datos
SPECIFIC FUNCTION nombre-específico-no-calificado
designador-procedimiento-módulo:
PROCEDURE nombre-procedimiento-no-calificado
( )
,
tipo-datos
SPECIFIC PROCEDURE nombre-específico-no-calificado
Descripción
module-name
Identifica el módulo que se va a modificar. El nombre-módulo debe identificar
un módulo que exista en el servidor actual (SQLSTATE 42704).
ADD
Añade un objeto al módulo o añade el cuerpo a una definición de rutina que
ya existe en el módulo sin un cuerpo. Si se añade un tipo definido por el
usuario o una variable global, el objeto no debe identificar un tipo definido por
el usuario o una variable global que ya exista en el módulo. Si el tipo definido
por el usuario o la variable global no existía, se añade al módulo para
utilizarse solamente en ese módulo.
Si se añade una rutina y la rutina especificada no existe, se añade la rutina. Si
se añade una rutina y la rutina especificada existe, la definición de rutina
existente no debe incluir un cuerpo de rutina (SQLSTATE 42723). Este
prototipo de rutina se sustituye completamente por la nueva definición de
rutina, incluidos los atributos de rutina y el cuerpo de rutina, excepto que se
retiene el atributo publicado. Se considera que la rutina especificada existe si
una de las condiciones siguientes es verdadera:
v Existe una rutina en el módulo con el mismo nombre específico y el mismo
nombre de rutina.
v La rutina especificada es un procedimiento y existe un procedimiento en el
módulo que tiene el mismo nombre y el mismo número de parámetros. No
es necesario que los nombres y tipos de datos de los parámetros coincidan.
v La rutina especificada es una función y existe una función en el módulo que
tiene el mismo nombre y el mismo número de parámetros con tipos de datos
coincidentes. La longitud, la precisión y la escala de los tipos de datos de
parámetro no se comparan y pueden ser distintos al determinar si la rutina
especificada existe. No es necesario que los nombres de los parámetros
coincidan.
definición-condición-módulo
Añade una condición de módulo.
nombre-condición
Nombre de la condición. El nombre no debe identificar una condición
existente en el módulo. El nombre-condición debe especificarse sin
ninguna calificación (SQLSTATE 42601). El nombre de la condición
debe ser exclusivo dentro del módulo.
Sentencias 61
ALTER MODULE
Sentencias 63
ALTER MODULE
Sentencias 65
ALTER MODULE
Normas
v Los nombres de objetos en el módulo no pueden empezar por “SYS_”, a
excepción del nombre de procedimiento específicamente designado SYS_INIT
(SQLSTATE 42939).
v ALTER MODULE DROP FUNCTION: Si se hace referencia a la función en la definición
de un permiso de fila o una máscara de columna, no se puede descartar la
función (SQLSTATE 42893).
v ALTER MODULE DROP VARIABLE: Si se hace referencia a la variable en la definición
de un permiso de fila o una máscara de columna, no se puede descartar la
variable (SQLSTATE 42893).
v ALTER MODULE DROP BODY: Si se hace referencia al módulo en la definición de un
permiso de fila o una máscara de columna, no se puede descartar el módulo
(SQLSTATE 42893).
Notas
v Inicialización de módulo: un módulo puede tener un procedimiento de
inicialización especial denominado SYS_INIT que se ejecuta de forma implícita
cuando se hace la primera referencia a una rutina de módulo o variable global
de módulo. El procedimiento SYS_INIT debe implementarse sin parámetros, no
puede devolver conjuntos de resultados y puede ser un procedimiento externo o
de SQL que no puede publicarse (SQLSTATE 428HP). Si falla el procedimiento
SYS_INIT, se devolverá un error para la sentencia que causó la inicialización de
módulo (SQLSTATE 56098).
v Uso de condiciones de módulo: una condición de módulo solamente puede
utilizarse con una sentencia SIGNAL, una sentencia RESIGNAL o una
declaración de manejador que se encuentre dentro de una sentencia de SQL
compuesto (compilado).
v Invalidación: si un prototipo de rutina se sustituye usando la acción ADD, se
invalidarán todos los objetos que dependen de la rutina de módulo publicada. Si
se emite DROP BODY, se invalidarán todos los objetos que dependen de rutinas
de módulo publicadas.
v Ofuscación: las sentencias ALTER MODULE ADD FUNCTION, ALTER
MODULE ADD PROCEDURE, ALTER MODULE PUBLISH FUNCTION y
ALTER MODULE PUBLISH PROCEDURE se pueden enviar en formato
ofuscado. En una sentencia ofuscada, solamente son legibles el nombre de la
rutina y sus parámetros. El resto de la sentencia se codifica de tal manera que no
es legible, pero que el servidor de bases de datos puede descodificar. Las
sentencias ofuscadas se pueden generar mediante una llamada a la función
DBMS_DDL.WRAP.
Ejemplo
Sentencias 67
ALTER NICKNAME
ALTER NICKNAME
La sentencia ALTER NICKNAME modifica la información de apodo asociada a un
objeto de fuente de datos (por ejemplo, una tabla, una vista o un archivo).
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 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
Sintaxis
,
COLUMN (1)
ALTER nombre-columna LOCAL NAME nombre-columna
LOCAL TYPE tipo-datos-local
(2)
opciones-columna-federada
ADD restricción-unicidad
restricción-referencia
restricción-comprobación
ALTER FOREIGN KEY nombre-restricción modificación-restricción
CHECK
DROP PRIMARY KEY
FOREIGN KEY nombre-restricción
UNIQUE
CHECK
CONSTRAINT
ALLOW CACHING
DISALLOW CACHING
tipo-datos-locales:
tipo-incorporado
nombre-tipo-diferenciado
tipo-incorporado:
Sentencias 69
ALTER NICKNAME
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(1)
CHARACTER
CHAR (entero) FOR BIT DATA
VARCHAR (entero)
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
opciones-columna-federada:
,
ADD
OPTIONS ( nombre-opción-columna constante-serie )
SET
DROP nombre-opción-columna
restricción-unicidad:
UNIQUE
CONSTRAINT nombre-restricción PRIMARY KEY
( nombre-columna ) atributos-restricción
restricción-referencia:
cláusula-referencias
cláusula-referencias:
REFERENCES nombre-tabla
apodo ,
( nombre-columna )
atributos-restricción
restricción-comprobación:
CHECK ( nombre-comprobación )
CONSTRAINT nombre-restricción
atributos-restricción
condición-error:
condición-búsqueda
dependencia-funcional
dependencia-funcional:
( nombre-columna ) ( nombre-columna )
atributos-restricción:
Sentencias 71
ALTER NICKNAME
modificación-restricción:
(4)
ENABLE QUERY OPTIMIZATION
DISABLE
TRUSTED
NOT ENFORCED
NOT TRUSTED
Notas:
1 No se puede especificar la cláusula ALTER COLUMN y una cláusula de
restricción informativa ADD, ALTER o DROP en la misma sentencia ALTER
NICKNAME.
2 Si debe especificar la cláusula opciones-columna-federada además del
parámetro LOCAL NAME, el parámetro LOCAL TYPE o ambos, debe
especificar la cláusula opciones-columna-federada en último lugar.
3 No se da soporte a DISABLE QUERY OPTIMIZATION para una restricción
de clave primaria o exclusiva.
4 Una misma cláusula no se debe especificar más de una vez.
Descripción
apodo
Identifica el apodo para el objeto de fuente de datos (por ejemplo una tabla,
una vista o un archivo) que contiene la columna que se está modificando. Debe
ser un apodo descrito en el catálogo.
OPTIONS
Indica las opciones de apodo que se añaden, se establecen o se descartan
cuando se modifica el apodo.
ADD
Añade una opción de apodo.
SET
Cambia el valor de una opción de apodo.
nombre-opción-apodo
Nombra una opción de apodo que se debe añadir o establecer.
constante-serie
Especifica el valor para nombre-opción-apodo como una constante de serie de
caracteres.
DROP nombre-opción-apodo
Descarta una opción de apodo.
ALTER COLUMN nombre-columna
Los nombres de la columna que se deben modificar. El nombre-columna es el
nombre actual del servidor federado para la columna de la tabla o la vista de
la fuente de datos. El nombre-columna debe identificar una columna existente
Sentencias 73
ALTER NICKNAME
modificación-restricción
Ofrece opciones para cambiar los atributos asociados a restricciones de
referencia o de comprobación.
ENABLE QUERY OPTIMIZATION
La restricción puede utilizarse para la optimización de la consulta cuando
se dan las circunstancias adecuadas.
DISABLE QUERY OPTIMIZATION
No se puede utilizar la restricción para la optimización de consulta.
NOT ENFORCED
Especifica que el gestor de bases de datos no implanta la restricción
durante operaciones normales como, por ejemplo, insertar, actualizar o
suprimir.
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 realmente
a la restricción. Es la opción por omisión.
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).
DROP PRIMARY KEY
Descarta la definición de la clave primaria y todas las restricciones de
referencia que dependen de esta clave primaria. El apodo debe tener una clave
primaria.
DROP FOREIGN KEY nombre-restricción
Descarta la restricción de referencia nombre-restricción. El nombre-restricción debe
identificar una restricción de referencia existente, definida en el apodo.
DROP UNIQUE nombre-restricción
Descarta la definición de la restricción exclusiva nombre-restricción y todas las
restricciones de referencia que dependen de esta restricción exclusiva. El
nombre-restricción debe identificar una restricción exclusiva existente.
DROP CHECK nombre-restricción
Descarta la restricción de comprobación nombre-restricción. El nombre-restricción
debe identificar una restricción de comprobación existente, definida en el
apodo.
DROP CONSTRAINT nombre-restricción
Descarta la restricción nombre-restricción. El nombre-restricción debe identificar
una restricción de comprobación, una restricción de referencia, una clave
primaria o una restricción exclusiva definida en el apodo.
ALLOW CACHING o DISALLOW CACHING
Especifica si el apodo se puede referenciar en una consulta que defina una
Normas
v Si se utiliza un apodo en una vista, método SQL o función SQL, o se definen
sobre la misma restricciones informativas, la sentencia ALTER NICKNAME no
se puede utilizar para cambiar los nombres locales o los tipos de datos para las
columnas del apodo (SQLSTATE 42893). Sin embargo, la sentencia se puede
utilizar para añadir, establecer o descartar opciones de columna, opciones de
apodo o restricciones informativas.
v Si una definición de tabla de consulta materializada hace referencia a un apodo,
la sentencia ALTER NICKNAME no se puede utilizar para cambiar los nombres
locales, los tipos de datos, las opciones de columna ni las opciones de apodo
(SQLSTATE 42893). Además, la sentencia no se puede utilizar para inhabilitar el
almacenamiento en antememoria (SQLSTATE 42917). Sin embargo, la sentencia
se puede utilizar para añadir, modificar o descartar restricciones informativas.
v No se puede especificar una opción de columna más de una vez en la misma
sentencia ALTER NICKNAME (SQLSTATE 42853). Cuando se habilita, restaura o
descarta una opción de columna, no afecta a ninguna otra opción de columna
que se esté utilizando.
v Para apodos relacionales, la sentencia ALTER NICKNAME de una unidad de
trabajo (UOW) determinada no se puede procesar bajo ninguna de las
condiciones siguientes (SQLSTATE 55007):
– Un apodo al que se hace referencia en esta sentencia tiene un cursor abierto
en la misma UOW
– Ya se ha emitido una sentencia INSERT, DELETE o UPDATE en la misma
UOW para el apodo al que se hace referencia en esta sentencia
v Para apodos no relacionales, la sentencia ALTER NICKNAME de una unidad de
trabajo (UOW) determinada no puede procesarse bajo ninguna de las
condiciones siguientes (SQLSTATE 55007):
– Un apodo al que se hace referencia en esta sentencia tiene un cursor abierto
en la misma UOW
– Una sentencia SELECT de la misma UOW ya hace referencia a un apodo al
que se hace referencia en esta sentencia
– Ya se ha emitido una sentencia INSERT, DELETE o UPDATE en la misma
UOW para el apodo al que se hace referencia en esta sentencia
Sentencias 75
ALTER NICKNAME
Notas
v Si se utiliza la sentencia ALTER NICKNAME para cambiar el nombre local de
una columna de un apodo, las consultas deben hacer referencia a esa columna
por su nuevo nombre.
v Cuando se cambia la especificación local del tipo de datos de una columna, el
gestor de bases de datos invalida cualquier estadística (HIGH2KEY, LOW2KEY,
etcétera) reunida para esa columna.
v Almacenamiento en antememoria y objetos protegidos: Para apodos cuyo objeto
de la fuente de datos está protegido, especifique DISALLOW CACHING. Esto
garantiza que cada vez que se utiliza el apodo, se devuelven los datos del ID de
autorización apropiados desde la fuente de datos en el momento de la ejecución
de la consulta. Esto se realiza limitando el uso del apodo en la definición de una
tabla de consulta materializada en el servidor federado, que podría utilizarse
para guardar en la antememoria los datos de apodo.
Ejemplos
v Ejemplo 1: El apodo NICK1 hace referencia a una tabla de DB2 para i
denominada T1. También, COL1 es el nombre local que hace referencia a la
primera columna de esta tabla, C1. Cambie el nombre local COL1 de C1 por
NEWCOL.
ALTER PACKAGE
La sentencia ALTER PACKAGE modifica las opciones de vinculación de un
paquete en el servidor actual sin necesidad de vincular o volver a vincular el
paquete.
Invocación
Autorización
(1)
ACCESS PLAN REUSE YES
NO
OPTIMIZATION PROFILE NONE
nombre-perfil-optimización
KEEP DYNAMIC YES
NO
Notas:
1 Una misma cláusula no se debe especificar más de una vez.
Descripción
nombre-esquema.id-paquete
Identifica el paquete que se debe modificar. Si no se ha especificado un nombre
de esquema, el esquema por omisión calificará implícitamente el ID de
paquete. El nombre de esquema y el ID de paquete, junto con el ID de versión
especificado de forma implícita o explícita, deben identificar un paquete que
exista en el servidor actual (SQLSTATE 42704).
VERSION id-versión
Identifica qué versión del paquete va a descartarse. Si no se especifica un
valor, la versión tomará por omisión una serie de caracteres vacía. Si
existen varios paquetes con el mismo nombre de paquete pero con distinta
versión, sólo puede modificarse una versión del paquete en una invocación
de la sentencia ALTER. Delimite el identificador de versión con comillas
dobles cuando:
v Se genera mediante la opción del precompilador VERSION(AUTO)
v Comienza con un dígito
Sentencias 77
ALTER PACKAGE
NO
Indica al contexto SQL que elimine el texto y la sección de la sentencia
asociados a sentencias preparadas al final de cada unidad de trabajo. Las
versiones ejecutables de las sentencias preparadas y el texto de las
sentencias en los paquetes vinculados con la opción KEEP DYNAMIC NO se
eliminan del contexto SQL en los límites de transacciones. El cliente, el
controlador o la aplicación tiene que preparar cualquier sentencia de SQL
dinámico que desee reutilizar en una nueva unidad de trabajo.
En el caso de aplicaciones remotas que utilizan una API no incorporada de
IBM, una vez que se haya asegurado de que las sentencias se prepararán
en transacciones nuevas, puede utilizar esta opción para que WLB no se
rechace exclusivamente en función del comportamiento de KEEP DYNAMIC.
No obstante, incluso con esta opción, WLB puede rechazarse por otros
motivos.
Las sentencias SELECT emitidas con cursores con la opción WITH HOLD
quedan desasociadas del contexto de SQL en el siguiente límite de
transacción en el que se cierre el cursor. Como resultado de ello, el
equilibrio de carga de trabajo se permite siempre que no haya ninguna
versión ejecutable de sentencias preparadas asociadas con la aplicación en
el contexto SQL.
Notas
v Los valores de vista de catálogo podrían no reflejar la configuración que
estaba vigente para el paquete: dado que esta sentencia no activa una
revinculación del paquete, es posible que la configuración de un paquete, tal y
como se muestra en la vista de catálogo SYSCAT.PACKAGES, no refleje los
valores que estaban vigentes realmente durante la última operación BIND o
REBIND. Podría producirse la situación anterior si ALTER_TIME es mayor que
LAST_BIND_TIME.
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con los mandatos BIND y REBIND. Estas
alternativas no son estándar y no deberían utilizarse.
– Puede especificarse APREUSE en lugar de ACCESS PLAN REUSE.
– Puede especificarse OPTPROFILE en lugar de OPTIMIZATION PROFILE.
– Puede especificarse KEEPDYNAMIC en lugar de KEEP DYNAMIC.
Ejemplos
Sentencias 79
ALTER PACKAGE
sentencia específica del paquete. Asociar el perfil de optimización con este paquete
para que omita la reutilización del plan de acceso para la sentencia.
ALTER PACKAGE TRUUVERT.EMPADMIN OPTIMIZATION PROFILE AYYANG.INDEXHINTS
ALTER PERMISSION
La sentencia ALTER PERMISSION altera un permiso de fila en el servidor actual.
Invocación
Autorización
Sintaxis
ALTER PERMISSION nombre-permiso ENABLE
DISABLE
Descripción
nombre-permiso
Especifica el nombre del permiso de fila que se va a modificar. El nombre debe
identificar un permiso de fila que ya existe en el servidor actual (SQLSTATE
42704). El nombre no debe identificar un permiso de fila por omisión que se ha
creado de forma implícita mediante el gestor de bases de datos (SQLSTATE
428H9).
ENABLE
Habilita el permiso de fila. Si el control de acceso de nivel de fila no está
activado actualmente en la tabla, el permiso de fila será efectivo cuando se
active el control de acceso de nivel de fila en la tabla. Si el control de acceso de
nivel de fila está activado actualmente para la tabla, el permiso de fila será
efectivo inmediatamente y todos los paquetes y las sentencias en memoria
caché dinámicas que hacen referencia a la tabla se invalidarán.
ENABLE se ignorará si el permiso de fila ya está definido como habilitado.
DISABLE
Inhabilita el permiso de fila. Si el control de acceso de nivel de fila no está
activado actualmente en la tabla, el permiso de fila no será efectivo cuando se
active el control de acceso de nivel de fila en la tabla. Si el control de acceso de
nivel de fila está activado actualmente para la tabla, el permiso de fila dejará
de ser efectivo inmediatamente y todos los paquetes y las sentencias en
memoria caché dinámicas que hacen referencia a la tabla se invalidarán.
DISABLE se ignorará si el permiso de fila ya está definido como inhabilitado.
Ejemplos
v Ejemplo 1: habilitar permiso P1.
ALTER PERMISSION P1 ENABLE
v Ejemplo 2: inhabilitar permiso P1.
ALTER PERMISSION P1 DISABLE
Sentencias 81
ALTER PROCEDURE (externo)
Invocación
Autorización
Sintaxis
ALTER designador-procedimiento
designador-procedimiento:
PROCEDURE nombre-procedimiento
( )
,
tipo-datos
SPECIFIC PROCEDURE nombre-específico
Descripción
designador-procedimiento
Identifica el procedimiento a modificar. El designador-procedimiento debe
identificar un procedimiento que exista en el servidor actual. Se conservan el
propietario del procedimiento y todos los privilegios en el procedimiento. Para
obtener más información, consulte el apartado “Designadores de función,
método y procedimiento” en la página 22.
EXTERNAL NAME 'serie' o identificador
Identifica el nombre del código escrito por el usuario que implementa el
procedimiento.
FENCED o NOT FENCED
Especifica si se considera que el procedimiento es seguro para ejecutarse en el
espacio de dirección o en el proceso del entorno operativo del gestor de bases
de datos (NOT FENCED) o no (FENCED). La mayoría de los procedimientos
tienen la opción de ejecutarse como FENCED o como NOT FENCED.
Si un procedimiento se altera para que sea FENCED, el gestor de bases de
datos aísla sus recursos internos (por ejemplo, los almacenamientos
intermedios de datos) para que el procedimiento no pueda acceder a ellos. En
general, un procedimiento que se ejecute como FENCED no funcionará tan
bien como otro de iguales características que se ejecute como NOT FENCED.
PRECAUCIÓN:
El uso de NOT FENCED en procedimientos que no se han codificado,
revisado ni probado adecuadamente puede comprometer la integridad de
una base de datos DB2. Las bases de datos DB2 disponen de algunos
mecanismos para hacer frente a la mayoría de los tipos de errores
involuntarios más habituales que pueden producirse, pero no pueden
garantizar la integridad completa cuando se utilizan procedimientos
almacenados NOT FENCED.
Un procedimiento declarado como NOT THREADSAFE no puede modificarse
para que sea NOT FENCED (SQLSTATE 42613).
Si un procedimiento tiene algún parámetro cuya definición sea AS LOCATOR
y se ha definido con la opción NO SQL, el procedimiento no puede
modificarse para que sea FENCED (SQLSTATE 42613).
Esta opción no se puede modificar para los procedimientos LANGUAGE OLE
ni CLR (SQLSTATE 42849).
EXTERNAL ACTION o NO EXTERNAL ACTION
Especifica si el procedimiento realiza alguna acción que cambia el estado de un
objeto que el gestor de bases de datos no gestiona (EXTERNAL ACTION) o no
(NO EXTERNAL ACTION). Si se especifica NO EXTERNAL ACTION, el
sistema puede utilizar determinadas optimizaciones que suponen que el
procedimiento no tiene ningún impacto externo.
Sentencias 83
ALTER PROCEDURE (externo)
Normas
v No es posible modificar un procedimiento que esté en el esquema SYSIBM,
SYSFUN o SYSPROC (SQLSTATE 42832).
Ejemplo
Invocación
Autorización
Sintaxis
ALTER designador-procedimiento
designador-procedimiento:
PROCEDURE nombre-procedimiento
( )
,
tipo-datos
SPECIFIC PROCEDURE nombre-específico
modificación-parámetro:
Descripción
designador-procedimiento
Identifica de forma exclusiva el procedimiento que va a modificarse. El
procedimiento identificado debe ser un procedimiento derivado (SQLSTATE
42849). Para obtener más información, consulte el apartado “Designadores de
función, método y procedimiento” en la página 22.
Sentencias 85
ALTER PROCEDURE (derivado)
nombre-parámetro
Identifica el parámetro que se debe modificar. El nombre-parámetro debe
identificar un parámetro existente del procedimiento (SQLSTATE 42703). El
nombre no debe identificar un parámetro que de algún otro modo se esté
modificando en la misma sentencia ALTER PROCEDURE (SQLSTATE 42713).
tipo-datos
Especifica el nuevo tipo de datos local del parámetro. Se pueden especificar
abreviaturas y especificaciones de tipo de datos SQL que sean válidas para la
definición de tipo-datos de una sentencia CREATE TABLE. Los tipos BLOB,
CLOB, DBCLOB, DECFLOAT, XML, REFERENCE y definidos por el usuario
no están soportados (SQLSTATE 42815).
Ejemplo
Invocación
Autorización
Sintaxis
designador-procedimiento:
PROCEDURE nombre-procedimiento
( )
,
tipo-datos
SPECIFIC PROCEDURE nombre-específico
Descripción
designador-procedimiento
Identifica el procedimiento a modificar. El designador-procedimiento debe
identificar un procedimiento que exista en el servidor actual. Se conservan el
propietario del procedimiento y todos los privilegios en el procedimiento. Para
obtener más información, consulte el apartado “Designadores de función,
método y procedimiento” en la página 22.
EXTERNAL ACTION o NO EXTERNAL ACTION
Especifica si el procedimiento realiza alguna acción que cambia el estado de un
objeto que el gestor de bases de datos no gestiona (EXTERNAL ACTION) o no
(NO EXTERNAL ACTION). Si se especifica NO EXTERNAL ACTION, el
sistema puede utilizar determinadas optimizaciones que suponen que el
procedimiento no tiene ningún impacto externo.
Sentencias 87
ALTER PROCEDURE (SQL)
Normas
v No es posible modificar un procedimiento que esté en el esquema SYSIBM,
SYSFUN o SYSPROC (SQLSTATE 42832).
Ejemplo
ALTER SCHEMA
La sentencia ALTER SCHEMA modifica el atributo de captura de datos de un
esquema existente.
Invocación
Autorización
Sintaxis
ALTER SCHEMA nombre-esquema DATA CAPTURE NONE
CHANGES
Descripción
nombre-esquema
Identifica el esquema que se debe alterar. El nombre-esquema debe identificar un
esquema que exista en el servidor actual (SQLSTATE 42704).
DATA CAPTURE
Indica si debe grabarse información adicional para la duplicación de datos en
las anotaciones cronológicas.
NONE
Indica que no se va a anotar cronológicamente ninguna información
adicional de duplicación de datos.
CHANGES
Indica que en el archivo de anotaciones cronológicas se registrará
información adicional referente a los cambios de SQL efectuados en este
esquema. Esta opción es necesaria para duplicar este esquema y cuando se
utiliza el programa de captura de duplicación para capturar los cambios
contenidos en el archivo de anotaciones cronológicas para este esquema.
Notas
v Modificar el atributo DATA CAPTURE en el nivel de esquema hace que las
tablas recién creadas hereden el atributo DATA CAPTURE del esquema si no se
especifica uno en el nivel de tabla. Modificar el atributo DATA CAPTURE en el
nivel de esquema no afecta al atributo DATA CAPTURE de las tablas existentes
dentro de ese esquema. Si el atributo DATA CAPTURE cambia y las tablas
existentes no coinciden con el nuevo atributo, se devuelve un aviso (SQLSTATE
01696).
v Para buscar la lista de tablas que tienen el atributo DATA CAPTURE establecido
en CHANGES, emita la consulta siguiente:
Sentencias 89
ALTER SCHEMA
Invocación
Autorización
Sintaxis
cláusula-añadir-elemento:
cláusula-elemento-matriz:
BEFORE constante-serie
AFTER
cláusula-elemento-árbol:
ROOT
UNDER constante-serie
,
OVER constante-serie
Descripción
nombre-componente
Especifica el nombre del componente de etiqueta de seguridad que se va a
modificar. El componente con nombre debe existir en el servidor actual
(SQLSTATE 42704).
ADD ELEMENT
Especifica el elemento que se va a añadir al componente de etiqueta de
seguridad. Si no se especifican la cláusula-elemento-matriz y la
cláusula-elemento-árbol, el elemento se añade a un componente de conjunto.
constante-serie
Valor de constante de serie que se va a añadir al conjunto de valores
válidos del componente de etiqueta de seguridad. El valor no puede ser el
Sentencias 91
ALTER SECURITY LABEL COMPONENT
Normas
v Los nombres de elementos no pueden contener ninguno de estos caracteres
(SQLSTATE 42601):
– Paréntesis de apertura - (
– Paréntesis de cierre - )
– Coma - ,
– Dos puntos - :
v Un nombre de elemento no puede tener más de 32 bytes (SQLSTATE 42622).
v Si un componente de etiqueta de seguridad es un conjunto o un árbol, no
podrán formar parte de este componente más de 64 elementos.
v Si el componente es una matriz, puede que sea posible o no llegar a una matriz
cuyo número total de elementos coincida con el número total de elementos que
se podían especificar al crear un componente de etiqueta de seguridad de tipo
de matriz (65.535). DB2 asigna un valor codificado al nuevo elemento desde
dentro del intervalo en el que se añade el nuevo elemento. Según el patrón que
se siga al añadir elementos a un componente de matriz, el número de valores
posibles que se pueden asignar desde un intervalo determinado puede agotarse
rápidamente si se insertan varios elementos en dicho intervalo.
Notas
v Para un componente de conjunto, no existe ningún orden en los elementos del
conjunto.
Ejemplos
v Ejemplo 1: añada el elemento 'High classified' al componente de matriz de
etiqueta de seguridad LEVEL entre los elementos 'Secret' y 'Classified'.
ALTER SECURITY LABEL COMPONENT LEVEL
ADD ELEMENT ’High classified’ BEFORE ’Classified’
v Ejemplo 2: añada el elemento 'Funding' al componente de conjunto de etiqueta de
seguridad COMPARTMENTS.
ALTER SECURITY LABEL COMPONENT COMPARTMENTS
ADD ELEMENT ’Funding’
v Ejemplo 3: añada los elementos 'ENGINE' y 'TOOLS' al componente de matriz de
etiqueta de seguridad GROUPS. El diagrama siguiente muestra dónde se van a
colocar estos nuevos elementos.
PROJECT
________|________
| |
ENGINE TOOLS
________|________
| |
TEST DEVELOPMENT
______|______
| |
CURRENT FIELD
Sentencias 93
ALTER SECURITY POLICY
Invocación
Autorización
Sintaxis
ALTER SECURITY POLICY nombre-política-seguridad
(1)
ADD SECURITY LABEL COMPONENT nombre-componente
OVERRIDE NOT AUTHORIZED WRITE SECURITY LABEL
RESTRICT NOT AUTHORIZED WRITE SECURITY LABEL
USE GROUP AUTHORIZATIONS
IGNORE GROUP AUTHORIZATIONS
USE ROLE AUTHORIZATIONS
IGNORE ROLE AUTHORIZATIONS
Notas:
1 Sólo la cláusula ADD SECURITY LABEL COMPONENT puede especificarse
más de una vez.
Descripción
nombre-política-seguridad
Especifica el nombre de la política de seguridad que se va a modificar. El
nombre debe identificar una política de seguridad existente en el servidor
actual (SQLSTATE 42710).
ADD SECURITY LABEL COMPONENT nombre-componente
Añade un componente de etiqueta de seguridad a la política de seguridad. No
se debe especificar el mismo componente de seguridad más de una vez para la
política de seguridad (SQLSTATE 42713). Una tabla no puede estar utilizando
actualmente la política de seguridad (SQLSTATE 42893).
OVERRIDE NOT AUTHORIZED WRITE SECURITY LABEL o RESTRICT NOT AUTHORIZED
WRITE SECURITY LABEL
Especifica la acción que se lleva a cabo cuando un usuario no está autorizado
para grabar la etiqueta de seguridad explícitamente especificada que se
proporciona en la sentencia INSERT o UPDATE emitida sobre una tabla que
está protegida con esta política de seguridad. Una etiqueta de seguridad del
usuario y las credenciales de exención determinan la autorización del usuario
para grabar una etiqueta de seguridad proporcionada explícitamente.
Normas
v Si un usuario no dispone directamente de una etiqueta de seguridad para el
acceso de grabación, se devuelve un error en las situaciones siguientes
(SQLSTATE 42519):
– Un valor de la columna de etiqueta de seguridad de fila no se proporciona
explícitamente como parte de la sentencia de SQL
– La opción OVERRIDE NOT AUTHORIZED WRITE SECURITY LABEL está en
vigor para la política de seguridad y no se permite que el usuario grabe un
objeto de datos con la etiqueta de seguridad proporcionada
Notas
v Los nuevos componentes se añaden lógicamente al final de la definición de la
etiqueta de seguridad existente contenida en la política modificada. Las etiquetas
de seguridad existentes definidas para esta política de seguridad se modifican
para que contengan el nuevo componente como parte de su definición sin
ningún elemento en su valor para dicho componente.
v Invalidación de antememoria al cambiar NOT AUTHORIZED WRITE
SECURITY LABEL: el cambio de NOT AUTHORIZED WRITE SECURITY
LABEL a un nuevo valor provoca la invalidación de cualquier sentencia de SQL
dinámico o estático de la antememoria que dependa de cualquier tabla que esté
protegida por la política de seguridad que se está modificando.
Sentencias 95
ALTER SECURITY POLICY
Ejemplos
v Ejemplo 1: modifique una política de seguridad de nombre DATA_ACCESS para
añadir un nuevo componente llamado REGION.
ALTER SECURITY POLICY DATA_ACCESS
ADD COMPONENT REGION
v Ejemplo 2: modifique una política de seguridad de nombre DATA_ACCESS para
permitir el acceso a través de etiquetas de seguridad otorgadas a roles.
Sentencias 97
ALTER SEQUENCE
ALTER SEQUENCE
La sentencia ALTER SEQUENCE puede utilizarse para cambiar una secuencia.
Invocación
Autorización
Los privilegios que posee el ID de autorización de la sentencia debe tener al menos
una de las autorizaciones siguientes:
v Privilegio ALTER para la secuencia que se va a modificar
v Privilegio ALTERIN para el esquema especificado implícita o explícitamente
v Autorización DBADM
Sintaxis
ALTER SEQUENCE nombre-secuencia
(1)
RESTART
WITH constante-numérica
INCREMENT BY constante-numérica
MINVALUE constante-numérica
NO MINVALUE
MAXVALUE constante-numérica
NO MAXVALUE
CYCLE
NO CYCLE
CACHE constante-entera
NO CACHE
ORDER
NO ORDER
Notas:
1 Una misma cláusula no se debe especificar más de una vez.
Descripción
nombre-secuencia
Identifica la secuencia que va a cambiarse. El nombre (incluido el calificador de
esquema implícito o explícito) debe designar de forma exclusiva una secuencia
existente en el servidor actual. Si en el esquema especificado implícita o
explícitamente no existe ninguna secuencia con este nombre, se devuelve un
error (SQLSTATE 42704). El nombre-secuencia no debe ser una secuencia
generada por el sistema para una columna de identidad (SQLSTATE 428FB).
RESTART
Reinicia la secuencia. Si no se especifica constante-numérica, la secuencia se
reinicia en el valor especificado implícita o explícitamente como el valor inicial
en la sentencia CREATE SEQUENCE que ha creado originalmente la secuencia.
WITH constante-numérica
Reinicia la secuencia con el valor especificado. Este valor puede ser
cualquier valor positivo o negativo que pueda asignarse a una columna del
tipo de datos asociado a la secuencia (SQLSTATE 42815), sin dígitos
distintos de cero a la derecha de la coma decimal (SQLSTATE 428FA).
INCREMENT BY constante-numérica
Especifica el intervalo entre valores consecutivos de la secuencia. Este valor
puede ser cualquier valor positivo o negativo que pueda asignarse a una
columna del tipo de datos asociado a la secuencia (SQLSTATE 42815). El valor
no debe superar el valor de una constante de enteros grande (SQLSTATE
42820) ni contener dígitos que no sean cero a la derecha de la coma decimal
(SQLSTATE 428FA).
Si este valor es negativo, se trata de una secuencia descendente. Si este valor es
0 o positivo, es una secuencia ascendente tras la sentencia ALTER.
MINVALUE o NO MINVALUE
Especifica el valor mínimo en el que una secuencia descendente pasa por un
ciclo o deja de generar valores o en el que una secuencia ascendente pasa por
un ciclo después de alcanzar el valor máximo.
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 una columna
del tipo de datos asociado a la secuencia (SQLSTATE 42815), sin dígitos
distintos de cero a la derecha de la coma decimal (SQLSTATE 428FA), pero
el valor debe ser inferior o igual al valor máximo (SQLSTATE 42815).
NO MINVALUE
Para una secuencia ascendente, el valor es el valor de inicio original. Para
una secuencia descendente, el valor es el valor mínimo del tipo de datos
asociado con la secuencia.
MAXVALUE o NO MAXVALUE
Especifica el valor máximo en el que una secuencia ascendente pasa por un
ciclo o deja de generar valores o en el que una secuencia descendente pasa por
un ciclo después de alcanzar el valor mínimo.
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 una columna
del tipo de datos asociado a la secuencia (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).
Sentencias 99
ALTER SEQUENCE
NO MAXVALUE
Para una secuencia ascendente, el valor es el valor máximo del tipo de
datos asociado con la secuencia. Para una secuencia descendente, el valor
es el valor de inicio original.
CYCLE o NO CYCLE
Especifica si la secuencia debe continuar generando valores después de
alcanzar el valor máximo o el valor mínimo. El límite de la secuencia puede
alcanzarse con el siguiente valor que coincida exactamente con la condición de
límite o excediendo el valor.
CYCLE
Especifica que se continúan generando valores para esta secuencia después
de haber alcanzado el valor máximo o mínimo. Si se utiliza esta opción,
cuando una secuencia ascendente haya alcanzado su valor máximo,
generará su valor mínimo; o cuando una secuencia descendente haya
alcanzado su valor mínimo, generará su valor máximo. Los valores
máximo y mínimo para la secuencia determinan el rango que se utiliza
para el ciclo.
Cuando CYCLE está en vigor, DB2 puede generar valores duplicados para
la secuencia.
NO CYCLE
Especifica que no se generarán valores para la secuencia una vez que se
haya alcanzado el valor máximo o mínimo para la secuencia.
CACHE o NO CACHE
Especifica si se deben mantener algunos valores preasignados en memoria para
obtener un acceso más rápido. Esta opción se utiliza para el rendimiento y el
ajuste.
CACHE constante-entera
Especifica el número máximo de valores de secuencia que se preasignan y
se mantienen en memoria. La preasignación y el almacenamiento de
valores en la antememoria reducen la E/S síncrona en las anotaciones
cronológicas cuando se generan valores para la secuencia.
En el caso de producirse una anomalía del sistema, todos los valores de
secuencia almacenados en antememoria que no se han utilizando en
sentencias confirmadas se pierden (es decir, no se utilizarán nunca). El
valor especificado para la opción CACHE es el número máximo de valores
de secuencia que puede perderse en caso de anomalía del sistema.
El valor mínimo es 2 (SQLSTATE 42815).
NO CACHE
Especifica que los valores de la secuencia no se deben preasignar. Asegura
que no haya ninguna pérdida de valores en el caso de producirse una
anomalía del sistema, un cierre o una desactivación de la base de datos.
Cuando se especifica esta opción, los valores de la secuencia no se
almacenan en la antememoria. En este caso, cada petición de un valor
nuevo para la secuencia produce E/S síncrona en las anotaciones
cronológicas.
ORDER o NO ORDER
Especifica si los números de secuencia deben generarse según el orden de
petición.
ORDER
Especifica que los números de secuencia se generan según el orden de
petición.
NO ORDER
Especifica que los números de secuencia no necesitan generarse según el
orden de petición.
Notas
v Sólo los números de secuencia futuros se ven afectados por la secuencia ALTER
SEQUENCE.
v El tipo de datos de una secuencia no se puede cambiar. En lugar de ello,
descarte la secuencia y vuelva a crearla especificando el tipo de datos necesario
para la nueva secuencia.
v Todos los valores almacenados en antememoria se pierden cuando se modifica
una secuencia.
v Después de reiniciar una secuencia o de cambiar a CYCLE, es posible que los
números de secuencia sean valores duplicados de los números generados por la
secuencia anteriormente.
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con las versiones anteriores de los productos
DB2 y con otros productos de base de datos. Estas alternativas no son estándar y
no deberían utilizarse.
– Puede utilizarse una coma para separar varias opciones en una secuencia.
– Se puede especificar NOMINVALUE, NOMAXVALUE, NOCYCLE,
NOCACHE y NOORDER en lugar de NO MINVALUE, NO MAXVALUE, NO
CYCLE, NO CACHE y NO ORDER, respectivamente
Ejemplo
Una posible razón para especificar RESTART sin un valor numérico puede ser para
restablecer la secuencia en el valor START WITH. En este ejemplo, el objetivo es
generar los números del 1 hasta el número de filas de tabla y, a continuación,
insertar los números en una columna añadida a la tabla utilizando tablas
temporales. También se podría utilizar para obtener resultados en los que todas las
filas resultantes estén numeradas:
ALTER SEQUENCE ORG_SEQ RESTART
SELECT NEXT VALUE FOR ORG_SEQ, ORG.* FROM ORG
Sentencias 101
ALTER SERVER
ALTER SERVER
La sentencia ALTER SERVER se utiliza para modificar la definición o configuración
de una fuente de datos.
Invocación
Autorización
Sintaxis
ALTER SERVER
nombre-servidor
VERSION versión-servidor
TYPE tipo-servidor
VERSION versión-servidor
WRAPPER nombre-derivador
,
ADD
OPTIONS ( nombre-opción-servidor constante-serie )
SET
DROP nombre-opción-servidor
versión-servidor:
versión
. release
. mod
constante-serie-versión
Descripción
nombre-servidor
Identifica el nombre del servidor federado para la fuente de datos a la que se
deben aplicar los cambios que se están solicitando. La fuente de datos debe ser
una descrita en el catálogo.
VERSION
Después de nombre-servidor, VERSION y su parámetro especifican una nueva
versión de la fuente de datos que indica nombre-servidor.
versión
Especifica el número de versión. El valor debe ser un entero.
release
Especifica el número de release de la versión indicada por versión. El valor
debe ser un entero.
mod
Especifica el número de la modificación del release indicado por release. El
valor debe ser un entero.
constante-serie-versión
Especifica la designación completa de la versión. La constante-serie-versión
puede ser un solo valor (por ejemplo, ‘8i’) o puede estar formada por los
valores concatenados de versión, release y, si se aplica, mod (por ejemplo,
‘8.0.3’).
TYPE tipo-servidor
Especifica el tipo de fuente de datos al que se deben aplicar los cambios que se
están solicitando.
VERSION
Después de tipo-servidor, VERSION y su parámetro especifican la versión de las
fuentes de datos para las cuales se deben habilitar, restaurar o descartar las
opciones de servidor.
WRAPPER nombre-derivador
Especifica el nombre del derivador que el servidor federado utiliza para
interactuar con las fuentes de datos del tipo y versión indicados por
tipo-servidor y versión-servidor. El derivador debe aparecer en la lista del
catálogo.
OPTIONS
Indica las opciones de servidor que se deben habilitar, restaurar o descartar
para la fuente de datos indicada por nombre-servidor o para la categoría de
fuentes de datos indicada por tipo-servidor y sus parámetros asociados.
ADD
Habilita una opción de servidor.
SET
Cambia el valor de una opción de servidor.
nombre-opción-servidor
Nombra una opción de servidor que se debe habilitar o restaurar.
constante-serie
Especifica un valor para nombre-opción-servidor como una constante de serie
de caracteres.
DROP nombre-opción-servidor
Descarta una opción de servidor.
Notas
v Una opción de servidor no se puede especificar más de una vez en la misma
sentencia ALTER SERVER (SQLSTATE 42853). Cuando se habilita, restaura o
descarta una opción de servidor, no afecta a ninguna otra opción de servidor
que se esté utilizando.
Sentencias 103
ALTER SERVER
Ejemplos
v Ejemplo 1: Asegúrese de que cuando se envían ID de autorización a las fuentes
de datos Oracle 8.0.3, no se cambian las mayúsculas y minúsculas de los ID.
Suponga también que la CPU del servidor federado local es el doble de rápida
que la CPU de fuente de datos. Informe al optimizador de esta estadística.
ALTER SERVER
TYPE ORACLE
VERSION 8.0.3
OPTIONS
( ADD FOLD_ID ’N’,
SET CPU_RATIO ’2.0’)
v Ejemplo 2: Indique que la fuente de datos Documentum denominada
DCTM_SVR_ASIA se ha cambiado a la Versión 4.
ALTER SERVER DCTM_SVR_ASIA
VERSION 4
Invocación
Autorización
Sintaxis
Sentencias 105
ALTER SERVICE CLASS
(1) HARD
CPU SHARES constante-entera
SOFT
CPU LIMIT constante-entera
NONE
AGENT PRIORITY DEFAULT
constante-entera
PREFETCH PRIORITY DEFAULT
HIGH
MEDIUM
LOW
OUTBOUND CORRELATOR NONE
constante-serie
BUFFERPOOL PRIORITY DEFAULT
HIGH
MEDIUM
LOW
(2)
COLLECT ACTIVITY DATA modificar-cláusula-recopilar-datos-actividad
NONE
BASE
COLLECT AGGREGATE ACTIVITY DATA
EXTENDED
NONE
BASE
COLLECT AGGREGATE REQUEST DATA
NONE
BASE
COLLECT AGGREGATE UNIT OF WORK DATA
NONE
(3) BASE
COLLECT REQUEST METRICS
NONE
EXTENDED
(4)
ACTIVITY LIFETIME HISTOGRAM TEMPLATE nombre-plantilla
ACTIVITY QUEUETIME HISTOGRAM TEMPLATE nombre-plantilla
ACTIVITY EXECUTETIME HISTOGRAM TEMPLATE nombre-plantilla
REQUEST EXECUTETIME HISTOGRAM TEMPLATE nombre-plantilla
ACTIVITY ESTIMATEDCOST HISTOGRAM TEMPLATE nombre-plantilla
ACTIVITY INTERARRIVALTIME HISTOGRAM TEMPLATE nombre-plantilla
UOW LIFETIME HISTOGRAM TEMPLATE nombre-plantilla
ENABLE
DISABLE
modificar-cláusula-recopilar-datos-actividad:
MEMBER
ON COORDINATOR
MEMBERS
ON ALL
WITHOUT DETAILS
,
(5)
WITH DETAILS
SECTION AND VALUES
INCLUDE ACTUALS BASE
Notas:
1 Una misma cláusula no se debe especificar más de una vez.
2 Todas las cláusulas COLLECT excepto COLLECT REQUEST METRICS sólo
son válidas para una subclase de servicio.
3 La cláusula COLLECT REQUEST METRICS sólo es válida para una
superclase de servicio.
4 Las cláusulas HISTOGRAM TEMPLATE sólo son válidas para una subclase
de servicio.
Descripción
nombre-clase-servicio
Identifica la clase de servicio que se va a modificar. Este nombre consta de una
sola parte. Se trata de un identificador de SQL (ordinario o delimitado). El
nombre-clase-servicio debe identificar una clase de servicio que exista en la base
de datos (SQLSTATE 42704). Para modificar una subclase de servicio, el
nombre-superclase-servicio debe especificarse utilizando la cláusula UNDER.
UNDER nombre-superclase-servicio
La cláusula sólo se utiliza para modificar una subclase de servicio. El
nombre-superclase-servicio identifica la superclase de servicio de la subclase de
servicio que exista en la base de datos (SQLSTATE 42704).
SOFT CPU SHARES constante-entera o HARD CPU SHARES constante-entera
Especifica el número de cuotas de recursos de CPU que el asignador de WLM
asigna a esta clase de servicio cuando el trabajo se ejecuta dentro de esta clase
de servicio. Los valores válidos de la constante-entera son enteros entre 1 y
65535. Calificar CPU SHARES con la palabra clave HARD o especificar CPU SHARES
sin calificarlo con la palabra clave HARD o SOFT indica que se asignarán cuotas
de CPU fijas a esta clase de servicio. Especificar la palabra clave SOFT indica
que se asignarán cuotas de CPU flexibles a esta clase de servicio. Para utilizar
cuotas de CPU fijas y flexibles con el asignador del gestor de carga de trabajo
de DB2, debe habilitar el parámetro de configuración del gestor de bases de
datos wlm_disp_cpu_shares.
CPU LIMIT constante-entero o CPU LIMIT NONE
Especifica el porcentaje máximo de los recursos de CPU que el asignador de
WLM puede asignar a esta clase de servicio. Los valores válidos de la
constante-entera son enteros entre 1 y 100. Puede especificar también CPU
LIMIT NONE para indicar que no hay ningún límite de CPU.
AGENT PRIORITY DEFAULT o AGENT PRIORITY constante-entero
Especifica la prioridad del sistema operativo (delta) relativa de los agentes que
se ejecutan en la clase de servicio o la prioridad normal de las hebras que se
ejecutan en DB2. El valor por omisión es DEFAULT.
Sentencias 107
ALTER SERVICE CLASS
Sentencias 109
ALTER SERVICE CLASS
Sentencias 111
ALTER SERVICE CLASS
v total_section_proc_time
v total_routine_user_code_time
v total_routine_user_code_proc_time
v total_routine_time
NONE
Especifica que no se recopilará ninguna métrica para las peticiones
enviadas por una conexión asociada con la superclase de servicio.
ACTIVITY LIFETIME HISTOGRAM TEMPLATE nombre-plantilla
Especifica la plantilla que describe el histograma utilizado para recopilar datos
estadísticos sobre la duración, en milisegundos de actividades de DB2 en
ejecución en la clase de servicio durante un intervalo específico. Este tiempo
incluye tanto el tiempo que está en cola como el tiempo de ejecución. Esta
información sólo se recopila cuando se especifica la cláusula COLLECT
AGGREGATE ACTIVITY DATA, con la opción BASE o EXTENDED. Esta
cláusula sólo es válida para una subclase de servicio.
ACTIVITY QUEUETIME HISTOGRAM TEMPLATE nombre-plantilla
Especifica la plantilla que describe el histograma utilizado para recopilar datos
estadísticos sobre el espacio de tiempo, en milisegundos, en que las actividades
de DB2 en ejecución en la clase de servicio están en cola durante un intervalo
específico. Esta información sólo se recopila cuando se especifica la cláusula
COLLECT AGGREGATE ACTIVITY DATA, con la opción BASE o EXTENDED.
Esta cláusula sólo es válida para una subclase de servicio.
ACTIVITY EXECUTETIME HISTOGRAM TEMPLATE nombre-plantilla
Especifica la plantilla que describe el histograma utilizado para recopilar datos
estadísticos sobre el espacio de tiempo, en milisegundos, en que las actividades
de DB2 en ejecución en la clase de servicio están ejecutándose durante un
intervalo específico. Este tiempo no incluye el tiempo que se pasa en la cola. El
tiempo de ejecución de la actividad se recopila en este histograma únicamente
en el miembro coordinador. El tiempo no incluye el tiempo de inactividad. El
tiempo de inactividad es el tiempo entre la ejecución de peticiones que
pertenecen a la misma actividad cuando no se efectúa ningún trabajo. Un
ejemplo de tiempo de inactividad es el tiempo entre que se acaba de abrir un
cursor y comienza la captación desde dicho cursor. Esta información sólo se
recopila cuando se especifica la cláusula COLLECT AGGREGATE ACTIVITY
DATA, con la opción BASE o EXTENDED. Esta cláusula sólo es válida para
una subclase de servicio.
REQUEST EXECUTETIME HISTOGRAM TEMPLATE nombre-plantilla
Especifica la plantilla que describe el histograma utilizado para recopilar datos
estadísticos sobre el espacio de tiempo, en milisegundos, en que las peticiones
de DB2 en ejecución en la clase de servicio están ejecutándose durante un
intervalo específico. Este tiempo no incluye el tiempo que se pasa en la cola. El
tiempo de ejecución de la petición se recopila en este histograma en cada
miembro donde se ejecuta la petición. Esta información sólo se recopila cuando
se especifica la cláusula COLLECT AGGREGATE REQUEST DATA con la
opción BASE. Esta cláusula sólo es válida para una subclase de servicio.
ACTIVITY ESTIMATEDCOST HISTOGRAM TEMPLATE nombre-plantilla
Especifica la plantilla que describe el histograma utilizado para recopilar datos
estadísticos sobre el coste estimado, en activaciones de temporización, de
actividades DML en ejecución en la clase de servicio. Esta información sólo se
recopila cuando se especifica la cláusula COLLECT AGGREGATE ACTIVITY
DATA, con la opción EXTENDED. Esta cláusula sólo es válida para una
subclase de servicio.
Sentencias 113
ALTER SERVICE CLASS
Normas
v Una sentencia de SQL exclusiva de gestión de carga de trabajo (WLM) debe ir
después de una sentencia COMMIT o ROLLBACK (SQLSTATE 5U021). Las
sentencias de SQL exclusivas de WLM son:
– CREATE HISTOGRAM TEMPLATE, ALTER HISTOGRAM TEMPLATE o
DROP (plantilla de histograma)
– CREATE SERVICE CLASS, ALTER SERVICE CLASS o DROP (clase de
servicio)
– CREATE THRESHOLD, ALTER THRESHOLD o DROP (umbral)
– CREATE WORK ACTION SET, ALTER WORK ACTION SET o DROP
(conjunto de acciones de trabajo)
– CREATE WORK CLASS SET, ALTER WORK CLASS SET o DROP (conjunto
de clases de trabajo)
– CREATE WORKLOAD, ALTER WORKLOAD o DROP (carga de trabajo)
– GRANT (privilegios de carga de trabajo) o REVOKE (privilegios de carga de
trabajo)
v Una sentencia de SQL exclusiva de WLM no puede emitirse en una transacción
global (SQLSTATE 51041) como por ejemplo, una transacción XA.
Notas
v Sólo se permite una sentencia de SQL exclusiva de WLM no confirmada a la vez
entre todos los miembros. Si se ejecuta una sentencia de SQL exclusiva de WLM
sin confirmar, las siguientes sentencias de SQL exclusivas de WLM esperarán
hasta que se confirme o retrotraiga la sentencia de SQL exclusiva de XML actual.
v Los cambios se graban en el catálogo del sistema, pero no surten efecto hasta
después de una sentencia COMMIT, incluso para la conexión que emite la
sentencia.
v Después de confirmar una sentencia ALTER SERVICE CLASS, los cambios en
AGENT PRIORITY, PREFETCH PRIORITY, OUTBOUND CORRELATOR y
COLLECT surtirán efecto para la siguiente actividad nueva de la clase de
servicio. Las actividades de la clase de servicio siguen completando su trabajo
utilizando los valores antiguos.
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con las versiones anteriores de los productos
DB2 y con otros productos de base de datos. Estas alternativas no son estándar y
no deberían utilizarse.
– o Puede especificarse DATABASE PARTITION en lugar de MEMBER, salvo
cuando la variable de registro DB2_ENFORCE_MEMBER_SYNTAX se
establece en ON.
– o Puede especificarse DATABASE PARTITIONS en lugar de MEMBERS, salvo
cuando la variable de registro DB2_ENFORCE_MEMBER_SYNTAX se
establece en ON.
Ejemplos
v Ejemplo 1: Modifique la prioridad de agente de los agentes de la superclase
PETSALES para aumentarla del valor DEFAULT al valor más alto posible (se
muestra para los sistemas operativos UNIX y Linux; en sistemas operativos
Windows, sustituya 6).
ALTER SERVICE CLASS PETSALES AGENT PRIORITY -20
v Ejemplo 2: Modifique superclase de servicio BARNSALES y añada un
correlacionador de salida 'osLowPriority'. Las hebras que se ejecutan en la
superclase de servicio y en sus subclases de servicio tendrán asociado a las
mismas el correlacionador de salida 'osLowPriority'.
ALTER SERVICE CLASS BARNSALES OUTBOUND CORRELATOR ’osLowPriority’
Sentencias 115
ALTER STOGROUP
ALTER STOGROUP
La sentencia ALTER STOGROUP se utiliza para alterar la definición de un grupo
de almacenamiento.
Invocación
Autorización
Sintaxis
ALTER STOGROUP nombre-grupo-almacenamiento
,
(1)
ADD 'vía_acceso_almacenamiento'
,
DROP 'vía_acceso_almacenamiento'
OVERHEAD número-de-milisegundos
DEVICE READ RATE número-megabytes-por-segundo
DATA TAG constante-entera
NONE
SET AS DEFAULT
Notas:
1 Cada cláusula sólo puede especificarse una vez.
Descripción
nombre-grupo-almacenamiento
Identifica el grupo de almacenamiento que se debe modificar;
nombre-grupo-almacenamiento debe identificar un grupo de almacenamiento que
exista en el servidor actual (SQLSTATE 42704). Este nombre consta de una sola
parte.
ADD
Especifica que se deben añadir una o más vías de acceso de almacenamiento
nuevas al grupo de almacenamiento especificado.
vía-acceso-almacenamiento
Constante de tipo serie que especifica una vía de acceso absoluta o la letra
de una unidad (sólo en los sistemas operativos Windows) donde se crearán
los contenedores para los espacios de tablas de almacenamiento
automático. La serie puede incluir expresiones de partición de base de
datos para especificar la información del número de partición de base de
Sentencias 117
ALTER STOGROUP
constante-entera
Los valores de constante-entera son los enteros del 1 al 9.
NONE
Si se especifica NONE, no hay ningún código de datos.
SET AS DEFAULT
Especifica que el grupo de almacenamiento que se modifica se designar como
grupo de almacenamiento por omisión. Sólo puede haber un grupo de
almacenamiento designado como grupo de almacenamiento por omisión. No se
produce ningún efecto en los espacios de tablas existentes que utilizan ese
grupo de almacenamiento. Los espacios de tablas de almacenamiento
automático utilizan el grupo de almacenamiento por omisión designado
cuando no se especifica ningún grupo de almacenamiento durante la creación
de espacios de tablas y un espacio de tablas gestionado por base de datos se
convierte en almacenamiento automático gestionado durante la restauración
redirigida.
Normas
v Un grupo de almacenamiento debe tener, como mínimo, una vía de acceso de
almacenamiento. No se pueden descartar del grupo de almacenamiento todas las
vías de acceso de almacenamiento (SQLSTATE 428HH).
v No se puede ejecutar la sentencia ALTER STOGROUP mientras se está
añadiendo un servidor de particiones de base de datos (SQLSTATE 55071).
v Un grupo de almacenamiento puede tener un máximo de 128 vías de acceso de
almacenamiento definidas (SQLSTATE 5U009).
v Una transacción puede tener, como máximo, una sentencia ALTER STOGROUP
por cada grupo de almacenamiento. En el caso del grupo de almacenamiento
por omisión, puede haber, como máximo, una sentencia ALTER DATABASE o
una sentencia ALTER STOGROUP en el grupo de almacenamiento por omisión
(SQLSTATE 25502).
Notas
v Adición de vías de acceso de almacenamiento nuevas: al añadir vías de acceso
de almacenamiento nuevas:
– Los espacios de tablas REGULAR (normales) y LARGE (grandes) existentes
que utilicen este grupo de almacenamiento no utilizarán estas nuevas vías de
acceso inicialmente. El gestor de bases de datos puede elegir crear nuevos
contenedores de espacio de tablas en estas vías de acceso únicamente si se
produce una condición de falta de espacio. Puede emitir sentencias ALTER
TABLESPACE REBALANCE para que los espacios de tablas existentes los
dividan en bandas por las vías de acceso de almacenamiento recién añadidas.
– Los espacios de tablas temporales existentes gestionados por almacenamiento
automático no utilizan automáticamente las vías de acceso de almacenamiento
nuevas. Se debe detener con normalidad la base de datos y reiniciarla para
que los contenedores de estos espacios de tablas utilicen las nuevas vías de
acceso de almacenamiento. Como alternativa, los espacios de tablas
temporales pueden descartarse y volver a crearse. Al crearlos, estos espacios
de tablas utilizan automáticamente todas las vías de acceso de
almacenamiento que disponen de espacio libre suficiente.
v Cálculo del espacio libre: cuando se calcula el espacio libre para una vía de
acceso de almacenamiento en una partición de base de datos, el gestor de bases
de datos comprueba la existencia de los siguientes directorios o puntos de
montaje en la vía de acceso de almacenamiento, y utiliza la primera que se
encuentre.
Donde:
– <vía de acceso almacenamiento> es una vía de acceso de almacenamiento
asociada con la base de datos.
– <nombre instancia> es la instancia en la que reside la base de datos.
– NODE#### corresponde al número de partición de base de datos (por ejemplo,
NODE0000 o NODE0001).
– <nombre base de datos> es el nombre de la base de datos.
v Aislamiento de varias particiones de base de datos en una vía de acceso de
almacenamiento:los sistemas de archivos se pueden montar en un punto bajo la
vía de acceso de almacenamiento, y el gestor de bases de datos reconocerá que
la cantidad real de espacio libre disponible para los contenedores del espacio de
tablas puede no ser la misma que la asociada con el directorio de la vía de
acceso de almacenamiento.
Considere un ejemplo donde existan dos particiones de base de datos lógicas en
un sistema físico, y haya una única vía de acceso de almacenamiento (/db2data).
Cada partición de base de datos utilizará esta vía de acceso de almacenamiento,
pero es posible que se desee aislar los datos de cada partición en su propio
sistema de archivos. En este caso, se puede crear un sistema de archivos
diferente para cada partición y se puede montar en /db2data/<instancia>/
NODE####. Al crear contenedores en la vía de acceso de almacenamiento y
determinar el espacio libre, el gestor de bases de datos no recuperará la
información sobre el espacio libre para /db2data, sino que la recuperará para el
directorio /db2data/<instancia>/NODE#### correspondiente.
v Descarte de una vía de acceso de almacenamiento que utilizan uno o más
espacios de tablas:al descartar una vía de acceso de almacenamiento que están
utilizando uno o más espacios de tablas, el estado de la vía de acceso cambia de
En uso a Descarte pendiente. La vía de acceso no crecerá más. Antes de que se
pueda eliminar completamente la vía de acceso del grupo de almacenamiento, es
necesario reequilibrar todos los espacios de tablas afectados (con la cláusula
REBALANCE o la sentencia ALTER TABLESPACE), para que los datos de sus
contenedores se retiren de la vía de acceso. El reequilibrado sólo recibe soporte
para los espacios de tablas REGULAR y LARGE. Descarte y vuelva a crear los
espacios de tablas temporales para que sus contenedores se eliminen de la vía de
acceso descartada. Cuando ningún espacio de tablas esté utilizando ya la vía de
acceso, se eliminará físicamente de la base de datos.
Para un entorno de base de datos particionada, la vía de acceso se mantiene de
forma independiente en cada partición. Cuando ya no se esté utilizando una vía
de acceso en una partición de base de datos dada, se eliminará físicamente de
dicha partición. Puede que otras particiones todavía muestren la vía de acceso
con el estado "Descarte pendiente". Se puede obtener la lista de los espacios de
tablas de almacenamiento automático que utilizan vías de acceso de
almacenamiento con estado de descarte pendiente emitiendo la sentencia de SQL
siguiente:
SELECT DISTINCT TBSP_NAME, TBSP_ID, TBSP_CONTENT_TYPE
FROM TABLE(MON_GET_TABLESPACE(NULL,-2)) AS T
WHERE TBSP_PATHS_DROPPED = 1
v Descarte de una vía de acceso de almacenamiento que se haya añadido a un
grupo de almacenamiento varias veces:se puede añadir varias veces una vía de
acceso de almacenamiento dada a una base de datos. Al utilizar la cláusula
Sentencias 119
ALTER STOGROUP
DROP, si se especifica esa vía de acceso concreta una vez se descartarán del
grupo de almacenamiento todas las instancias de la vía de acceso.
Ejemplos
v Ejemplo 1: añadir las unidades D y E al grupo de almacenamiento denominado
COMPLIANCE.
ALTER STOGROUP COMPLIANCE ADD ’D:\’, ’E:\’
v Ejemplo 2: cambiar el código de datos para el grupo de almacenamiento
OPERATIONAL y designarlo como grupo de almacenamiento por omisión.
ALTER STOGROUP OPERATIONAL DATA TAG 3 SET AS DEFAULT
v Ejemplo 3: añadir una vía de acceso de almacenamiento que utilice una expresión
de partición de base de datos para diferenciar las vías de acceso de
almacenamiento en cada una de las particiones de base de datos.
ALTER STOGROUP TESTDATA ADD ’/dataForPartition $N’
v Ejemplo 4: eliminar las vías de acceso /db2/filesystem1 y /db2/filesystem2 del
grupo de almacenamiento TESTDATA.
ALTER STOGROUP TESTDATA DROP ’/db2/filesystem1’, ’/db2/filesystem2’
ALTER TABLE
La sentencia ALTER TABLE modifica la definición de una tabla.
Invocación
Autorización
Para crear o descartar una clave foránea, los privilegios del ID de autorización de
la sentencia deben incluir una de las autorizaciones siguientes para la tabla padre:
v Privilegio REFERENCES para la tabla
v Privilegio REFERENCES para todas las columnas de la clave padre especificada
v Privilegio CONTROL sobre la tabla
v Autorización DBADM
Para modificar una tabla con el fin de convertirla en una tabla de consulta
materializada (utilizando una selección completa), los privilegios del ID de
autorización de la sentencia deben incluir, como mínimo, una de las autorizaciones
siguientes:
v Privilegio CONTROL sobre la tabla
v Autorización DBADM
y, como mínimo, una de las siguientes autorizaciones para cada tabla o vista
identificada en la selección completa (excluyendo los privilegios de grupo):
v Privilegio SELECT y privilegio ALTER (incluyendo los privilegios de grupo)
para la tabla o vista
v Privilegio CONTROL sobre la tabla o vista
v Privilegio SELECT para la tabla o vista y privilegio ALTERIN (incluyendo los
privilegios de grupo) para el esquema de la tabla o vista
v Autorización DATAACCESS
Sentencias 121
ALTER TABLE
Para modificar una tabla con el fin de que ya no sea una tabla de consulta
materializada, los privilegios del ID de autorización de la sentencia deben incluir,
como mínimo, una de las autorizaciones siguientes para cada tabla o vista
identificada en la selección completa que se utiliza para definir la tabla de consulta
materializada:
v Privilegio ALTER para la tabla o vista
v Privilegio CONTROL sobre la tabla o vista
v Privilegio ALTERIN para el esquema de la tabla o vista
v Autorización DBADM
Para añadir una columna de tipo DB2SECURITYLABEL a una tabla, los privilegios
que tiene el ID de autorización de la sentencia deben incluir al menos una etiqueta
de seguridad de la política de seguridad asociada a la tabla.
Para eliminar la política de seguridad de una tabla, los privilegios que tiene el ID
de autorización de la sentencia deben incluir la autorización SECADM.
Para modificar una tabla a fin de enlazar una partición de datos, los privilegios del
ID de autorización de la sentencia también deben incluir, como mínimo, una de las
autorizaciones siguientes para la tabla fuente:
v Privilegio SELECT para la tabla y privilegio DROPIN para el esquema de la
tabla
v Privilegio CONTROL sobre la tabla
v Autorización DATAACCESS
y, como mínimo, una de las autorizaciones siguientes para la tabla de destino:
v Privilegios ALTER e INSERT para la tabla
v Privilegio CONTROL sobre la tabla
v Autorización DATAACCESS
Para modificar una tabla a fin de desenlazar una partición de datos, los privilegios
del ID de autorización de la sentencia también deben incluir, como mínimo, una de
las autorizaciones siguientes para la tabla de destino de la partición desenlazada:
v Autorización CREATETAB para la base de datos y privilegio USE para los
espacios de tablas que utiliza la tabla, así como uno de los elementos siguientes:
– Autorización IMPLICIT_SCHEMA para la base de datos, si el nombre de
esquema implícito o explícito de la tabla nueva no existe
– Privilegio CREATEIN para el esquema, si el nombre de esquema de la tabla
nueva hace referencia a un esquema existente
v Autorización DBADM
y, como mínimo, una de las autorizaciones siguientes para la tabla fuente:
v Privilegios SELECT, ALTER y DELETE para la tabla
v Privilegio CONTROL sobre la tabla
v Autorización DATAACCESS
Para modificar una tabla para la activación no registrada inicialmente con tabla
vacía, los privilegios del ID de autorización de la sentencia deben incluir, como
mínimo, una de las autorizaciones siguientes:
v Privilegios ALTER y DELETE para la tabla
v Privilegio CONTROL sobre la tabla
v Autorización DBADM
Para modificar una tabla protegida mediante una política de seguridad para la
activación no registrada inicialmente con tabla vacía, los privilegios del ID de
autorización de la sentencia deben incluir, como mínimo, una de las autorizaciones
siguientes:
v Privilegio CONTROL sobre la tabla
v Autorización DBADM
Para modificar una tabla con ACTIVATE NOT LOGGED INITIALLY WITH EMPTY
TABLE, si esa tabla tiene el control de acceso a filas activado, los privilegios del ID
de autorización de la sentencia deben incluir, como mínimo, una de las
autorizaciones siguientes:
v Privilegio CONTROL sobre la tabla
v Autorización DBADM
Para modificar una tabla y convertirla en una tabla temporal de período de sistema
(con la cláusula ADD VERSIONING) o modificar una tabla temporal de período de
sistema cuando uno o varios de los cambios también provocan cambios en la tabla
histórica asociada, los privilegios del ID de autorización de la sentencia también
deben incluir, como mínimo, una de las autorizaciones siguientes:
v Privilegio ALTER sobre la tabla histórica
v Privilegio CONTROL sobre la tabla histórica
v Privilegio ALTERIN sobre el esquema de la tabla histórica
v Autorización DBADM
Sintaxis
Sentencias 123
ALTER TABLE
(1) COLUMN
ADD definición-columna
restricción-unicidad
restricción-referencia
restricción-comprobación
cláusula-distribución
RESTRICT ON DROP
MATERIALIZED
QUERY
ADD definición-consulta-materializada
ALTER FOREIGN KEY nombre-restricción modificación-restricción
CHECK
COLUMN
ALTER modificación-columna
(2)
ACTIVATE ROW ACCESS CONTROL
DEACTIVATE
(3)
ACTIVATE COLUMN ACCESS CONTROL
DEACTIVATE
RENAME COLUMN nombre-columna-fuente TO nombre-columna-destino
DROP PRIMARY KEY
FOREIGN KEY nombre-restricción
UNIQUE
CHECK
CONSTRAINT
COLUMN CASCADE
nombre-columna
RESTRICT
RESTRICT ON DROP
DROP DISTRIBUTION
MATERIALIZED
DROP QUERY
ADD PERIOD definición-período
DROP PERIOD nombre-período
DATA CAPTURE NONE
CHANGES
INCLUDE LONGVAR COLUMNS
ACTIVATE NOT LOGGED INITIALLY
WITH EMPTY TABLE
PCTFREE entero
LOCKSIZE ROW
BLOCKINSERT
TABLE
APPEND ON
OFF
CARDINALITY
VOLATILE
NOT VOLATILE
ADAPTIVE
COMPRESS YES
STATIC
NO
ACTIVATE VALUE COMPRESSION
DEACTIVATE
LOG INDEX BUILD NULL
OFF
ON
ADD PARTITION partición-adición
ATTACH PARTITION partición-enlace
DETACH PARTITION nombre-partición INTO nombre-tabla-1
ADD SECURITY POLICY nombre-política
DROP SECURITY POLICY
ADD VERSIONING USE HISTORY TABLE nombre-tabla-histórica
DROP VERSIONING
partición-adición:
espec-límite
nombre-partición IN nombre-espacio-tablas
INDEX IN nombre-espacio-tablas
LONG IN nombre-espacio-tablas
espec-límite:
cláusula-inicial cláusula-final
cláusula-final
cláusula-inicial:
,
FROM INCLUSIVE
STARTING ( constante )
MINVALUE EXCLUSIVE
MAXVALUE
constante
MINVALUE
MAXVALUE
cláusula-final:
,
AT INCLUSIVE
ENDING ( constante )
MINVALUE EXCLUSIVE
MAXVALUE
constante
MINVALUE
MAXVALUE
partición-enlace:
definición-columna:
nombre-columna
(4) opciones-columna
tipo-datos
opciones-columna:
Sentencias 125
ALTER TABLE
NOT NULL
(5)
opciones-lob
(6)
SCOPE nombre2-tabla-tipo
nombre2-vista-tipo
UNIQUE
CONSTRAINT nombre-restricción PRIMARY KEY
cláusula-referencias
CHECK ( condición-comprobación ) atributos-restricción
(7)
cláusula-por-omisión
cláusula-generada
COMPRESS SYSTEM DEFAULT
COLUMN
SECURED WITH nombre-etiqueta-seguridad
NOT HIDDEN
IMPLICITLY HIDDEN
opciones-lob:
cláusula-referencias:
REFERENCES nombre-tabla
apodo ,
( nombre-columna )
cláusula-norma atributos-restricción
cláusula-norma:
atributos-restricción:
cláusula-por-omisión:
WITH
DEFAULT
constante
registro-especial-fecha-hora
registro-especial-usuario
CURRENT SCHEMA
CURRENT MEMBER
NULL
función-conversión ( constante )
registro-especial-fecha-hora
registro-especial-usuario
CURRENT SCHEMA
EMPTY_CLOB()
EMPTY_DBCLOB()
EMPTY_BLOB()
cláusula-generada:
ALWAYS
GENERATED cláusula-indicación-hora-cambio-fila
BY DEFAULT
ALWAYS
GENERATED cláusula-expresión-generada
cláusula-indicaciónFechaHora-transacción-filas
cláusula-ID-inicio-transacción-filas
cláusula-indicación-hora-cambio-fila:
(8)
FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
cláusula-expresión-generada:
AS ( expresión-generación )
cláusula-indicaciónFechaHora-transacción-filas:
AS ROW BEGIN
END
cláusula-ID-inicio-transacción-filas:
AS TRANSACTION START ID
restricción-unicidad:
UNIQUE
CONSTRAINT nombre-restricción PRIMARY KEY
( nombre-columna )
, BUSINESS_TIME WITHOUT OVERLAPS
Sentencias 127
ALTER TABLE
restricción-referencia:
cláusula-referencias
restricción-comprobación:
CHECK ( nombre-comprobación )
CONSTRAINT nombre-restricción
atributos-restricción
condición-error:
condición-búsqueda
dependencia-funcional
dependencia-funcional:
( nombre-columna ) ( nombre-columna )
cláusula-distribución:
,
HASH
DISTRIBUTE BY ( nombre-columna )
definición-consulta-materializada:
( seleccióncompleta ) opciones-tabla-renovable
opciones-tabla-renovable:
modificación-restricción:
(9)
ENABLE QUERY OPTIMIZATION
DISABLE
ENFORCED
TRUSTED
NOT ENFORCED
NOT TRUSTED
modificación-columna:
tipo-datos-modificado:
tipo-incorporado
nombre-tipo-diferenciado
tipo-incorporado:
Sentencias 129
ALTER TABLE
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(34)
DECFLOAT
(16)
(1)
CHARACTER
CHAR (entero) FOR BIT DATA
VARCHAR (entero)
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
cláusula-as-identity:
AS IDENTITY
(9) 1
( START WITH constante-numérica )
1
INCREMENT BY constante-numérica
NO MINVALUE
MINVALUE constante-numérica
NO MAXVALUE
MAXVALUE constante-numérica
NO CYCLE
CYCLE
CACHE 20
NO CACHE
CACHE constante-entera
modificación-generación:
modificación-identidad:
(9)
SET INCREMENT BY constante-numérica
SET NO MINVALUE
MINVALUE constante-numérica
SET NO MAXVALUE
MAXVALUE constante-numérica
SET NO CYCLE
CYCLE
SET NO CACHE
CACHE constante-entera
SET NO ORDER
ORDER
RESTART
WITH constante-numérica
atributo-generación:
ALWAYS
GENERATED
BY DEFAULT
definición-período:
Notas:
1 No debe especificarse la misma cláusula más de una vez (SQLSTATE 42614).
2 Si se especifica una cláusula ACTIVATE o DEACTIVATE para el control de
Sentencias 131
ALTER TABLE
Descripción
nombre-tabla
El nombre-tabla debe identificar una tabla que exista en el servidor actual. No
puede ser un apodo (SQLSTATE 42809) y no debe ser una vista, una tabla de
catálogo, una tabla temporal creada ni una tabla temporal declarada
(SQLSTATE 42995).
Si nombre-tabla identifica una tabla de consulta materializada, las
modificaciones se limitan a la adición o el descarte de la consulta
materializada, la invocación de la cláusula ACTIVATING NOT LOGGED
INITIALLY, la adición o el descarte de RESTRICT ON DROP, la modificación
de DATA CAPTURE, PCTFREE, LOCKSIZE, APPEND, VOLATILE, la
compresión de filas de datos, la compresión de valores y la activación o
desactivación del control de acceso a filas y columnas.
Si el nombre-tabla identifica una tabla agrupada por clústeres de rangos, las
modificaciones se limitan a añadir, cambiar o descartar restricciones, a activar
NOT LOGGED INITIALLY, a añadir o descartar RESTRICT ON DROP, a
cambiar el tamaño de bloqueo, a capturar datos o volátil y a establecer los
valores por omisión de columna.
ADD definición-columna
Añade una columna a la tabla. La tabla no debe ser una tabla histórica para
una tabla temporal de período de sistema (SQLSTATE 428HZ) o una tabla con
tipo (SQLSTATE 428DH). Para todas las filas existentes en la tabla, el valor de
la nueva columna se establece en su valor por omisión. La nueva columna es
la última columna de la tabla; es decir, si al principio hay n columnas, la
columna añadida es la columna n+1.
Sentencias 133
ALTER TABLE
Sentencias 135
ALTER TABLE
Sentencias 137
ALTER TABLE
Sentencias 139
ALTER TABLE
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 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. En caso
contrario, el valor se genera mediante una lectura de la hora del
reloj durante la ejecución del primer suceso de los sucesos de la
transacción siguientes:
v Una sentencia de cambio de datos que exija que se asigne un
valor a la columna de inicio de fila o de ID de inicio de
transacción de una tabla
v La eliminación de una fila en 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
generados 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 sólo 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
tipo-datos, debe ser TIMESTAMP(12). Las columnas de ID de inicio
de transacción no se pueden actualizar.
COMPRESS SYSTEM DEFAULT
Especifica que los valores por omisión del sistema (es decir, los valores por
omisión que se utilizan para los tipos de datos cuando no se ha
especificado ningún valor específico) van a almacenarse utilizando el
espacio mínimo. Si no se especifica la cláusula VALUE COMPRESSION, se
devuelve un mensaje de aviso (SQLSTATE 01648) y los valores por omisión
del sistema no se almacenan utilizando el espacio mínimo.
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.
Sentencias 141
ALTER TABLE
Sentencias 143
ALTER TABLE
Sentencias 145
ALTER TABLE
Sentencias 147
ALTER TABLE
Sentencias 149
ALTER TABLE
Sentencias 151
ALTER TABLE
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 de inicio original.
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).
SET 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.
La columna debe existir en la tabla especificada (SQLSTATE 42703) y
ya tiene que estar definida con el atributo IDENTITY (SQLSTATE
42837).
NO CYCLE
Especifica que no se generarán valores para la columna de
identidad una vez que se haya alcanzado el valor máximo o el
valor mínimo.
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, cuando una columna de identidad
ascendente ha alcanzado el valor máximo, genera el valor mínimo;
o cuando una columna de secuencia descendente ha alcanzado el
valor mínimo, genera el 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 es necesario, si se
desean valores exclusivos, se puede definir un índice de unicidad
de una sola columna utilizando la columna de identidad para
asegurar la unicidad. 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).
SET NO CACHE o CACHE constante-entera
Especifica si deben mantenerse en la memoria algunos valores
preasignados, para conseguir un acceso más rápido. Esta opción se
utiliza para el rendimiento y el ajuste. La columna debe estar ya
definida con el atributo IDENTITY (SQLSTATE 42837).
NO CACHE
Especifica que no se deben preasignar los valores de la columna de
identidad. En un entorno DB2 pureScale, si los valores de
identidad deben generarse en orden de petición, debe utilizarse la
opción NO CACHE.
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.
Sentencias 153
ALTER TABLE
CACHE constante-entera
Especifica cuántos valores de la secuencia de identidad deben
asignarse previamente y conservarse 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 se necesita un nuevo valor para la columna de identidad y no
existen valores no utilizados disponibles en la antememoria, la
asignación del valor implica tener que esperar a que se produzca la
E/S en el archivo de anotaciones cronológicas. 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.
En caso de que se produzca una desactivación de la base de datos,
realizada con normalidad o como consecuencia de una anomalía en
el sistema, todos los valores de secuencia que se han colocado en la
antememoria y que no se han utilizado en las sentencias
confirmadas se pierden (es decir, nunca se utilizarán). El valor
especificado para la opción CACHE es el número máximo de
valores para la columna de identidad que puede perderse en caso
de anomalía del sistema.
El valor mínimo es 2 (SQLSTATE 42815).
En un entorno DB2 pureScale, si se especifican tanto CACHE como
ORDER, la especificación de ORDER altera temporalmente la
especificación de CACHE y, en su lugar, NO CACHE entrará en
vigor.
SET NO ORDER o ORDER
Especifica si los valores de la columna de identidad deben generarse
según el orden de petición. La columna debe existir en la tabla
especificada (SQLSTATE 42703) y ya tiene que estar definida con el
atributo IDENTITY (SQLSTATE 42837).
NO ORDER
Especifica que los valores de la columna de identidad no necesitan
generarse según el orden de petición.
ORDER
Especifica que los valores de la columna de identidad deben
generarse en el orden en que se solicitan.
RESTART o RESTART WITH constante-numérica
Restablece el estado de la secuencia asociada con la columna de
identidad. Si no se ha especificado WITH constante-numérica, la
secuencia de la columna de identidad se reiniciará en el valor que se
especificó, de forma implícita o explícita, como valor inicial para la
columna de identidad durante su creación original.
La columna debe existir en la tabla especificada (SQLSTATE 42703) y
ya tiene que estar definida con el atributo IDENTITY (SQLSTATE
42837). RESTART no cambia el valor START WITH original.
La constante-numérica es una constante numérica exacta que puede ser
cualquier valor positivo o negativo que pueda asignarse a esta
columna (SQLSTATE 42815), sin dígitos distintos de cero a la derecha
Sentencias 155
ALTER TABLE
Sentencias 157
ALTER TABLE
Activa el control de acceso de nivel de fila en la tabla. La tabla no debe ser una
tabla con tipo, una tabla de catálogo (SQLSTATE 55019), una tabla temporal
creada, una tabla temporal declarada (SQLSTATE 42995), un apodo (SQLSTATE
42809) o una vista (SQLSTATE 42809).
Se crea un permiso de fila por omisión de forma implícita que no permite el
acceso a ninguna fila de la tabla, a menos que lo permita de forma explícita un
permiso de fila creado por un usuario con autorización SECADM.
Cuando se hace referencia a la tabla en una sentencia de manipulación de
datos, la base de datos DB2 aplica de forma implícita todos los permisos de fila
que se han creado para la tabla, incluido el permiso de fila por omisión, con el
fin de controlar el conjunto de filas de la tabla a las que se puede acceder.
Si existe un activador para la tabla, el activador debe definirse con el atributo
SECURED (SQLSTATE 55019).
No se debe hacer referencia a la tabla en la definición de una vista si existe
para la vista un activador INSTEAD OF que se ha definido con el atributo
NOT SECURED (SQLSTATE 55019).
Si una tabla de consulta materializada hace referencia a la tabla, las funciones a
las que se hace referencia en la selección-completa de definición-consulta-
materializada deben definirse con el atributo SECURED (SQLSTATE 55019).
Si una tabla de consulta materializada (o una tabla de etapas) que depende de
la tabla (directa o indirectamente a través de una vista) para la que se va a
activar el control de acceso de nivel de fila y esa tabla de consulta
materializada (o tabla de etapas) aún no tienen el control de acceso de nivel de
fila activado, el control de acceso de nivel de fila se activa de forma implícita
para la tabla de consulta materializada (o la tabla de etapas). Esto limita el
acceso directo al contenido de la tabla de consulta materializada (o la tabla de
etapas). Una consulta que hace referencia explícita a la tabla antes de que se
defina ese permiso de fila devolverá un aviso de que no existen datos en la
tabla (SQLSTATE 02000). Para proporcionar acceso a la tabla de consulta
materializada (o tabla de etapas), se puede crear un permiso de fila adecuado o
se puede emitir una sentencia ALTER TABLE DEACTIVATE ROW ACCESS
CONTROL en la tabla de consulta materializada (o tabla de etapas) para
eliminar la protección de nivel de fila si ello es adecuado.
ACTIVATE ROW ACCESS CONTROL se ignora si el control de acceso a filas
ya se ha definido como activado para la tabla.
Si la tabla es una tabla temporal de período de sistema, el gestor de bases de
datos activa automáticamente el control de acceso a filas en la tabla histórica y
crea un permiso de fila por omisión para la tabla histórica.
ACTIVATE COLUMN ACCESS CONTROL
Activa el control de acceso de nivel de columna en la tabla. La tabla no debe
ser una tabla con tipo, una tabla de catálogo (SQLSTATE 55019), una tabla
temporal creada, una tabla temporal declarada (SQLSTATE 42995), un apodo
(SQLSTATE 42809) o una vista (SQLSTATE 42809).
El acceso a la tabla no se restringe, pero cuando se hace referencia a la tabla en
una sentencia de manipulación de datos, el gestor de bases de datos aplica de
forma implícita todas las máscaras de columna habilitadas que se hayan creado
para la tabla con el fin de enmascarar los valores devueltos para las columnas
referenciadas en la tabla de resultados final de las consultas.
Si existe un activador para la tabla, el activador debe definirse con el atributo
SECURED (SQLSTATE 55019).
Sentencias 159
ALTER TABLE
renombrar una columna para la que hay definida una máscara de columna
(SQLSTATE 42917). Si modifica el nombre de una columna que pertenece a una
tabla en la que se define una máscara o permiso, o a una tabla a la que se hace
referencia en la definición de una máscara o permiso, dicha máscara o permiso
queda invalidado. El acceso a una tabla que tenga activado el control de acceso
a columnas y tenga definida una máscara no válida queda bloqueado hasta
que la máscara no válida se inhabilite, descarte o vuelva a crear (SQLSTATE
560D0). El acceso a una tabla que tenga activado el control de acceso a filas y
tenga definido un permiso de fila no válido queda bloqueado hasta que el
permiso no válido se inhabilite, descarte o vuelva a crear (SQLSTATE 560D0).
nombre-columna-fuente
Especifica el nombre de la columna a la que se va a cambiar el nombre. El
nombre-columna-fuente debe identificar una columna existente de la tabla
(SQLSTATE 42703). El nombre no puede estar calificado. El nombre no
puede identificar una columna que de algún otro modo se añade, descarta
o modifica en la misma sentencia ALTER TABLE (SQLSTATE 42711).
nombre-columna-destino
El nuevo nombre de la columna. El nombre no puede estar calificado. No
deben utilizarse nombres de columna o nombres de período existentes en
la tabla (SQLSTATE 42711).
DROP PRIMARY KEY
Descarta la definición de la clave primaria y todas las restricciones de
referencia dependientes de esta clave primaria. La tabla ya debe tener una
clave primaria (SQLSTATE 42888).
DROP FOREIGN KEY nombre-restricción
Descarta la restricción de referencia nombre-restricción. El nombre-restricción debe
identificar una restricción de referencia (SQLSTATE 42704). Para obtener
información sobre las implicaciones de descartar una restricción referencial,
consulte la sección Notas.
DROP UNIQUE nombre-restricción
Descarta la definición de la restricción de unicidad nombre-restricción y todas las
restricciones de referencia que dependen de esta restricción de unicidad. El
nombre-restricción debe identificar una restricción de unicidad existente
(SQLSTATE 42704). Para obtener información sobre las implicaciones de
descartar una restricción de unicidad, consulte el apartado Notas.
DROP CHECK nombre-restricción
Descarta la restricción de comprobación nombre-restricción. El nombre-restricción
debe identificar una restricción de comprobación existente definida en la tabla
(SQLSTATE 42704).
DROP CONSTRAINT nombre-restricción
Descarta la restricción nombre-restricción. El nombre-restricción debe identificar
una restricción de comprobación, restricción de referencia, clave primaria o
restricción de unicidad existente definida en la tabla (SQLSTATE 42704). Para
obtener información sobre las implicaciones de descartar una restricción,
consulte la sección Notas.
DROP COLUMN
Descarta la columna identificada de la tabla. La tabla no debe ser una tabla con
tipo (SQLSTATE 428DH). La tabla no puede tener habilitada la captura de
datos (SQLSTATE 42997). Si se descarta una columna, la tabla debe
reorganizarse antes de realizar una operación de actualización, inserción o
Sentencias 161
ALTER TABLE
Sentencias 163
ALTER TABLE
Sentencias 165
ALTER TABLE
una página, al menos entero por ciento de la página se deja como espacio libre.
El valor PCTFREE sólo se tiene en cuenta en los programas de utilidad de
carga y de reorganización de tablas. 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. 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).
LOCKSIZE
Indica el tamaño (granularidad) de los bloqueos utilizados cuando se accede a
la tabla. El uso de esta opción en la definición de la tabla no impedirá que se
produzca el escalamiento de bloqueos normal. 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).
ROW
Indica la utilización de bloqueos de fila. Este es el tamaño de bloqueo por
omisión cuando se crea una tabla.
BLOCKINSERT
Indica el uso de bloqueos de bloques en las operaciones de inserción. Esto
significa que se adquiere el bloqueo exclusivo adecuado en el bloque antes
de la inserción y el bloqueo de fila no se realiza en la fila insertada. Esta
opción resulta de utilidad al insertar distintas transacciones en diferentes
celdas de la tabla. Las transacciones que efectúan inserciones en las mismas
celdas pueden seguir haciéndolo de manera simultánea, pero realizarán las
inserciones en distintos bloques, y esto puede afectar al tamaño de la celda
si se necesitan más bloques. Esta opción solo es válida para las tablas MDC
(SQLSTATE 42613).
TABLE
Indica la utilización de bloqueos de tabla. Esto significa que se adquiere el
bloqueo de compartimiento o exclusivo adecuado en la tabla y no se
utilizan bloqueos de intento (excepto el valor de ningún intento). En el
caso de las tablas particionadas, esta técnica de bloqueo se aplica tanto al
bloqueo de tabla como a los bloqueos de partición de datos para las
particiones de datos a las que se accede. El uso de este valor puede
mejorar el rendimiento de las consultas limitando el número de bloqueos
que es necesario adquirir. Sin embargo, también se reduce la
simultaneidad, dado que se retienen todos los bloqueos en toda la tabla.
APPEND
Indica si los datos se añaden al final de los datos de la tabla o si se colocan
donde haya espacio libre disponible en las páginas de datos. 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).
ON Indica que los datos de la tabla se añadirán y no se conservará la
información sobre el espacio libre de las páginas. La tabla no debe tener un
índice agrupado (SQLSTATE 428CA).
OFF
Indica que los datos de la tabla se colocarán donde haya espacio
disponible. Este es el valor por omisión cuando se crea una tabla.
Se debe reorganizar la tabla después de establecer APPEND OFF porque la
información sobre el espacio libre disponible no es exacta y puede dar
como resultado un rendimiento bajo durante la inserción.
Sentencias 167
ALTER TABLE
Sentencias 169
ALTER TABLE
Sentencias 171
ALTER TABLE
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 el rango de valores de la partición de datos nueva. Este rango
no puede solapar el de una partición de datos existente (SQLSTATE 56016).
Para ver una descripción de la cláusula-inicial y la cláusula-final, consulte
“CREATE TABLE”.
Si se omite la cláusula-inicial, la partición de datos nueva se supone que se
encuentra al final de la tabla. Si se omite la cláusula-final, la partición de
datos nueva se supone que se encuentra al principio de la tabla.
FROM nombre1-tabla
Especifica la tabla que se utilizará como fuente de datos de la partición
nueva. La definición de tabla de nombre-tabla1 no puede tener varias
particiones de datos y debe coincidir con la tabla modificada en los
aspectos siguientes (SQLSTATE 428GE):
v El número de columnas debe ser el mismo.
v Los tipos de datos de las columnas de la misma posición ordinal en la
tabla deben ser los mismos.
v La característica de capacidad de nulos de las columnas de la misma
posición ordinal en la tabla debe ser la misma.
v Si la tabla de destino tiene una columna de indicación de fecha y hora
de cambio de fila, la columna correspondiente de la tabla de origen debe
ser una columna de indicación de fecha y hora de cambio de fila.
v Si los datos también se distribuyen, deben distribuirse en el mismo
grupo de particiones de base de datos mediante el mismo método de
distribución.
v Si los datos de cualquiera de las tablas están organizados, la
organización debe coincidir.
v Para tipos de datos estructurados, XML o LOB, el valor de INLINE
LENGTH debe ser igual.
v Si la tabla de destino tiene definido un período BUSINESS_TIME, la
tabla fuente debe tener un periodo BUSINESS_TIME definido en las
columnas correspondientes.
Una vez enlazados correctamente los datos de nombre-tabla1, se realiza una
operación equivalente a DROP TABLE nombre-tabla1 para eliminar esta
tabla, que ya no tiene datos, de la base de datos.
BUILD MISSING INDEXES
Especifica que si la tabla fuente no tiene índices que corresponden a los
índices particionados en la tabla de destino, una operación SET
INTEGRITY crea índices particionados en la nueva partición de datos para
que se correspondan con los índices particionados de las particiones de
datos existentes. Los índices de la tabla fuente que no coinciden con los
índices particionados de la tabla de destino se descartan durante el proceso
de enlace.
REQUIRE MATCHING INDEXES
Especifica que la tabla fuente debe tener índices que coincidan con los
índices particionados de la tabla de destino; de lo contrario, se devuelve un
Sentencias 173
ALTER TABLE
Normas
v Cualquier restricción de clave primaria o de unicidad definida en la tabla debe
ser un superconjunto de la clave de distribución, si existe (SQLSTATE 42997).
v Las claves primarias o exclusivas no pueden ser subconjuntos de dimensiones
(SQLSTATE 429BE).
v Únicamente se puede hacer referencia a una columna en una cláusula ADD,
ALTER o DROP COLUMN de una sola sentencia ALTER TABLE (SQLSTATE
42711).
v No se puede modificar una longitud de columna, un tipo de datos un atributo
oculto, ni se puede descartar la columna, si la tabla tiene alguna tabla de
consulta materializada dependiente de la tabla (SQLSTATE 42997).
v Las columnas de tipo VARCHAR y VARGRAPHIC que se han modificado para
ser mayores que 4000 y 2000 respectivamente, no se deben utilizar como
parámetros de entrada en las funciones del esquema SYSFUN (SQLSTATE
22001).
v No se puede modificar una longitud de columna si la tabla tiene alguna vista
habilitada para la optimización de consulta dependiente de la tabla (SQLSTATE
42997).
v La tabla debe colocarse en estado pendiente de establecer integridad utilizando
la sentencia SET INTEGRITY con la opción OFF (SQLSTATE 55019) antes de:
– Añadir una columna con una expresión de generación
– Modificar la expresión generada de una columna
– Cambiar una columna para que contenga una expresión generada
v No se puede modificar una columna existente para establecerla como de tipo
DB2SECURITYLABEL (SQLSTATE 42837).
v La definición de una columna de tipo DB2SECURITYLABEL falla si la tabla no
tiene asociada una política de seguridad (SQLSTATE 55064).
v No se puede modificar ni descartar una columna de tipo DB2SECURITYLABEL
(SQLSTATE 42817).
v Una operación ALTER TABLE para marcar una tabla como protegida falla si hay
una MQT dependiente de esa tabla (SQLSTATE 55067).
v El enlace de una partición a una tabla particionada protegida falla si la tabla
fuente y la tabla de destino no están protegidas con la misma política de
seguridad, no tienen la misma columna de etiqueta de seguridad de fila y no
tienen el mismo conjunto de columnas protegidas (SQLSTATE 428GE).
v Si se hace referencia a una columna generada en una clave de particionamiento
de tabla, no puede modificarse la expresión de columna generada (SQLSTATE
42837).
v La cláusula-isolation no puede especificarse en la selección completa (fullselect) de
la definición-consulta-materializada (SQLSTATE 42601).
Sentencias 175
ALTER TABLE
Notas
v Se ha producido una operación de REORG recomendada cuando los cambios
obtenidos de una sentencia ALTER TABLE afectan al formato de fila de los
datos. En este caso, la mayoría de las operaciones posteriores de la tabla quedan
restringidas hasta que se ejecuta correctamente una operación de reorganización
de la tabla. Pueden ejecutarse hasta tres sentencias ALTER TABLE de este tipo
para una tabla antes de que deba realizarse la reorganización (SQLSTATE 57016).
Pueden realizarse varias modificaciones que constituirían una operación de
REORG recomendada en una única sentencia ALTER TABLE (una por columna);
esto se considera una sola operación de REORG recomendada. Por ejemplo,
descartar dos columnas en una única sentencia ALTER TABLE no se considera
dos operaciones de REORG recomendada. Sin embargo, si descartara dos
columnas en dos sentencias ALTER TABLE independientes, se consideraría que
son dos sentencias que contienen operaciones de REORG recomendada.
v Las operaciones de tabla siguientes están permitidas tras realizarse
correctamente una operación de REORG recomendada:
– ALTER TABLE (sin necesidad de validación de los datos de fila) Sin embargo,
las operaciones siguientes no están permitidas (SQLSTATE 57007):
- ADD CHECK CONSTRAINT
- ADD REFERENTIAL CONSTRAINT
- ADD UNIQUE CONSTRAINT
- ALTER COLUMN SET NOT NULL
– DROP TABLE
– RENAME TABLE
– REORG TABLE
– TRUNCATE TABLE
– Acceso de exploración de tabla de datos de tabla
v Al modificar una tabla para convertirla en una tabla de consulta materializada,
la tabla se coloca en estado pendiente de establecer integridad. Si la tabla se
define como REFRESH IMMEDIATE, la tabla se debe sacar del estado pendiente
de establecer integridad para poder invocar los mandatos INSERT, DELETE o
UPDATE en la tabla a la que hace referencia la selección completa. La tabla se
puede sacar del estado pendiente de establecer integridad utilizando REFRESH
TABLE o SET INTEGRITY, con la opción IMMEDIATE CHECKED, para renovar
completamente los datos de la tabla de acuerdo con la selección completa. Si los
datos de la tabla reflejan fielmente el resultado de la selección completa, se
puede utilizar la opción IMMEDIATE UNCHECKED de SET INTEGRITY para
sacar la tabla del estado pendiente de establecer integridad.
v La modificación de una tabla con el fin de convertirla en una tabla de consulta
materializada REFRESH IMMEDIATE dará lugar a que se invalide cualquier
paquete sujeto a la utilización de INSERT, DELETE o UPDATE en la tabla a la
que hace referencia la selección completa.
v La modificación de una tabla con el fin de convertir una tabla de consulta
materializada en una tabla normal dará lugar a que se invalide cualquier
paquete que dependa de la tabla.
Sentencias 177
ALTER TABLE
Sentencias 179
ALTER TABLE
Sentencias 181
ALTER TABLE
Sentencias 183
ALTER TABLE
columna para una tabla. El acceso a la tabla no se restringe, pero cuando la tabla
se referencia en una sentencia de manipulación de datos, todas las máscaras de
columna habilitadas que se han creado para la tabla se aplican para enmascarar
los valores de columna referenciados en la tabla resultante final.
Cuando se utilizan máscaras de columna para enmascarar valores de columna,
determinan los valores de la tabla resultante final. Si una columna tiene una
máscara de columna y la columna (específicamente una referencia simple a un
nombre de columna o una columna incorporada en una expresión) aparece en la
lista de selección más externa, la máscara de columna se aplica a la columna
para generar los valores para la tabla de resultados final. Si la columna no
aparece en la lista de selección más externa, pero participa en la tabla resultante
final, por ejemplo, aparece en una expresión de tabla materializada o en una
vista, la máscara de columna se aplica a la columna de manera que el valor
enmascarado se incluye en la tabla resultante de la expresión de tabla
materializada o la vista para que se pueda utilizar en la tabla resultante final.
La aplicación de las máscaras de columna no interfieren con las operaciones de
las demás cláusulas dentro de la sentencia, como puede ser WHERE, GROUP
BY, HAVING, SELECT DISTINCT y ORDER BY. Las filas devueltas en la tabla
de resultados final permanecen iguales, salvo que puede que las máscaras de
columna hayan enmascarado los valores de las filas resultantes. De este modo, si
la columna enmascarada también aparece en una clave-clasificación ORDER BY, el
orden se basa en los valores de columna originales y puede que los valores
enmascarados de la tabla de resultados final no reflejen ese orden. Asimismo, es
posible que los valores enmascarados no reflejen la exclusividad aplicada por
SELECT DISTINCT.
Se aplica una máscara de columna en los contextos siguientes:
– La(s) cláusula(s) SELECT más externa(s) de una sentencia SELECT o SELECT
INTO, o si la columna no aparece en la lista de selección más externa, pero
participa en la tabla resultante final, las cláusulas SELECT más externas de la
expresión de tabla materializada o la vista correspondiente donde aparece la
columna.
– La(s) cláusula(s) SELECT más externa(s) de una operación SELECT FROM
INSERT, SELECT FROM UPDATE o SELECT FROM DELETE.
– La(s) cláusula(s) SELECT más externa(s) que se utiliza(n) para derivar valores
nuevos para una sentencia INSERT, UPDATE o MERGE o una sentencia de
asignación de nombre-variable-transición SET. Se aplica la misma máscara a una
expresión de selección completa escalar que aparece en la(s) cláusula(s)
SELECT más exterior(es) de las sentencias mencionadas anteriormente, al lado
derecho de una sentencia de asignación de variable-lenguaje-principal SET, a la
sentencia VALUES INTO o a la sentencia VALUES.
Las máscaras de columna no se aplican cuando la columna enmascarada aparece
en los contextos siguientes:
– Cláusulas WHERE.
– Cláusulas GROUP BY.
– Cláusulas HAVING.
– SELECT DISTINCT.
– Cláusulas ORDER BY.
v El control de acceso a filas y columnas no se aplica cuando se cumplimentan las
tablas de EXPLAIN: El control de acceso a filas y columnas puede aplicarse a
las tablas de EXPLAIN. No obstante, los permisos de fila habilitados y las
máscaras de columna no se aplican cuando el gestor de bases de datos inserta
filas en estas tablas.
Sentencias 185
ALTER TABLE
Sentencias 187
ALTER TABLE
Ejemplos
v Ejemplo 1: Añada una nueva columna llamada RATING, que tiene un carácter
de longitud, a la tabla DEPARTMENT.
ALTER TABLE DEPARTMENT
ADD RATING CHAR(1)
v Ejemplo 2: Añada una nueva columna llamada SITE_NOTES a la tabla
PROJECT. Cree SITE_NOTES como una columna de longitud variable con una
longitud máxima de 1000 bytes. Los valores de la columna no tienen un juego
de caracteres asociado y, por lo tanto, no deben convertirse.
ALTER TABLE PROJECT
ADD SITE_NOTES VARCHAR(1000) FOR BIT DATA
v Ejemplo 3: Suponga que hay una tabla denominada EQUIPMENT definida con
las columnas siguientes:
Nombre de columna Tipo de datos
EQUIP_NO INT
EQUIP_DESC VARCHAR(50)
LOCATION VARCHAR(50)
EQUIP_OWNER CHAR(3)
Sentencias 189
ALTER TABLE
Cambie esta tabla para que se puedan almacenar los salarios en una columna
DECIMAL(6,2), establezca PROMOTION_DATE como campo opcional que se
puede definir en un valor nulo y elimine la columna EMP_POSITION.
ALTER TABLE SALARY_DATA
ALTER COLUMN SALARY SET DATA TYPE DECIMAL(6,2)
ALTER COLUMN PROMOTION_DATE DROP NOT NULL
DROP COLUMN EMP_POSITION
v Ejemplo 16: Añada una columna denominada DATE_ADDED a la tabla BOOKS.
El valor por omisión de esta columna es la indicación de fecha y hora actual.
ALTER TABLE BOOKS
ADD COLUMN DATE_ADDED TIMESTAMP
WITH DEFAULT CURRENT TIMESTAMP
v Ejemplo 17: Convierta una tabla con atributos de seguridad de control de acceso
basado en etiquetas en una tabla de consulta materializada. Las tablas base tt1 y
tt2 existen y se crearon con el siguiente SQL:
CREATE TABLE tt1
(c1 INT SECURED WITH C, c2 DB2SECURITYLABEL) SECURITY POLICY P;
CREATE TABLE tt2
(c3 INT SECURED WITH B, c4 DB2SECURITYLABEL) SECURITY POLICY P;
Sentencias 191
ALTER TABLESPACE
ALTER TABLESPACE
La sentencia ALTER TABLESPACE se utiliza para modificar un espacio de tablas
existente.
Invocación
Autorización
Sintaxis
ADD cláusula-add
BEGIN NEW STRIPE SET cláusula-contenedor-bd
cláusula-en-particiones-bd
DROP cláusula-descartar-contenedor
cláusula-en-particiones-bd
REDUCE
cláusula-contenedor-bd cláusula-en-particiones-bd
cláusula-todos-contenedores
MAX
STOP
entero
K
M
G
PERCENT
EXTEND cláusula-contenedor-bd
RESIZE cláusula-todos-contenedores cláusula-en-particiones-bd
REBALANCE
SUSPEND
RESUME
PREFETCHSIZE AUTOMATIC
número-de-páginas
entero K
M
BUFFERPOOL nombre-agrup-almac-interm
OVERHEAD número-de-milisegundos
INHERIT
TRANSFERRATE número-de-milisegundos
INHERIT
FILE SYSTEM CACHING
NO FILE SYSTEM CACHING
DROPPED TABLE RECOVERY ON
OFF
SWITCH ONLINE
AUTORESIZE NO
YES
INCREASESIZE entero PERCENT
K
M
G
MAXSIZE entero K
M
G
NONE
CONVERT TO LARGE
LOWER HIGH WATER MARK
STOP
USING STOGROUP nombre-grupo-almacenamiento
DATA TAG constante-entero
INHERIT
NONE
MANAGED BY AUTOMATIC STORAGE
cláusula-add:
cláusula-contenedor-bd
TO STRIPE SET conjunto-bandas cláusula-en-particiones-bd
cláusula-contenedor-sistema cláusula-en-particiones-bd
cláusula-contenedor-bd:
cláusula-descartar-contenedor:
Sentencias 193
ALTER TABLESPACE
( FILE 'serie-contenedor' )
DEVICE
cláusula-contenedor-sistema:
( 'serie-contenedor' )
cláusula-en-particiones-bd:
ON DBPARTITIONNUM
DBPARTITIONNUMS
( partición-bd-número1 )
TO partición-bd-número2
cláusula-todos-contenedores:
CONTAINERS
( ALL número-de-páginas )
entero K
M
G
Descripción
nombre-espacio-tablas
Nombra el espacio de tablas. Este nombre consta de una sola parte. Es un
identificador de SQL largo (ordinario o delimitado).
ADD
Especifica que se deben añadir uno o varios contenedores nuevos al espacio de
tablas.
TO STRIPE SET conjunto-bandas
Especifica que se añaden uno o más contenedores al espacio de tablas y que se
colocarán en el conjunto de bandas especificado.
BEGIN NEW STRIPE SET
Especifica que se debe crear un conjunto de bandas nuevo en el espacio de
tablas, y que se deben añadir uno o varios contenedores a este conjunto de
bandas nuevo. Los contenedores que se añadan posteriormente mediante la
opción ADD se añadirán a este nuevo conjunto de bandas a menos que se
especifique TO STRIPE SET.
DROP
Especifica que se deben descartar uno o varios contenedores del espacio de
tablas.
REDUCE
Para espacios de tablas de almacenamiento no automático, especifica que va a
reducirse el tamaño de los contenedores existentes. El tamaño que se especifica
es el tamaño que se reducirá el contenedor existente. Si se especifica la
cláusula-todos-contenedores, todos los contenedores del espacio de tablas
disminuirán de tamaño. Si la reducción del tamaño da como resultado un
tamaño de espacio de tablas que es inferior a la marca de límite superior
actual, se intentará reducir la marca de límite superior antes de intentar reducir
los contenedores. Para espacios de tablas de almacenamiento no automático, la
cláusula REDUCE debe ir seguida de una cláusula-contenedor-bd o una
cláusula-todos-contenedores.
Para espacios de tablas de almacenamiento automático, especifica que, si se
puede, hay que reducir la marca de límite superior actual, y que hay que
reducir el tamaño del espacio de tablas según la nueva marca de límite
superior.Para espacios de tablas de almacenamiento automático, la cláusula
REDUCE no debe ir seguida de una cláusula-contenedor-bd, una
cláusula-todos-contenedores o una cláusula-en-particiones-bd.
Nota: La opción REDUCE con las cláusulas MAX, valor numérico, PERCENT
o STOP y la opción LOWER HIGH WATER MARK con la cláusula STOP sólo
están disponibles para espacios de tablas gestionados por base de datos y por
almacenamiento automático que contienen el atributo de almacenamiento
reclamable. Además, estas opciones se deben especificar y ejecutar de forma
independiente al resto de opciones, incluso cada una de ellas con respecto al
resto.
La cláusula MAX, STOP, entero [K | M | G] o entero PERCENT entra en vigor
cuando la sentencia se procesa y no se retrotrae si la unidad de trabajo, donde
se ejecuta la sentencia, se retrotrae.
cláusula-contenedor-bd
Añade uno o varios contenedores a un espacio de tablas DMS. El espacio
de tablas debe identificar un espacio de tablas DMS que ya exista en el
servidor de aplicaciones.
cláusula-todos-contenedores
Amplía, reduce o cambia el tamaño de todos los contenedores de un
espacio de tablas DMS. El espacio de tablas debe identificar un espacio de
tablas DMS que ya exista en el servidor de aplicaciones.
MAX
Para los espacios de tablas de almacenamiento automático con
almacenamiento reclamable, especifica que el número máximo de
extensiones debería trasladarse al principio del espacio de tablas para
reducir la marca de límite superior. Además, el tamaño del espacio de
tablas disminuirá hasta la nueva marca de límite superior. Esto no se aplica
a los espacios de tablas de almacenamiento no automático.
STOP
Para los espacios de tablas de almacenamiento automático con
almacenamiento reclamable, interrumpe la operación de traslado de
extensiones si se está ejecutando. Esta opción no está disponible para
espacios de tablas de almacenamiento no automático.
entero [K | M | G] o entero PERCENT
Para los espacios de tablas de almacenamiento automático con
Sentencias 195
ALTER TABLESPACE
Sentencias 197
ALTER TABLESPACE
entero K | M
Especifica los valores de tamaño de captación previa como valor de entero
seguido de K (de kilobytes) o de M (de megabytes). Si se especifica de este
modo, se utiliza el límite inferior del número de bytes dividido por el
tamaño de página para determinar el valor correspondiente al número de
páginas para el tamaño de captación previa.
BUFFERPOOL nombre-agrup-almac-interm
El nombre de la agrupación de almacenamientos intermedios utilizado para las
tablas de este espacio de tablas. La agrupación de almacenamientos
intermedios debe existir actualmente en la base de datos (SQLSTATE 42704).
Debe haberse definido el grupo de particiones de base de datos del espacio de
tablas para la agrupación de almacenamientos intermedios (SQLSTATE 42735).
OVERHEAD número-de-milisegundos u OVERHEAD INHERIT
Especifica la actividad general del controlador de E/S, la búsqueda de disco y
el tiempo de latencia. Este valor sirve para determinar el coste de E/S durante
la optimización de una consulta.
número-de-milisegundos
Cualquier literal numérico (entero, decimal o de coma flotante) que
especifique la actividad general del controlador de E/S y el tiempo de
búsqueda y latencia del disco, en milisegundos. El número debe ser el
promedio de todos los contenedores que pertenecen al espacio de tablas, si
no es el mismo para todos los contenedores.
INHERIT
Si se especifica INHERIT, el espacio de tablas debe definirse mediante el
almacenamiento automático y OVERHEAD se hereda de forma dinámica
del grupo de almacenamiento. INHERIT no puede especificarse si el
espacio de tablas no se define mediante el almacenamiento automático
(SQLSTATE 42858). Si OVERHEAD se establece en indefinido para el
grupo de almacenamiento y OVERHEAD se establece en INHERIT, se
utilizará el valor por omisión de creación de base de datos.
En el caso de una base de datos que se ha creado en DB2 V10.1 o posterior,
la actividad general del controlador de E/S por omisión y el tiempo de
búsqueda y latencia de disco es 6,725 milisegundos.
En el caso de una base de datos que se ha actualizado de una versión
anterior de DB2 a DB2 V10.1 o posterior, la actividad general del
controlador de E/S y el tiempo de búsqueda y latencia de disco por
omisión son los siguientes:
v 7,5 milisegundos para una base de datos creada en DB2 versión 9 o
posterior
v 12,67 milisegundos para las bases de datos creadas entre DB2 versión 8.2
y DB2 versión 9
v 24,1 milisegundos para las versiones DB2 anteriores a 8.2
TRANSFERRATE número-de-milisegundos o TRANSFERRATE INHERIT
Especifica el tiempo necesario para leer una página en memoria. Este valor
sirve para determinar el coste de E/S durante la optimización de una consulta.
número-de-milisegundos
Cualquier literal numérico (entero, decimal o de coma flotante) que
especifique el tiempo para leer una página (de 4K u 8K)en la memoria en
milisegundos. El número debe ser el promedio de todos los contenedores
que pertenecen al espacio de tablas, si no es el mismo para todos los
contenedores.
INHERIT
Si se especifica INHERIT, el espacio de tablas debe definirse mediante el
almacenamiento automático y TRANSFERRATE se hereda de forma
dinámica del grupo de almacenamiento. INHERIT no puede especificarse
si el espacio de tablas no se define mediante el almacenamiento automático
(SQLSTATE 42858). Si la DEVICE READ RATE (velocidad de lectura del
dispositivo) del grupo de almacenamiento se establece en un valor
indefinido y el usuario establece TRANSFERRATE en INHERIT, se utilizará
el valor por omisión de creación de base de datos.
Cuando un espacio de tablas de almacenamiento automático hereda el
valor TRANSFERRATE del grupo de almacenamiento que utiliza, la
DEVICE READ RATE del grupo de almacenamiento, que se expresa en
megabytes por segundo, se convierte en la cuenta de milisegundos por
página leída para el valor PAGESIZE del espacio de tablas. La fórmula de
conversión es la siguiente:
TRANSFERRATE = ( 1 / DEVICE READ RATE ) * 1000 / 1024000 *
PAGESIZE
Sentencias 199
ALTER TABLESPACE
SWITCH ONLINE
Especifica que los espacios de tablas en estado OFFLINE deben ponerse en
línea si sus contenedores han pasado a ser accesibles. Si los contenedores no
son accesibles, se devolverá un error (SQLSTATE 57048).
AUTORESIZE
Especifica si debe habilitarse o no la posibilidad de cambiar automáticamente
el tamaño de un espacio de tablas gestionado por la base de datos (DMS) o de
un espacio de tablas de almacenamiento automático. Los espacios de tablas de
redimensionamiento automático aumentan automáticamente de tamaño cuando
se llenan.
NO Especifica que debe inhabilitarse la posibilidad de cambiar
automáticamente el tamaño de un espacio de tablas DMS o de un espacio
de tablas de almacenamiento automático. Si se inhabilita la posibilidad de
cambiar automáticamente el tamaño, no se conservará ningún valor que se
haya especificado anteriormente para INCREASESIZE o MAXSIZE.
YES
Especifica que debe habilitarse la posibilidad de cambiar automáticamente
el tamaño de un espacio de tablas DMS o de un espacio de tablas de
almacenamiento automático.
INCREASESIZE entero PERCENT o INCREASESIZE entero K | M | G
Especifica la cantidad, por partición de base de datos, en la que aumentará
automáticamente un espacio de tablas habilitado para cambiar de tamaño
automáticamente, cuando se llene el espacio de tablas y se haya efectuado una
petición de espacio. El valor entero debe ir seguido de:
v PERCENT para especificar la cantidad como porcentaje del tamaño de
espacio de tablas en el momento en el que se efectúe una petición de
espacio. Cuando se especifique PERCENT, el valor entero debe estar entre 0
y 100 (SQLSTATE 42615).
v K (de kilobytes), M (de megabytes) o G (de gigabytes) para especificar la
cantidad en bytes.
Tenga en cuenta que el valor real utilizado puede ser ligeramente inferior o
superior al especificado, ya que el gestor de bases de datos procura mantener
un incremento coherente en los contenedores del espacio de tablas.
MAXSIZE entero K | M | G o MAXSIZE NONE
Especifica el tamaño máximo hasta el que se puede aumentar automáticamente
un espacio de tablas habilitado para redimensionamiento automático.
entero
Especifica un límite fijo sobre el tamaño, por partición de base de datos,
hasta el cual puede aumentar automáticamente un espacio de tablas DMS
o un espacio de tablas de almacenamiento automático. El valor entero debe
ir seguido de K (de kilobytes), M (de megabytes) o G (de gigabytes). Tenga
en cuenta que el valor real utilizado puede ser ligeramente inferior al
especificado, ya que el gestor de bases de datos procura mantener un
incremento coherente en los contenedores del espacio de tablas.
NONE
Especifica que debe permitirse incrementar el espacio de tablas hasta la
capacidad del sistema de archivos o hasta el tamaño máximo del espacio
de tablas (descrito en “Límites de SQL y XML”).
CONVERT TO LARGE
Modifica un espacio de tablas DMS normal existente para que sea un espacio
de tablas DMS grande. El espacio de tablas y su contenido se bloquean durante
Sentencias 201
ALTER TABLESPACE
Normas
v La cláusula BEGIN NEW STRIPE SET no puede especificarse en la misma
sentencia que ADD, DROP, EXTEND, REDUCE ni RESIZE, a menos que dichas
cláusulas se dirijan a particiones de bases de datos distintas (SQLSTATE 429BC).
v El valor de conjunto de bandas especificado con la cláusula TO STRIPE SET se
debe encontrar dentro del rango válido para el espacio de tablas que se está
modificando (SQLSTATE 42615).
v Al añadir o eliminar espacio del espacio de tablas, se deben seguir las normas
siguientes:
– EXTEND y RESIZE pueden utilizarse en la misma sentencia, siempre que se
aumente el tamaño de cada contenedor (SQLSTATE 429BC).
Sentencias 203
ALTER TABLESPACE
– USING STOGROUP
v Las cláusulas ADD, DROP, RESIZE, EXTEND, REDUCE, LOWER HIGH WATER
MARK y BEGIN_STRIPE_SET no se pueden usar en combinación con la cláusula
MANAGED BY AUTOMATIC STORAGE o USING STOGROUP (SQLSTATE
429BC).
v La cláusula USING STOGROUP no se puede especificar si el espacio de tablas
está en el estado del tipo "el reequilibrador está activo" (SQLSTATE 55041).
v Límites de tamaño de contenedor: En espacios de tablas DMS, un contenedor
debe tener al menos el doble del tamaño de extensión en páginas de longitud
(SQLSTATE 54039). El tamaño máximo de un contenedor depende del sistema
operativo.
v Límite de longitud de definición de contenedor: Cada definición de contenedor
requiere 53 bytes más el número de bytes necesario para almacenar el nombre
de contenedor. La longitud combinada de todas las definiciones de contenedores
para el espacio de tablas no puede superar los 208 kilobytes (SQLSTATE 54034).
Notas
v Las operaciones de contenedor por omisión son operaciones de contenedor que
se han especificado en la sentencia ALTER TABLESPACE, pero que no se han
dirigido de forma explícita a una partición de base de datos específica. Estas
operaciones de contenedor se envían a cualquier partición de base de datos que
no aparezca en la lista de la sentencia. Si estas operaciones de contenedor por
omisión no se envían a ninguna partición de base de datos porque todas las
particiones de base de datos se han mencionado explícitamente para una
operación de contenedor, se devuelve un mensaje de aviso (SQLSTATE 01589).
v Tras añadir o eliminar espacio de un espacio de tablas y confirmar la
transacción, se puede reequilibrar el contenido del espacio de tablas entre los
contenedores. El acceso al espacio de tablas no está restringido durante el
reequilibrio.
v Si el espacio de tablas se encuentra en estado OFFLINE y los contenedores han
pasado a ser accesibles, el usuario puede desconectar todas las aplicaciones y
volverlas a conectar a la base de datos para que el espacio de tablas salga del
estado OFFLINE. De forma alternativa, la opción SWITCH ONLINE puede
activar el espacio de tablas (cambiar su estado OFFLINE) mientras el resto de la
base de datos sigue activa y se utiliza.
v Si se añade más de un contenedor a un espacio de tablas, se recomienda
añadirlos en la misma sentencia para que el reequilibrio sólo deba efectuarse
una vez. Si se intenta añadir contenedores al mismo espacio de tablas en
sentencias ALTER TABLESPACE diferentes dentro de una sola transacción, se
producirá un error (SQLSTATE 55041).
v Si se intenta ampliar, reducir, cambiar el tamaño o descartar contenedores que
no existen, se generará un error (SQLSTATE 428B2).
v Cuando se amplía, se reduce o se cambia el tamaño de un contenedor, el tipo de
contenedor debe coincidir con el tipo que se ha utilizando durante la creación
del contenedor (SQLSTATE 428B2).
v Si se intenta cambiar los tamaños de los contenedores de un mismo espacio de
tablas, utilizando sentencias ALTER TABLESPACE diferentes pero en una sola
transacción, se producirá un error (SQLSTATE 55041).
v En una base de datos particionada, si más de una partición de base de datos
reside en el mismo nodo físico, no podrá especificarse el mismo dispositivo o vía
de acceso específica para tales particiones de base de datos (SQLSTATE 42730).
Para este entorno, especifique una serie-contenedor específica para cada partición
o bien utilice un nombre de vía de acceso relativa.
Sentencias 205
ALTER TABLESPACE
Ejemplos
v Ejemplo 1: Añada un dispositivo al espacio de tablas PAYROLL.
ALTER TABLESPACE PAYROLL
ADD (DEVICE ’/dev/rhdisk9’ 10000)
v Ejemplo 2: Cambie el tamaño de captación previa y la actividad general de E/S
para el espacio de tablas ACCOUNTING.
O
ALTER TABLESPACE TS1
RESIZE (ALL 2000)
O
ALTER TABLESPACE TS1
EXTEND (FILE ’/conts/cont0’ 1000,
DEVICE ’/dev/rcont1’ 1500,
FILE ’cont2’ 1300)
v Ejemplo 4: Amplíe todos los contenedores del espacio de tablas DATA_TS en
1000 páginas.
ALTER TABLESPACE DATA_TS
EXTEND (ALL 1000)
v Ejemplo 5: Cambie el tamaño de todos los contenedores del espacio de tablas
INDEX_TS a 100 megabytes (MB).
ALTER TABLESPACE INDEX_TS
RESIZE (ALL 100 M)
v Ejemplo 6: Añada tres nuevos contenedores. Amplíe el primer contenedor y
cambie el tamaño del segundo.
ALTER TABLESPACE TS0
ADD (FILE ’cont2’ 2000, FILE ’cont3’ 2000)
ADD (FILE ’cont4’ 2000)
EXTEND (FILE ’cont0’ 100)
RESIZE (FILE ’cont1’ 3000)
v Ejemplo 7: El espacio de tablas TSO existe en las particiones de base de datos 0, 1
y 2. Añada un contenedor nuevo a la partición de base de datos 0. Amplíe todos
los contenedores de la partición de base de datos 1. Cambie el tamaño de un
contenedor en todas las particiones de bases de datos, excepto en las
especificadas de forma explícita (es decir, las particiones de bases de datos 0 y
1).
ALTER TABLESPACE TS0
ADD (FILE ’A’ 200) ON DBPARTITIONNUM (0)
EXTEND (ALL 200) ON DBPARTITIONNUM (1)
RESIZE (FILE ’B’ 500)
Sentencias 207
ALTER TABLESPACE
ALTER THRESHOLD
La sentencia ALTER THRESHOLD modifica la definición de un umbral.
Invocación
Autorización
Sintaxis
(1)
WHEN modificar-predicado-umbral PERFORM ACTION
acciones-modificar-umbral-superado
EXCEEDED modificar-acciones-umbral-superado
ENABLE
DISABLE
modificar-predicado-umbral:
Sentencias 209
ALTER THRESHOLD
acciones-modificar-umbral-superado:
(1)
COLLECT ACTIVITY DATA modificar-cláusula-recopilar-datos-actividad
NONE
STOP EXECUTION
CONTINUE
FORCE APPLICATION
acción-volver-correlacionar-actividad
modificar-cláusula-recopilar-datos-actividad:
MEMBER
ON COORDINATOR
MEMBERS
ON ALL
WITHOUT DETAILS
,
(3)
WITH DETAILS
SECTION AND VALUES
acción-volver-correlacionar-actividad:
Notas:
1 Una misma cláusula no se debe especificar más de una vez.
2 Cada valor de etiqueta de datos sólo se puede especificar una vez.
3 La palabra clave DETAILS es la información mínima que debe especificarse,
seguida de la opción separada por una coma.
Descripción
nombre-umbral
Identifica el umbral que se va a modificar. Este nombre consta de una sola
parte. Se trata de un identificador de SQL (ordinario o delimitado). El nombre
debe identificar exclusivamente un umbral existente en el servidor actual
(SQLSTATE 42704).
WHEN modificar-predicado-umbral o WHEN EXCEEDED
Sustituye el valor de vinculación superior en la condición de predicado de
umbral por un nuevo valor de vinculación superior. La condición del umbral
no puede cambiarse por una condición diferente.
PERFORM ACTION
Cuando se modifica el valor de la condición de predicado de umbral,
especifica que la acción que ha superado el umbral no ha cambiado.
EXCEEDED
Especifica que debe conservarse el mismo predicado de umbral que se
especificó en un principio para este umbral modificado.
modificar-predicado-umbral
TOTALMEMBERCONNECTIONS > valor-entero
Esta condición define un límite superior sobre el número de conexiones de
coordinador que pueden ejecutarse simultáneamente en un miembro. Este
valor puede ser cero o cualquier entero positivo (SQLSTATE 42820). Un
valor de cero significa que se impedirá la conexión de cualquier conexión
de coordinador nueva. Proseguirán todas las conexiones en cola o en
ejecución en la actualidad.
TOTALSCMEMBERCONNECTIONS > valor-entero
Esta condición define un límite superior en el número de conexiones de
coordinador que pueden ejecutarse simultáneamente en un miembro de
una superclase de servicio específica. Este valor puede ser cero o cualquier
entero positivo (SQLSTATE 42820). Un valor de cero significa que se
impedirá que cualquier conexión nueva se una a la clase de servicio.
Proseguirán todas las conexiones en cola o en ejecución en la actualidad.
Sentencias 211
ALTER THRESHOLD
materializada, ya que son iniciadas por medio del gestor de base de datos
y no invocadas directamente mediante la lógica de usuario.
CONCURRENTDBCOORDACTIVITIES > valor-entero
Esta condición define un límite superior sobre el número de actividades de
coordinador de base de datos reconocidas que pueden ejecutarse
simultáneamente en todos los miembros del dominio especificado. Este
valor puede ser cero o cualquier entero positivo (SQLSTATE 42820). Un
valor de cero significa que se impedirá la ejecución de las actividades de
cualquier coordinador de base de datos nueva. Proseguirán todas las
actividades de coordinador de base de datos que estén en cola o en
ejecución en la actualidad. Esta condición hace el seguimiento de todas las
actividades, salvo de los elementos siguientes:
v Este umbral no controla las sentencias CALL, pero todas las actividades
hijo anidadas iniciadas dentro de la rutina llamada se someten al control
de este umbral. Los bloques anónimos y las rutinas autónomas se
clasifican como sentencias CALL.
v Este umbral controla las funciones definidas por el usuario, pero las
actividades hijo anidadas en una función definida por el usuario no se
controlan. Si se llama a una rutina autónoma desde dentro de una
función definida, ni la rutina autónoma ni las actividades hijo de la
rutina autónoma están bajo el control del umbral.
v Este umbral no controla las acciones de activador que invocan sentencias
CALL y las actividades hijo de esas sentencias CALL. Las sentencias
INSERT, UPDATE o DELETE que pueden hacer que un activador se
active siguen estando sometidas al control del umbral.
Sentencias 213
ALTER THRESHOLD
Sentencias 215
ALTER THRESHOLD
Sentencias 217
ALTER THRESHOLD
Sentencias 219
ALTER THRESHOLD
Notas
v El valor nuevo para un umbral sólo afecta a las actividades de DB2 que
comienzan a ejecutarse después de que se confirme la operación de
modificación.
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con las versiones anteriores de los productos
DB2 y con otros productos de base de datos. Estas alternativas no son estándar y
no deberían utilizarse.
– Puede especificarse DATABASE PARTITION en lugar de MEMBER, salvo
cuando la variable de registro DB2_ENFORCE_MEMBER_SYNTAX se
establece en ON.
– Puede especificarse DATABASE PARTITIONS en lugar de MEMBERS, salvo
cuando la variable de registro DB2_ENFORCE_MEMBER_SYNTAX se
establece en ON.
– Puede especificarse TOTALDBPARTITIONCONNECTIONS en lugar de
TOTALMEMBERCONNECTIONS, salvo cuando la variable de registro
DB2_ENFORCE_MEMBER_SYNTAX se establece en ON.
– Puede especificarse TOTALSCPARTITIONCONNECTIONS en lugar de
TOTALSCMEMBERCONNECTIONS, salvo cuando la variable de registro
DB2_ENFORCE_MEMBER_SYNTAX se establece en ON.
Ejemplo
Debido a que este es un umbral con una cola, el umbral no puede descartarse a
menos que se inhabilite, del siguiente modo:
Sentencias 221
ALTER THRESHOLD
ALTER TRIGGER
La sentencia ALTER TRIGGER cambia la descripción de un activador del servidor
actual.
Invocación
Autorización
Sintaxis
ALTER TRIGGER nombre-activador SECURED
NOT SECURED
Descripción
nombre-activador
Identifica el activador que se debe alterar. El nombre-activador debe identificar
un activador que exista en el servidor actual (SQLSTATE 42704).
NOT SECURED o SECURED
Especifica si el activador se considera seguro.
SECURED
Especifica que el activador se considera seguro. SECURED debe
especificarse para un activador cuya tabla sujeto sea una tabla en la que el
control de acceso de nivel de fila o de nivel de columna se haya activado
(SQLSTATE 428H8). Asimismo, SECURED debe especificarse para un
activador que se cree en una vista y una o más de las tablas subyacentes
de esa definición de vista tenga el control de acceso de nivel de fila o
columna activado (SQLSTATE 428H8).
NOT SECURED
Especifica que el activador no se considera seguro. No se puede cambiar
un activador de seguro a no seguro si está definido en una tabla para la
cual está activado el control de acceso de nivel de fila o columna
(SQLSTATE 428H8). Asimismo, no se puede cambiar un activador de
seguro a no seguro si se ha definido en una vista y una o más de las tablas
subyacentes de la definición de la vista tienen activado el control de acceso
de nivel de fila o columna (SQLSTATE 428H8).
Ejemplos
v Ejemplo 1: cambiar activador de TRIGGER1 a SECURED.
ALTER TRIGGER TRIGGER1 SECURED
v Ejemplo 2: cambiar activador de TRIGGER1 a NOT SECURED.
ALTER TRIGGER TRIGGER1 NOT SECURED
Sentencias 223
ALTER TRUSTED CONTEXT
Invocación
Autorización
Sintaxis
(1)
ALTER SYSTEM AUTHID nombre-autorización
,
(2)
ATTRIBUTES ( cláusula-dirección )
(3)
ENCRYPTION valor-cifrado
NO DEFAULT ROLE
DEFAULT ROLE nombre-rol
DISABLE
ENABLE
,
(2)
ADD ATTRIBUTES ( cláusula-dirección )
,
(2)
DROP ATTRIBUTES ( ADDRESS valor-dirección )
cláusula-usuario
cláusula-dirección:
ADDRESS valor-dirección
WITH ENCRYPTION valor-cifrado
cláusula-usuario:
,
WITHOUT AUTHENTICATION
ADD USE FOR nombre-autorización
ROLE nombre-rol WITH AUTHENTICATION
PUBLIC
,
WITHOUT AUTHENTICATION
REPLACE USE FOR nombre-autorización
ROLE nombre-rol WITH AUTHENTICATION
PUBLIC
,
Notas:
1 Cada una de las cláusulas ATTRIBUTES, DEFAULT ROLE, ENABLE y WITH
USE puede especificarse una vez como máximo (SQLSTATE 42614).
2 Cada nombre de atributo y su valor correspondiente deben ser exclusivos
(SQLSTATE 4274D).
3 ENCRYPTION no se puede especificar más de una vez (SQLSTATE 42614);
sin embargo, WITH ENCRYPTION puede especificarse para cada una de las
veces que se especifique ADDRESS.
Descripción
nombre-contexto
Identifica el contexto fiable que se va a modificar. Este nombre consta de una
sola parte. Se trata de un identificador de SQL (ordinario o delimitado). El
nombre-contexto debe identificar un contexto fiable que exista en el servidor
actual (SQLSTATE 42704).
ALTER
Modifica las opciones y atributos de un contexto fiable.
SYSTEM AUTHID nombre-autorización
Especifica que el contexto es una conexión establecida por medio del ID de
autorización del sistema nombre-autorización, que no debe asociarse con un
contexto fiable existente (SQLSTATE 428GL). No puede ser el ID de
autorización de la sentencia (SQLSTATE 42502).
ATTRIBUTES (...)
Especifica una lista de uno o más atributos de confianza de conexión, sobre
la que se define el contexto fiable, que van a modificarse. Los valores
existentes para los atributos especificados se sustituyen por los valores
nuevos. Si un atributo no forma parte actualmente de la definición de
contexto fiable, se devuelve un error (SQLSTATE 4274C). Los atributos que
no se especifiquen retendrán sus valores anteriores.
ADDRESS valor-dirección
Especifica la dirección de comunicación real que utiliza el cliente para
comunicar con el servidor de bases de datos. El único protocolo
soportado es TCP/IP. Se eliminarán los valores anteriores ADDRESS
para el contexto fiable especificado. El atributo ADDRESS puede
especificarse varias veces, pero cada par valor-dirección debe ser
exclusivo para el conjunto de atributos (SQLSTATE 4274D).
Al establecer una conexión fiable, si se definen varios valores para el
atributo ADDRESS de un contexto fiable, se toma en consideración una
conexión candidata para que coincida con este atributo si la dirección
que utiliza la conexión coincide con cualquiera de los valores definidos
para el atributo ADDRESS del contexto fiable.
valor-dirección
Especifica una constante de serie que contiene el valor que ha de
asociarse al atributo fiable ADDRESS. El valor-dirección debe ser
una dirección IPv4, una dirección IPv6 o un nombre de dominio
seguro.
v Una dirección IPv4 no debe contener espacios iniciales y está
representada como dirección decimal con puntos. Un ejemplo de
una dirección IPv4 es 9.112.46.111. El valor 'localhost' o su
Sentencias 225
ALTER TRUSTED CONTEXT
Sentencias 227
ALTER TRUSTED CONTEXT
DROP ATTRIBUTES
Especifica que se van a descartar uno o más atributos de la definición del
contexto fiable. Si el atributo y el par de valores de atributo no forman parte
actualmente de la definición de contexto fiable, se devuelve un error
(SQLSTATE 4274C).
ADDRESS valor-dirección
Especifica que se va a eliminar de la definición del contexto fiable la
dirección de comunicaciones identificada. El valor-dirección especifica una
constante de serie que contiene el valor de un atributo fiable de ADDRESS
existente.
ADD USE FOR
Especifica usuarios adicionales que pueden utilizar una conexión fiable basada
en este contexto fiable. Si la definición de un contexto fiable permite el acceso
por parte de PUBLIC y una lista de usuarios, las especificaciones para un
usuario alterarán temporalmente las especificaciones para PUBLIC.
nombre-autorización
Especifica que la conexión fiable puede utilizarse por medio del
nombre-autorización especificado. El nombre-autorización no debe identificar
un ID de autorización que ya esté definido para la utilización del contexto
fiable y no debe especificarse más de una vez en la cláusula ADD USE
FOR (SQLSTATE 428GM). Tampoco debe ser el ID de autorización de la
sentencia (SQLSTATE 42502).
ROLE nombre-rol
Especifica que nombre-rol es el rol que ha de utilizarse para el usuario.
El nombre-rol debe identificar un rol que exista en el servidor actual
(SQLSTATE 42704). El rol explícitamente especificado para el usuario
altera temporalmente los roles por omisión asociados con el contexto
fiable.
PUBLIC
Especifica que cualquier usuario puede utilizar una conexión fiable basada
en este contexto fiable. PUBLIC no debe estar previamente definido para la
utilización del contexto fiable y no debe especificarse más de una vez en la
cláusula ADD USE FOR (SQLSTATE 428GM).
WITHOUT AUTHENTICATION o WITH AUTHENTICATION
Especifica si conmutar el usuario actual en una conexión fiable basada en
este contexto fiable requiere autentificación o no.
WITHOUT AUTHENTICATION
Especifica que conmutar el usuario actual en una conexión fiable
basada en este contexto fiable para este usuario no requiere
autentificación.
WITH AUTHENTICATION
Especifica que conmutar el usuario actual en una conexión fiable
basada en este contexto fiable para este usuario requiere
autentificación.
REPLACE USE FOR
Especifica la forma en la que va a cambiar un usuario concreto o PUBLIC
utiliza el contexto fiable.
nombre-autorización
Especifica el nombre-autorización del usuario cuya utilización de la conexión
fiable va a cambiarse. El contexto fiable debe estar ya definido para que lo
utilice el nombre-autorización (SQLSTATE 428GN) y el nombre-autorización no
Sentencias 229
ALTER TRUSTED CONTEXT
Normas
v Una sentencia de SQL exclusiva del contexto fiable debe ir después de una
sentencia COMMIT o ROLLBACK (SQLSTATE 5U021). Las sentencias de SQL
exclusivas del contexto fiable son:
– CREATE TRUSTED CONTEXT, ALTER TRUSTED CONTEXT o DROP
(TRUSTED CONTEXT)
v Una sentencia de SQL exclusiva del contexto fiable no puede emitirse en una
transacción global; por ejemplo, una transacción XA o una transacción global
que se inicie como parte de una confirmación en dos fases para las transacciones
federadas (SQLSTATE 51041).
Notas
v Al proporcionar una dirección IP como parte de una definición de contexto
fiable, la dirección debe estar en el formato que esté vigente para la red. Por
ejemplo, proporcionar una dirección en un formato IPv6 cuando la red sea IPv4
no dará como resultado una coincidencia. En un entorno mixto, resulta ventajoso
especificar las representaciones IPv4 e IPv6 de la dirección, o mejor aún,
especificar un nombre de dominio seguro (por ejemplo, corona.torolab.ibm.com),
que oculta los detalles de formato de dirección.
v Sólo se permite una sentencia de SQL exclusiva del contexto fiable sin confirmar
a la vez entre todas las particiones de la base de datos. Si se ejecuta una
sentencia de SQL exclusiva del contexto fiable sin confirmar, las siguientes
sentencias de SQL exclusivas del contexto fiable esperarán hasta que se confirme
o retrotraiga la sentencia de SQL exclusiva del contexto fiable actual.
v Los cambios se graban en el catálogo del sistema pero no surten efecto hasta que
se confirmen, incluso para la conexión que emite la sentencia.
v Orden de operaciones: El orden de las operaciones en una sentencia ALTER
TRUSTED CONTEXT es:
– DROP
– ALTER
– ADD ATTRIBUTES
– ADD USE FOR
– REPLACE USE FOR
v Efecto de los cambios sobre las conexiones fiables existentes: Si existen
conexiones fiables para el contexto fiable que están modificándose, las
conexiones seguirán siendo fiables con la definición que estaba vigente antes de
la sentencia ALTER TRUSTED CONTEXT hasta que termine la siguiente
conexión o petición de conmutación de usuario. Si se inhabilita el contexto fiable
mientras están activas las conexiones fiables para este contexto, las conexiones
seguirán siendo fiables >hasta que termine la siguiente conexión o petición de
usuario de conmutador. Si se cambian los atributos fiables con la sentencia
ALTER TRUSTED CONTEXT, se permite que continúen las conexiones fiables
que existan mientras la sentencia ALTER TRUSTED CONTEXT utiliza el
contexto fiable.
v Privilegios de rol: Si no hay ningún rol asociado al usuario o al contexto fiable,
sólo son de aplicación los privilegios asociados con el usuario. Es igual que no
estar en un contexto fiable.
Ejemplos
v Ejemplo 1: Suponga que existe el contexto fiable APPSERVER y que está
habilitado. Emita una sentencia ALTER TRUSTED CONTEXT para permitir a Bill
utilizar el contexto fiable APPSERVER, pero coloque el contexto fiable en estado
de inhabilitado.
ALTER TRUSTED CONTEXT APPSERVER
DISABLE
ADD USE FOR BILL
v Ejemplo 2: Suponga que existe el contexto fiable SECUREROLE. Emita una
sentencia ALTER TRUSTED CONTEXT para modificar el usuario existente Joe
Sentencias 231
ALTER TRUSTED CONTEXT
para que utilice el contexto fiable con la autentificación y para añadir a todos los
demás para que utilicen el contexto fiable sin autentificación.
ALTER TRUSTED CONTEXT SECUREROLE
REPLACE USE FOR JOE WITH AUTHENTICATION
ADD USE FOR PUBLIC WITHOUT AUTHENTICATION
v Ejemplo 3: Suponga que hay un contexto fiable SECUREROLEENCRYPT con los
valores de atributo ADDRESS '9.13.55.100' y '9.12.30.112' y un valor de atributo
de ENCRYPTION 'NONE'. Emita una sentencia ALTER para modificar los
valores de atributo ADDRESS y el atributo de cifrado a 'LOW'.
ALTER TRUSTED CONTEXT SECUREROLEENCRYPT
ALTER ATTRIBUTES (ADDRESS ’9.12.155.200’,
ENCRYPTION ’LOW’)
Invocación
Autorización
Para modificar un método con el fin de que no esté delimitado, los privilegios del
ID de autorización de la sentencia también deben incluir, como mínimo, una de las
autorizaciones siguientes:
v Autorización CREATE_NOT_FENCED_ROUTINE para la base de datos
v Autorización DBADM
Sintaxis
ALTER TYPE nombre-tipo
identificador-método:
Sentencias 233
ALTER TYPE (estructurado)
METHOD nombre-método
( )
,
( tipo-datos )
SPECIFIC METHOD nombre-específico
opciones-método:
FENCED
NOT FENCED
THREADSAFE
NOT THREADSAFE
Descripción
nombre-tipo
Identifica el tipo estructurado a cambiar. Debe ser un tipo existente definido en
el catálogo (SQLSTATE 42704) y el tipo debe ser un tipo estructurado
(SQLSTATE 428DP). En las sentencias de SQL dinámico, el registro especial
CURRENT SCHEMA se utiliza como calificador para un nombre de objeto no
calificado. En las sentencias de SQL estático, la opción de precompilación/
enlace QUALIFIER especifica implícitamente el calificador para los nombres de
objeto no calificados.
ADD ATTRIBUTE
Añade un atributo después del último atributo del tipo estructurado existente.
definición-atributo
Define los atributos del tipo estructurado.
nombre-atributo
Especifica un nombre para el atributo. El nombre no puede ser el
mismo que el de otro atributo de este tipo estructurado (incluidos los
atributos heredados) ni de ningún subtipo de este tipo estructurado
(SQLSTATE 42711).
Algunos nombres utilizados como palabras clave en predicados están
reservados para su uso por el sistema, y no pueden utilizarse como
nombre-atributo (SQLSTATE 42939). Estos nombres son SOME, ANY,
ALL, NOT, AND, OR, BETWEEN, NULL, LIKE, EXISTS, IN, UNIQUE,
OVERLAPS, SIMILAR, MATCH y los operadores de comparación.
tipo-datos 1
Especifica el tipo de datos del atributo. Es uno de los tipos de datos
que se listan en CREATE TABLE, que no sean XML (SQLSTATE 42601).
El tipo de datos debe identificar un tipo de datos existente (SQLSTATE
42704). Si tipo-datos está especificado sin un nombre de esquema, el
tipo se resuelve realizando una búsqueda en los esquemas de la vía de
acceso de SQL. Encontrará la descripción de diversos tipos de datos en
“CREATE TABLE”. Si el tipo de datos del atributo es un tipo de
referencia, el tipo de destino de la referencia debe ser un tipo
estructurado que exista (SQLSTATE 42704).
Para evitar las definiciones de tipo que, durante la ejecución, pueden
permitir que una instancia del tipo contengan, directa o indirectamente,
otra instancia del mismo tipo o uno de sus subtipos, existe una
Sentencias 235
ALTER TYPE (estructurado)
PRECAUCIÓN:
El uso de métodos NOT FENCED que no se han codificado, revisado ni
probado adecuadamente puede comprometer la integridad de una base
de datos DB2. Las bases de datos DB2 toman algunas precauciones ante
varios de los tipos comunes de anomalías inadvertidas que puedan
producirse, pero no pueden garantizar la integridad completa si se
utilizan métodos NOT FENCED.
Normas
v La adición o el descarte de un atributo no está permitido para el tipo nombre-tipo
(SQLSTATE 55043) si:
– El tipo o uno de sus subtipos es el tipo de una tabla o vista existente.
– Existe una columna de una tabla cuyo tipo utiliza directa o indirectamente el
nombre-tipo. Los términos utiliza directamente y utiliza indirectamente se definen
en “Tipos estructurados”.
– El tipo o uno de sus subtipos se utiliza en una extensión de índice.
v Un tipo no puede modificarse añadiendo atributos de tal modo que el número
total de atributos para el tipo, o cualquiera de sus subtipos, sea superior a 4082
(SQLSTATE 54050).
v Opción ADD ATTRIBUTE:
– ADD ATTRIBUTE genera métodos de observador y mutador para el nuevo
atributo. Estos métodos son similares a los que se generan durante la creación
de un tipo estructurado (véase “CREATE TYPE (Estructurado)”). Si estos
Sentencias 237
ALTER TYPE (estructurado)
Notas
v No es posible modificar un método que esté en el esquema SYSIBM, SYSFUN o
SYSPROC (SQLSTATE 42832).
v Cuando se altera un tipo, mediante la adición o el descarte de un atributo, se
invalidan todos los paquetes que dependen de funciones o métodos que utilizan
este tipo o un subtipo de él como parámetro o resultado.
v Cuando un atributo se añade a un tipo estructurado o se descarta de él:
– Si el valor INLINE LENGTH del tipo fue calculado por el sistema cuando se
creó el tipo, los valores INLINE LENGTH se modifican automáticamente para
el tipo alterado, y para todos sus subtipos, para reflejar el cambio. Los valores
INLINE LENGTH también se modifican automáticamente (de manera
recursiva) para todos los tipos estructurados cuando INLINE LENGTH fue
calculado por el sistema y el tipo incluye un atributo de cualquier tipo con un
valor INLINE LENGTH cambiado.
– Si el usuario especificó explícitamente el valor INLINE LENGTH de un tipo
cualquiera que se alteró mediante la adición o el descarte de atributos,
entonces el valor INLINE LENGTH de ese tipo determinado no se modifica.
Debe tenerse especial cuidado en el caso de valores INLINE LENGTH
especificados explícitamente. Si es probable que más tarde se añadan atributos
a un tipo, el valor de INLINE LENGTH, para cualquier uso de ese tipo o de
uno de sus subtipos en una definición de columna, debe ser lo suficiente
grande para tener en cuenta el posible aumento de longitud del objeto del
que se creado una instancia.
– Si deben habilitarse nuevos atributos para ser utilizados por programas de
aplicación, se deben modificar las funciones de transformación existentes para
que coincidan con la nueva estructura del tipo de datos.
v En un entorno de base de datos particionada, el uso de SQL en funciones o
métodos externos definidos por el usuario no recibe soporte (SQLSTATE 42997).
v Privilegios: el privilegio EXECUTE no se otorgará para ninguno de los métodos
explícitamente especificados en la sentencia ALTER TYPE hasta que se haya
definido un cuerpo de método mediante la utilización de la sentencia CREATE
METHOD. El propietario del tipo definido por el usuario tiene la capacidad de
descartar la especificación del método utilizando una sentencia ALTER TYPE.
Ejemplos
v Ejemplo 1: La sentencia ALTER TYPE puede utilizarse para permitir un ciclo de
tablas y tipos que se hacen referencia mutuamente. Piense en las tablas
denominadas EMPLOYEE y DEPARTMENT que se hacen referencia
mutuamente.
La secuencia siguiente permitiría crear los tipos y las tablas.
CREATE TYPE DEPT ...
CREATE TYPE EMP ... (incluido el atributo denominado DEPTREF del tipo REF(DEPT))
ALTER TYPE DEPT ADD ATTRIBUTE MANAGER REF(EMP)
CREATE TABLE DEPARTMENT OF DEPT ...
CREATE TABLE EMPLOYEE OF EMP (DEPTREF WITH OPTIONS SCOPE DEPARTMENT)
ALTER TABLE DEPARTMENT ALTER COLUMN MANAGER ADD SCOPE EMPLOYEE
La secuencia siguiente permitiría descartar estas tablas y tipos.
DROP TABLE EMPLOYEE (la columna MANAGER de DEPARTMENT se queda sin ámbito)
DROP TABLE DEPARTMENT
ALTER TYPE DEPT DROP ATTRIBUTE MANAGER
DROP TYPE EMP
DROP TYPE DEPT
v Ejemplo 2: La sentencia ALTER TYPE puede utilizarse para crear un tipo con un
atributo que haga referencia a un subtipo.
CREATE TYPE EMP ...
CREATE TYPE MGR UNDER EMP ...
ALTER TYPE EMP ADD ATTRIBUTE MANAGER REF(MGR)
v Ejemplo 3: La sentencia ALTER TYPE puede utilizarse para añadir un atributo.
La sentencia siguiente añade el atributo SPECIAL al tipo EMP. Puesto que la
longitud en línea no se ha especificado en la sentencia CREATE TYPE original,
la base de datos DB2 calcula de nuevo la longitud en línea añadiendo 13 (10
bytes para el atributo nuevo + longitud del atributo + 2 bytes para un atributo
que no es LOB).
ALTER TYPE EMP ...
ADD ATTRIBUTE SPECIAL CHAR(1)
v Ejemplo 4: La sentencia ALTER TYPE puede utilizarse para añadir un método
asociado a un tipo. La sentencia siguiente añade un método llamado BONUS.
ALTER TYPE EMP ...
ADD METHOD BONUS (RATE DOUBLE)
RETURNS INTEGER
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
Observe que para utilizar el método BONUS es necesario emitir una sentencia
CREATE METHOD para crear el cuerpo del método. Si se da por supuesto que
el tipo EMP incluye un atributo denominado SALARY, el siguiente ejemplo
muestra una definición de cuerpo de método.
CREATE METHOD BONUS(RATE DOUBLE) FOR EMP
RETURN CAST(SELF.SALARY * RATE AS INTEGER)
Sentencias 239
ALTER USAGE LIST
Invocación
Autorización
Sintaxis
ALTER USAGE LIST nombre-lista-uso
(1)
LIST SIZE valor-entero
WHEN FULL WRAP
DEACTIVATE
INACTIVE ON START DATABASE
ACTIVE ON START DATABASE
Notas:
1 No se debe especificar la misma cláusula más de una vez.
Descripción
nombre-lista-uso
Identifica la lista de uso que se debe alterar. El nombre-lista-uso debe identificar
una lista de uso que exista en el servidor actual (SQLSTATE 42704).
LIST SIZE valor-entero
Especifica que el tamaño de esta lista son valor-entero entradas. El tamaño
mínimo que se puede especificar es de 10 y el máximo de 5000 (SQLSTATE
428B7).
WHEN FULL
Especifica la acción que ha de realizarse cuando una lista de uso activa se
llena.
WRAP
Especifica que la lista de uso se ajusta y sustituye las entradas mas
antiguas.
DEACTIVATE
Especifica que la lista de uso se desactiva.
INACTIVE ON START DATABASE
Especifica que la lista de uso no está activada para la supervisión siempre que
Notas
v Cuando los cambios entran en vigor: si el estado actual de una lista de uso es
activo, las modificaciones no entrarán en vigor cuando se procese la sentencia ni
cuando se confirmen los cambios. Los cambios en la lista de uso entrarán en
vigor la siguiente vez que el estado de la lista de uso se establezca en activo. En
un entorno de base de datos particionada o en un entorno DB2 pureScale, las
alteraciones entrarán en vigor la siguiente vez que la lista de uso se active en un
miembro.
Sentencias 241
ALTER USER MAPPING
Invocación
Autorización
Sintaxis
ALTER USER MAPPING FOR nombre-autorización SERVER nombre-servidor
USER
PUBLIC
,
ADD
OPTIONS ( nombre-opción-usuario constante-serie )
SET
DROP nombre-opción-usuario
Descripción
nombre-autorización
Especifica el nombre de autorización bajo el cual un usuario o una aplicación
se conecta a una base de datos federada.
USER
El valor del registro especial USER. Cuando se especifica USER, el ID de
autorización de la sentencia ALTER USER MAPPING se correlacionará con el
ID de autorización de la fuente de datos que se ha especificado en la opción de
usuario REMOTE_AUTHID.
PUBLIC
Especifica que cualquier ID de autorización válido de la base de datos federada
local se correlacione con el ID de autorización de la fuente de datos
especificado en la opción de usuario REMOTE_AUTHID.
SERVER nombre-servidor
Identifica la fuente de datos que se puede acceder bajo el ID de autorización
Notas
v Una opción de usuario no se puede especificar más de una vez en la misma
sentencia ALTER USER MAPPING (SQLSTATE 42853). Cuando se habilita,
restaura o descarta una opción de usuario, no afecta a ninguna otra opción de
usuario que se esté utilizando.
v Una sentencia ALTER USER MAPPING de una unidad de trabajo (UOW)
determinada no puede procesarse (SQLSTATE 55007) si la UOW ya incluye uno
de los elementos siguientes:
– Una sentencia SELECT que hace referencia a un apodo para una tabla o una
vista de la fuente de datos que se debe incluir en la correlación
– Un cursor abierto en un apodo para una tabla o una vista de la fuente de
datos que se debe incluir en la correlación
– Una sentencia INSERT, DELETE o UPDATE emitida para un apodo de una
tabla o una vista de la fuente de datos que se debe incluir en la correlación.
v No pueden coexistir en el mismo servidor federado correlaciones de usuarios
públicos y correlaciones de usuarios no públicos. Esto significa que, si ha creado
correlaciones de usuarios públicos, no podrá crear correlaciones de usuarios no
públicos en el mismo servidor federado. Asimismo, si ha creado correlaciones de
usuarios no públicos, no podrá crear correlaciones de usuarios públicos en el
mismo servidor federado.
Ejemplos
v Ejemplo 1: Jim utiliza una base de datos local para conectarse a una fuente de
datos Oracle llamada ORACLE1. Accede a la fuente de datos local bajo el ID de
autorización KLEEWEIN; KLEEWEIN se correlaciona con CORONA, el ID de
autorización bajo el cual accede a ORACLE1. Jim va a iniciar el acceso a
ORACLE1 bajo un nuevo ID, JIMK. De modo que ahora es necesario
correlacionar KLEEWEIN con JIMK.
ALTER USER MAPPING FOR KLEEWEIN
SERVER ORACLE1
OPTIONS ( SET REMOTE_AUTHID ’JIMK’ )
v Ejemplo 2: Mary utiliza una base de datos federada para conectarse a una fuente
de datos DB2 para z/OS llamada DORADO. Utiliza un ID de autorización para
acceder a DB2 y otro para acceder a DORADO y ha creado una correlación entre
Sentencias 243
ALTER USER MAPPING
los dos ID. Ha utilizado la misma contraseña con ambos ID, pero ahora decide
utilizar una contraseña diferente, ZNYQ, con el ID para DORADO. De acuerdo a
ello, necesita correlacionar la contraseña de base de datos federada con ZNYQ.
ALTER USER MAPPING FOR MARY
SERVER DORADO
OPTIONS ( ADD REMOTE_PASSWORD ’ZNYQ’ )
ALTER VIEW
La sentencia ALTER VIEW modifica una vista existente alterando una columna de
tipo de referencia para añadir un ámbito. La sentencia ALTER VIEW también
habilita o inhabilita una vista para su utilización en la optimización de la consulta.
Invocación
Autorización
Sintaxis
COLUMN
ALTER nombre-columna ADD SCOPE nombre-tabla-tipo
nombre-vista-tipo
ENABLE QUERY OPTIMIZATION
DISABLE
Descripción
nombre-vista
Especifica la vista que debe cambiarse. Debe ser una vista que esté descrita en
el catálogo.
ALTER COLUMN nombre-columna
Especifica el nombre de la columna que se debe modificar. El nombre-columna
debe identificar una columna existente de la vista (SQLSTATE 42703). El
nombre no puede estar calificado.
ADD SCOPE
Añade un ámbito a una columna de tipo de referencia existente que no tenga
Sentencias 245
ALTER VIEW
Normas
v Una vista no puede habilitarse para la optimización de una consulta si:
– La vista hace referencia directa o indirectamente a una tabla de consulta
materializada (MQT). Tenga en cuenta que una MQT o una vista de
estadísticas puede establecer una referencia a una vista de estadísticas.
– Es una vista con tipo
Notas
v Para que puede considerarse para la optimización de una consulta, una vista:
– No puede contener una operación diferenciada ni de agregación
– No puede contener una operación de unión, excepción o intersección
– No puede contener una especificación OLAP
v Si una vista se modifica para inhabilitar la optimización de consultas, los planes
de consultas en antememoria que utilizaban la vista para la optimización de
consultas se invalidarán. Si una vista se modifica para habilitar la optimización
de consultas, los planes de consulta en antememoria se invalidarán si hacen
referencia a las mismas tablas que las nuevas referencias de vista habilitadas, ya
sea directa o indirectamente a través de otras vistas. La invalidación de estos
planes de consulta en antememoria da lugar a una revalidación implícita que
tiene en cuenta la propiedad de optimización de consulta modificada de la vista.
La propiedad de optimización de consulta para una vista no tiene impacto
alguno en las sentencias de SQL integradas estáticas.
Invocación
Autorización
Sintaxis
ALTER WORK ACTION SET nombre-conjunto-acciones-trabajo
(1)
ADD definición-acción-trabajo
ALTER alteración-acción-trabajo
WORK ACTION
DROP nombre-acción-trabajo
(2)
ENABLE
DISABLE
definición-acción-trabajo:
WORK ACTION
nombre-acción-trabajo ON WORK CLASS nombre-clase-trabajo
ENABLE
cláusula-tipos-acción cláusula-plantilla-histograma
DISABLE
cláusula-tipos-acción:
Sentencias 247
ALTER WORK ACTION SET
WITH NESTED
MAP ACTIVITY TO nombre-subclase-servicio
WITHOUT NESTED
WHEN cláusula-predicado-umbral acciones-superaron-umbral
PREVENT EXECUTION
COUNT ACTIVITY
COLLECT ACTIVITY DATA cláusula-recopilar-datos-actividad
BASE
COLLECT AGGREGATE ACTIVITY DATA
EXTENDED
cláusula-predicado-umbral:
(3)
CONCURRENTDBCOORDACTIVITIES > entero
AND QUEUEDACTIVITIES > entero
AND QUEUEDACTIVITIES UNBOUNDED
SQLTEMPSPACE > entero K
M
G
SQLROWSRETURNED > entero
ESTIMATEDSQLCOST > bigint
CPUTIME > valor-entero HOUR
HOURS CHECKING EVERY valor-entero SECOND
MINUTE SECONDS
MINUTES
SQLROWSREAD > valor-bigint
CHECKING EVERY valor-entero SECOND
SECONDS
ACTIVITYTOTALTIME > entero DAY
DAYS
HOUR
HOURS
MINUTE
MINUTES
SECONDS
acciones-superaron-umbral:
STOP EXECUTION
CONTINUE
cláusula-recopilar-datos-actividad:
MEMBER
ON COORDINATOR
MEMBERS
ON ALL
WITHOUT DETAILS
,
(4)
WITH DETAILS
SECTION AND VALUES
(5)
INCLUDE ACTUALS BASE
cláusula-plantilla-histograma:
alteración-acción-trabajo:
WORK ACTION
nombre-acción-trabajo
(6)
SET WORK CLASS nombre-clase-trabajo
cláusula-modificación-tipos-acción
? ACTIVITY LIFETIME HISTOGRAM TEMPLATE nombre-plantilla ?
? ACTIVITY QUEUETIME HISTOGRAM TEMPLATE nombre-plantilla ?
? ACTIVITY EXECUTETIME HISTOGRAM TEMPLATE nombre-plantilla ?
? ACTIVITY ESTIMATEDCOST HISTOGRAM TEMPLATE nombre-plantilla ?
? ACTIVITY INTERARRIVALTIME HISTOGRAM TEMPLATE nombre-plantilla ?
ENABLE
DISABLE
cláusula-modificación-tipos-acción:
WITH NESTED
MAP ACTIVITY TO nombre-subclase-servicio
WITHOUT NESTED
WHEN cláusula-predicado-umbral PERFORM ACTION
acciones-modificar-umbral-superado
EXCEEDED modificar-acciones-umbral-superado
PREVENT EXECUTION
COUNT ACTIVITY
COLLECT ACTIVITY DATA modificar-cláusula-recopilar-datos-actividad
BASE
COLLECT AGGREGATE ACTIVITY DATA
EXTENDED
Sentencias 249
ALTER WORK ACTION SET
acciones-modificar-umbral-superado:
(7) (8)
COLLECT ACTIVITY DATA modificar-cláusula-recopilar-datos-actividad
NONE
STOP EXECUTION
CONTINUE
modificar-cláusula-recopilar-datos-actividad:
MEMBER
ON COORDINATOR
MEMBERS
ON ALL
WITHOUT DETAILS
,
(9)
WITH DETAILS
SECTION AND VALUES
INCLUDE ACTUALS BASE
Notas:
1 Las cláusulas ADD, ALTER y DROP se procesan en el orden en que se
especifican.
2 La cláusula ENABLE o DISABLE sólo puede especificarse una vez en la
misma sentencia.
3 Sólo puede aplicarse una acción de trabajo del mismo tipo de umbral a una
única clase de trabajo a la vez. Cuando se modifica una acción de trabajo de
umbral, no se puede cambiar el predicado de umbral.
4 La palabra clave DETAILS es la información mínima que debe especificarse,
seguida de la opción separada por una coma.
5 Esta cláusula no se aplica a los umbrales.
6 Una misma cláusula no se debe especificar más de una vez.
7 Una misma cláusula no se debe especificar más de una vez.
8 Si una acción de trabajo existente no tiene una acción de umbral superado
definida y se va a modificar para que pase a ser una acción de trabajo de
umbral, debe especificarse STOP EXECUTION o CONTINUE, y si no se
especifica COLLECT ACTIVITY DATA, COLLECT ACTIVITY DATA NONE
es el valor por omisión.
9 La palabra clave DETAILS es la información mínima que debe especificarse,
seguida de la opción separada por una coma.
Descripción
nombre-conjunto-acciones-trabajo
Identifica el conjunto de acciones de trabajo que se va a modificar. Este nombre
consta de una sola parte. Se trata de un identificador de SQL (ordinario o
delimitado). El nombre-conjunto-acciones-trabajo debe identificar un conjunto de
acciones de trabajo que exista en el servidor actual (SQLSTATE 42704).
ADD
Añade una acción de trabajo al conjunto de acciones de trabajo.
WORK ACTION nombre-acción-trabajo
Da nombre a la acción de trabajo. El nombre-acción-trabajo no debe
identificar una acción de trabajo que ya exista en el servidor actual en este
conjunto de acciones de trabajo (SQLSTATE 42710). El nombre-acción-trabajo
no puede comenzar por 'SYS' (SQLSTATE 42939).
ON WORK CLASS nombre-clase-trabajo
Especifica la clase de trabajo que identifica las actividades de base de
trabajo a las que se aplicará esta acción de trabajo. El nombre-clase-trabajo
debe existir en el nombre-conjunto-clases-trabajo en el servidor actual
(SQLSTATE 42704).
MAP ACTIVITY
Especifica una acción de trabajo de correlación de la actividad. Esta acción
sólo puede especificarse si el objeto para el que se ha definido este
conjunto de acciones de trabajo está definido como una superclase de
servicio (SQLSTATE 5U034).
WITH NESTED o WITHOUT NESTED
Especifica si las actividades anidadas bajo esta actividad se van a
correlacionar o no a la subclase de servicio. El valor por omisión es
WITH NESTED.
WITH NESTED
Todas las actividades de base de datos que tengan un nivel de
anidamiento de cero que estén clasificadas bajo la clase de trabajo
y todas las actividades de base de datos anidadas bajo esta
actividad, se correlacionarán a la subclase de servicio; es decir, las
actividades con un nivel de anidamiento superior a cero se
ejecutarán en la misma clase de servicio que las actividades con un
nivel de anidamiento de cero.
WITHOUT NESTED
Sólo las actividades que tengan un nivel de anidamiento de cero
que estén clasificadas bajo la clase de trabajo se correlacionarán con
la subclase de servicio. Las actividades anidadas bajo esta actividad
se manejarán con arreglo a su tipo de actividad.
TO nombre-subclase-servicio
Especifica la subclase de servicio a la que están correlacionadas las
actividades. El nombre-subclase-servicio debe existir en el
nombre-superclase-servicio en el servidor actual (SQLSTATE 42704). El
nombre-subclase-servicio no puede ser la subclase de servicio por
omisión, SYSDEFAULTSUBCLASS (SQLSTATE 5U018).
WHEN
Especifica el umbral que se aplicará a la actividad de base de datos
asociada a la clase de trabajo para la que se define esta acción de trabajo.
Un umbral sólo puede especificarse si el objeto de gestor de base de datos
para el que se ha definido esta acción de trabajo está definido como base
de datos (SQLSTATE 5U034). Ninguno de estos umbrales se aplican a las
actividades de base de datos internas iniciadas por medio del gestor de
base de datos o a las actividades de base de datos generadas por medio de
rutinas de SQL administrativas.
Sentencias 251
ALTER WORK ACTION SET
cláusula-predicado-umbral
Para obtener una descripción de los tipos de umbral válidos, consulte
la sentencia “CREATE THRESHOLD”.
acciones-superaron-umbral
Para obtener una descripción de las acciones que superaron el umbral
válidas, consulte la sentencia “CREATE THRESHOLD”.
PREVENT EXECUTION
Especifica que no se permitirá la ejecución de ninguna de las actividades
de base de datos asociada a la clase de trabajo para la que se ha definido
esta acción de trabajo (SQLSTATE 5U033).
COUNT ACTIVITY
Especifica que se ejecuten todas las actividades de base de datos asociadas
a la clase de trabajo y que cada vez que se ejecute una de ellas, aumente el
contador para la clase de trabajo.
COLLECT ACTIVITY DATA
Especifica que los datos sobre cada actividad asociada a la clase de trabajo
para la que esta acción de trabajo está definida, deben enviarse a cualquier
supervisor de sucesos de actividades activas cuando se completa la
actividad.
cláusula-recopilar-datos-actividad
ON COORDINATOR MEMBER
Especifica que los datos de actividad se deben recopilar en el
miembro coordinador de la actividad.
ON ALL MEMBERS
Especifica que los datos de actividad van a recopilarse en todos los
miembros en los que se procesa la actividad. Para umbrales de
predicción, la información sobre actividades sólo se recopila en
todos los miembros si también se especifica la acción CONTINUE
para umbrales excedidos. Para umbrales de reacción, la cláusula
ON ALL MEMBERS no tiene efecto y la información sobre
actividades siempre se recopila únicamente en el miembro
coordinador. Para umbrales de predicción y de reacción, los valores
de datos de entrada, la información de sección o los valores de
actividades únicamente se recopilarán en el miembro coordinador.
WITHOUT DETAILS
Especifica que los datos sobre cada actividad asociada a la clase de
trabajo para la que esta acción de trabajo está definida deben
enviarse a cualquier supervisor de sucesos de actividades activas,
cuando la actividad finaliza su ejecución. Los detalles sobre la
sentencia, el entorno de compilación y los datos del entorno de
sección no se envían.
WITH
DETAILS
Especifica que la sentencia y los datos del entorno de
compilación deben enviarse a cualquier supervisor de sucesos
de actividades activas para aquellas actividades que las tienen.
Los datos del entorno de sección no se envían.
SECTION
Especifica que la sentencia, los datos del entorno de
compilación y los del entorno de sección deben enviarse a
Sentencias 253
ALTER WORK ACTION SET
Sentencias 255
ALTER WORK ACTION SET
Sentencias 257
ALTER WORK ACTION SET
Sentencias 259
ALTER WORK ACTION SET
ENABLE
Especifica que la acción de trabajo está habilitada y va a tomarse en
consideración cuando se sometan actividades de base de datos.
DISABLE
Especifica que la acción de trabajo está inhabilitada y no va a tomarse
en consideración cuando se sometan actividades de base de datos.
DROP nombre-acción-trabajo
Descarta una acción de trabajo del conjunto de acciones de trabajo. El
nombre-acción-trabajo debe identificar una acción de trabajo que exista en el
servidor actual en este conjunto de acciones de trabajo (SQLSTATE 42704).
Un umbral creado como parte de un conjunto de acciones de trabajo no se
puede manipular directamente. Debe inhabilitar en primer lugar la acción de
trabajo para inhabilitar el umbral. A continuación, puede descartar la acción de
trabajo una vez que el umbral no se utilice. Para obtener más información,
consulte la sección sobre cómo descartar una acción de trabajo en la
publicación Guía y consulta de DB2 Workload Management.
ENABLE o DISABLE
Especifica si el conjunto de acciones de trabajo va a tomarse en consideración o
no cuando se sometan actividades de base de datos.
ENABLE
Especifica que el conjunto de acciones de trabajo está habilitado y va a
tomarse en consideración cuando se sometan actividades de base de datos.
DISABLE
Especifica que el conjunto de acciones de trabajo está inhabilitado y no va
a tomarse en consideración cuando se sometan actividades de base de
datos.
Normas
v Una sentencia de SQL exclusiva de gestión de carga de trabajo (WLM) debe ir
después de una sentencia COMMIT o ROLLBACK (SQLSTATE 5U021). Las
sentencias de SQL exclusivas de WLM son:
– CREATE HISTOGRAM TEMPLATE, ALTER HISTOGRAM TEMPLATE o
DROP (plantilla de histograma)
– CREATE SERVICE CLASS, ALTER SERVICE CLASS o DROP (clase de
servicio)
– CREATE THRESHOLD, ALTER THRESHOLD o DROP (umbral)
– CREATE WORK ACTION SET, ALTER WORK ACTION SET o DROP
(conjunto de acciones de trabajo)
– CREATE WORK CLASS SET, ALTER WORK CLASS SET o DROP (conjunto
de clases de trabajo)
– CREATE WORKLOAD, ALTER WORKLOAD o DROP (carga de trabajo)
– GRANT (privilegios de carga de trabajo) o REVOKE (privilegios de carga de
trabajo)
v Una sentencia de SQL exclusiva de WLM no puede emitirse en una transacción
global (SQLSTATE 51041) como por ejemplo, una transacción XA.
Notas
v Los cambios se graban en el catálogo del sistema, pero no surten efecto hasta
que se confirmen, incluso para la conexión que emite la sentencia.
Ejemplos
v Ejemplo 1: Modifique el conjunto de acciones de trabajo DATABASE_ACTIONS y
añada dos acciones de trabajo utilizando la clase de trabajo LARGE_SELECTS.
Para la acción de trabajo ONE_CONCURRENT_SELECT, aplique un umbral de
simultaneidad de 1 para controlar el número de actividades que puede
ejecutarse a la vez y permitir que como máximo haya 3 en cola. Para la acción
de trabajo BIG_ROWS_RETURNED, limite el número de filas que puedan
devolver las actividades de base de trabajo que caigan en dicha clase a
1 000 000.
ALTER WORK ACTION SET DATABASE_ACTIONS
ADD WORK ACTION ONE_CONCURRENT_SELECT ON WORK CLASS LARGE_SELECTS
WHEN CONCURRENTDBCOORDACTIVITIES > 1 AND QUEUEDACTIVITIES > 3 STOP EXECUTION
ADD WORK ACTION BIG_ROWS_RETURNED ON WORK CLASS LARGE_SELECTS
WHEN SQLROWSRETURNED > 1000000 STOP EXECUTION
v Ejemplo 2: Modifique el conjunto de acciones de trabajo
ADMIN_APPS_ACTIONS al objeto de modificar la acción de trabajo
MAP_SELECTS para correlacionar todas las actividades que se ejecuten en la
clase de super servicio ADMIN_APPS bajo la clase de trabajo SELECT_CLASS
con la subclase de servicio ALL_SELECTS. Añada asimismo una acción de
trabajo nueva denominada MAP_UPDATES que correlacione todas las
actividades que se ejecuten en la clase de trabajo UPDATE_CLASS con la
subclase de servicio ALL_SELECTS.
ALTER WORK ACTION SET ADMIN_APPS_ACTIONS
ALTER WORK ACTION MAP_SELECTS MAP ACTIVITY TO ALL_SELECTS
ADD WORK ACTION MAP_UPDATES ON WORK CLASS UPDATE_CLASS
MAP ACTIVITY TO ALL_SELECTS
Sentencias 261
ALTER WORK CLASS SET
Invocación
Autorización
Sintaxis
ALTER WORK CLASS SET nombre-conjunto-clases-trabajo
(1)
ADD definición-clase-trabajo
ALTER modificación-clase-trabajo
WORK CLASS
DROP nombre-clase-trabajo
definición-clase-trabajo:
WORK CLASS
nombre-clase-trabajo
atributos-trabajo cláusula-posición
atributos-trabajo:
WORK TYPE
READ
cláusula-para-desde-a cláusula-código-datos
WRITE
cláusula-para-desde-a cláusula-código-datos
CALL
cláusula-esquema
DML
cláusula-para-desde-a cláusula-código-datos
DDL
LOAD
ALL
cláusula-para-desde-a cláusula-esquema cláusula-código-datos
cláusula-para-desde-a:
TO UNBOUNDED
FOR TIMERONCOST FROM desde-valor
CARDINALITY TO al-valor
cláusula-código-datos:
cláusula-esquema:
cláusula-posición:
POSITION LAST
modificación-clase-trabajo:
WORK CLASS
nombre-clase-trabajo
(2)
cláusula-para-desde-a
cláusula-modificación-esquema
cláusula-modificación-código-datos
cláusula-posición
cláusula-para-desde-a:
TO UNBOUNDED
FOR TIMERONCOST FROM desde-valor
CARDINALITY TO al-valor
ALL UNITS UNBOUNDED
cláusula-modificación-esquema:
cláusula-modificación-código-datos:
Sentencias 263
ALTER WORK CLASS SET
Notas:
1 Las cláusulas ADD, ALTER y DROP se procesan en el orden en que se
especifican.
2 Una misma cláusula no se debe especificar más de una vez.
Descripción
nombre-conjunto-clases-trabajo
Identifica el conjunto de clases de trabajo que se va a modificar. Este nombre
consta de una sola parte. Se trata de un identificador de SQL (ordinario o
delimitado). El nombre-conjunto-clases-trabajo debe identificar un conjunto de
clases de trabajo que exista en el servidor actual (SQLSTATE 42704).
ADD
Añade una clase de trabajo al conjunto de clases de trabajo. Para obtener
detalles, consulte “CREATE WORK CLASS SET”.
ALTER
Modifica los atributos de actividad de base de datos y la posición de una clase
de trabajo específica en el conjunto de clases de trabajo.
WORK CLASS nombre-clase-trabajo
Identifica la clase de trabajo se va a modificar. El nombre-clase-trabajo debe
identificar una clase de trabajo que exista en el conjunto de clases de
trabajo del servidor actual (SQLSTATE 42704).
DROP
Descarta la clase de trabajo del conjunto de clases de trabajo.
WORK CLASS nombre-clase-trabajo
Identifica la clase de trabajo se va a descartar. El nombre-clase-trabajo debe
identificar una clase de trabajo que exista en el conjunto de clases de
trabajo del servidor actual (SQLSTATE 42704). Una clase de trabajo no se
puede descartar si hay una acción de trabajo en cualquiera de los conjuntos
de acciones de trabajo asociados con este conjunto de clases de trabajo que
dependa de la misma (SQLSTATE 42893).
cláusula-para-desde-a
FOR
Indica el tipo de información que está especificándose en la cláusula
FROM desde-valor TO al-valor. La cláusula FOR sólo se utiliza para los
siguientes tipos de trabajo:
v ALL
v DML
v READ
v WRITE
TIMERONCOST
El coste estimado del trabajo, en acciones de temporización. Este valor
se utiliza para determinar si el trabajo cae dentro del rango
especificado en la cláusula FROM desde-valor TO al-valor.
CARDINALITY
La cardinalidad estimada del trabajo. Este valor se utiliza para
determinar si el trabajo cae dentro del rango especificado en la cláusula
FROM desde-valor TO al-valor.
Sentencias 265
ALTER WORK CLASS SET
Normas
v Una sentencia de SQL exclusiva de gestión de carga de trabajo (WLM) debe ir
después de una sentencia COMMIT o ROLLBACK (SQLSTATE 5U021). Las
sentencias de SQL exclusivas de WLM son:
– CREATE HISTOGRAM TEMPLATE, ALTER HISTOGRAM TEMPLATE o
DROP (HISTOGRAM TEMPLATE)
– CREATE SERVICE CLASS, ALTER SERVICE CLASS o DROP (SERVICE
CLASS)
– CREATE THRESHOLD, ALTER THRESHOLD o DROP (THRESHOLD)
– CREATE WORK ACTION SET, ALTER WORK ACTION SET o DROP (WORK
ACTION SET)
– CREATE WORK CLASS SET, ALTER WORK CLASS SET o DROP (WORK
CLASS SET)
– CREATE WORKLOAD, ALTER WORKLOAD o DROP (WORKLOAD)
– GRANT (privilegios de carga de trabajo) o REVOKE (privilegios de carga de
trabajo)
v Una sentencia de SQL exclusiva de WLM no puede emitirse en una transacción
global (SQLSTATE 51041) como por ejemplo, una transacción XA.
Notas
v Los cambios se graban en el catálogo del sistema, pero no surten efecto hasta
que se confirmen, incluso para la conexión que emite la sentencia.
Ejemplos
v Ejemplo 1: Modifique el conjunto de clases de trabajo LARGE_QUERIES y
establezca que las dos clases de trabajo existentes tengan un rango que comience
en 100 000, conservando el rango sin vincular. Añada una tercera clase de
trabajo para todas las sentencias SELECT que tengan un coste de actividades de
temporización estimado que sea igual o superior a 10 000 y sitúe esta clase de
trabajo para que tenga prioridad sobre las dos clases de trabajo existentes.
ALTER WORK CLASS SET LARGE_QUERIES
ALTER WORK CLASS LARGE_ESTIMATED_COST
FOR TIMERONCOST FROM 100000 TO UNBOUNDED
ALTER WORK CLASS LARGE_CARDINALITY
FOR CARDINALITY FROM 100000 TO UNBOUNDED
ADD WORK CLASS LARGE_SELECTS WORK TYPE READ
FOR TIMERONCOST FROM 10000 TO UNBOUNDED POSITION AT 1
v Ejemplo 2: Modifique un conjunto de clases de trabajo denominado
DML_STATEMENTS para añadir una clase de trabajo que represente todas las
sentencias DML SELECT que contengan una sentencia DELETE, INSERT,
MERGE o UPDATE.
ALTER WORK CLASS SET DML_STATEMENTS
ADD WORK CLASS UPDATE_CLASS WORK TYPE WRITE
Sentencias 267
ALTER WORKLOAD
ALTER WORKLOAD
La sentencia ALTER WORKLOAD modifica una carga de trabajo.
Invocación
Autorización
Sintaxis
(1)
ADD atributos-conexión
DROP atributos-conexión
ALLOW DB ACCESS
DISALLOW DB ACCESS
ENABLE
DISABLE
MAXIMUM DEGREE DEFAULT
atributos-conexión:
Sentencias 269
ALTER WORKLOAD
(2)
ADDRESS ( 'valor-dirección' )
APPLNAME ( 'nombre-aplicación' )
SYSTEM_USER ( 'nombre-autorización' )
SESSION_USER ( 'nombre-autorización' )
modificar-cláusula-recopilar-datos-actividad:
MEMBER
ON COORDINATOR
MEMBERS
ON ALL
WITHOUT DETAILS
,
(3)
WITH DETAILS
SECTION AND VALUES
INCLUDE ACTUALS BASE
cláusula-modificar-historial-recopilación:
WITHOUT HISTORY
WITH HISTORY
AND VALUES
cláusula-modificar-datos-espera-bloqueo-recopilación:
cláusula-modificar-historial-recopilación ?
Notas:
1 Una misma cláusula no se debe especificar más de una vez.
2 Cada cláusula de atributo de conexión sólo puede especificarse una vez.
3 La palabra clave DETAILS es la información mínima que debe especificarse,
seguida de la opción separada por una coma.
Descripción
nombre-carga-trabajo
Identifica la carga de trabajo que se va a modificar. Este nombre consta de una
sola parte. Se trata de un identificador de SQL (ordinario o delimitado). El
nombre-carga-trabajo debe identificar una carga de trabajo que exista en el
servidor actual (SQLSTATE 42704).
ADD atributos-conexión
Añade uno o más valores de atributo de conexión a la definición de la carga de
trabajo. Los valores de atributo de conexión especificados ya no deben estar
definidos para la carga de trabajo (SQLSTATE 5U039). La opción ADD no
puede especificarse si nombre-carga-trabajo es 'SYSDEFAULTUSERWORKLOAD'
o 'SYSDEFAULTADMWORKLOAD' (SQLSTATE 42832).
DROP atributos-conexión
Descarta uno o más valores de atributo de conexión de la definición de la
carga de trabajo. Los valores de atributo de conexión especificados deben estar
definidos para la carga de trabajo (SQLSTATE 5U040). La opción DROP no
puede especificarse si nombre-carga-trabajo es 'SYSDEFAULTUSERWORKLOAD'
o 'SYSDEFAULTADMWORKLOAD' (SQLSTATE 42832). Debe haber como
mínimo un valor de atributo de conexión definida. No puede descartarse el
último valor de atributo de conexión (SQLSTATE 5U022).
atributos-conexión
Especifica los valores de atributo de conexión para la carga de trabajo. Todos
los atributos de conexión distinguen entre mayúsculas y minúsculas, excepto
ADDRESS.
ADDRESS ('valor-dirección', ...)
Especifica una o más direcciones IPv4, direcciones IPv6 o nombres de
dominio seguros para el atributo de conexión ADDRESS. Un valor de
dirección no puede aparecer más de una vez en la lista (SQLSTATE 42713).
Cada valor de dirección debe ser una dirección IPv4, una dirección IPv6 o
un nombre de dominio seguro.
Una dirección IPv4 no debe contener espacios iniciales y está representada
como dirección decimal con puntos. Un ejemplo de una dirección IPv4 es
9.112.46.111. El valor localhost o su representación equivalente
127.0.0.1 no dará como resultado una coincidencia; en su lugar debe
especificarse la dirección IPv4 real del sistema principal. Una dirección
IPv6 no debe contener espacios iniciales y está representada como
dirección hexadecimal con dos puntos. Un ejemplo de dirección IPv6 es
2001:0DB8:0000:0000:0008:0800:200C:417A. Las direcciones IPv6
correlacionadas con IPv4 (por ejemplo, ::ffff:192.0.2.128) no darán
como resultado una coincidencia. De modo análogo, localhost o su
representación abreviada de IPv6 ::1 no dará como resultado una
coincidencia. Un nombre de dominio se convierte en una dirección IP por
medio del servidor del nombre de dominio en el que se determina una
Sentencias 271
ALTER WORKLOAD
Sentencias 273
ALTER WORKLOAD
ENABLE
Especifica que la carga de trabajo se habilitará y se tomará en
consideración cuando se seleccione una carga de trabajo.
DISABLE
Especifica que la carga de trabajo se inhabilitará y no se tomará en
consideración cuando se seleccione una carga de trabajo. Esta opción no
puede especificarse si nombre-carga-trabajo es
SYSDEFAULTUSERWORKLOAD o SYSDEFAULTADMWORKLOAD
(SQLSTATE 42832).
MAXIMUM DEGREE
Especifica el grado de ejecución máximo de paralelismo para esta carga de
trabajo. El atributo MAXIMUM DEGREE no se puede modificar si
nombre-carga-trabajo es SYSDEFAULTADMWORKLOAD.
DEFAULT
Especifica que esta carga de trabajo hereda el valor de paralelismo
intrapartición del parámetro de configuración del gestor de bases de datos
intra_parallel. Cuando intra_parallel se establece en NO, la carga de
trabajo se ejecuta con el paralelismo intrapartición inhabilitado. Cuando
intra_parallel se establece en YES, la carga de trabajo se ejecuta con el
paralelismo intrapartición habilitado. La carga de trabajo no especifica un
grado de tiempo de ejecución máximo para las aplicaciones asignadas. Por
tanto, el grado de tiempo de ejecución real se determina como el más bajo
de los valores del parámetro de configuración max_querydegree, el valor
establecido por el comando SET RUNTIME DEGREE y el grado de
compilación de la sentencia de SQL.
grado
Especifica el grado máximo de paralelismo para esta carga de trabajo. Los
valores válidos son 1 a 32.767. Con valor 1, las peticiones asociadas se
ejecutan con el paralelismo intrapartición inhabilitado. Con un valor de 2 a
32.767, las peticiones asociadas se ejecutan con el paralelismo intrapartición
habilitado. El grado de tiempo de ejecución real se determina como el más
bajo de este grado, el valor del parámetro de configuración
max_querydegree, el valor establecido por el comando SET RUNTIME
DEGREE y el grado de compilación de la sentencia de SQL.
SERVICE CLASS nombre-clase-servicio
Especifica que las peticiones asociadas a esta carga de trabajo se ejecuten en la
clase de servicio nombre-clase-servicio. El nombre-clase-servicio debe identificar
una clase de servicio que exista en el servidor actual (SQLSTATE 42704). El
nombre-clase-servicio no puede ser 'SYSDEFAULTSUBCLASS',
'SYSDEFAULTSYSTEMCLASS' o 'SYSDEFAULTMAINTENANCECLASS'
(SQLSTATE 5U032). Esta opción no puede especificarse si nombre-carga-trabajo
es 'SYSDEFAULTADMWORKLOAD' (SQLSTATE 42832).
UNDER nombre-superclase-servicio
La cláusula se utiliza al especificar una subclase de servicio. El
nombre-superclase-servicio identifica la superclase de servicio de
nombre-superclase-servicio. El nombre-superclase-servicio debe identificar una
superclase de servicio que exista en el servidor actual (SQLSTATE 42704).
El nombre-superclase-servicio no puede ser 'SYSDEFAULTSYSTEMCLASS' o
'SYSDEFAULTMAINTENANCECLASS' (SQLSTATE 5U032).
POSITION
Especifica el lugar en el que va a situarse esta carga de trabajo en la lista
ordenada de cargas de trabajo. En tiempo de ejecución, se examina esta lista
por orden para buscar la primera carga de trabajo que coincida con los
atributos de conexión necesarios. Esta opción no puede especificarse si
nombre-carga-trabajo es 'SYSDEFAULTUSERWORKLOAD' o
'SYSDEFAULTADMWORKLOAD' (SQLSTATE 42832).
LAST
Especifica que la carga de trabajo va a ser la última de la lista, antes de las
cargas de trabajo por omisión SYSDEFAULTUSERWORKLOAD y
SYSDEFAULTADMWORKLOAD.
BEFORE nombre-carga-trabajo-relativa
Especifica que la carga de trabajo va a colocarse antes de la carga de
trabajo nombre-carga-trabajo-relativa de la lista. El nombre-carga-trabajo-relativa
debe identificar una carga de trabajo que exista en el servidor actual
(SQLSTATE 42704). La opción BEFORE no puede especificarse si
nombre-carga-trabajo-relativa es 'SYSDEFAULTUSERWORKLOAD' o
'SYSDEFAULTADMWORKLOAD' (SQLSTATE 42832).
AFTER nombre-carga-trabajo-relativa
Especifica que la carga de trabajo va a colocarse detrás de la carga de
trabajo nombre-carga-trabajo-relativa de la lista. El nombre-carga-trabajo-relativa
debe identificar una carga de trabajo que exista en el servidor actual
(SQLSTATE 42704). La opción AFTER no puede especificarse si
nombre-carga-trabajo-relativa es 'SYSDEFAULTUSERWORKLOAD' o
'SYSDEFAULTADMWORKLOAD' (SQLSTATE 42832).
AT posición
Especifica la posición absoluta en la que la carga de trabajo va a colocarse
en la lista. Este valor puede ser cualquier entero positivo (diferente de
cero) (SQLSTATE 42615). Si posición es mayor que el número de cargas de
trabajo existentes más una, la carga de trabajo se sitúa en la última
posición justo antes de SYSDEFAULTUSERWORKLOAD y
SYSDEFAULTADMWORKLOAD.
COLLECT ACTIVITY DATA
Especifica que los datos sobre cada actividad asociada a esta carga de trabajo
se enviarán al supervisor de sucesos de actividades activas cuando la actividad
finalice.
modificar-cláusula-recopilar-datos-actividad
ON COORDINATOR MEMBER
Especifica que los datos de actividad se recopilan sólo en el miembro
coordinador de la actividad.
ON ALL MEMBERS
Especifica que los datos de actividad van a recopilarse en todos los
miembros en los que se procesa la actividad. En miembros remoto, es
posible capturar un registro de la actividad varias veces, puesto que
esta va y viene en dichos miembros. Si se especifica la cláusula AND
VALUES, los valores de entrada de la actividad se recopilarán sólo
para miembros del coordinador.
WITHOUT DETAILS
Especifica que los datos sobre cada actividad asociada con esta carga
de trabajo se deben enviar a cualquier supervisor de actividades
activas, cuando la actividad finalice su ejecución. Los detalles sobre la
sentencia, el entorno de compilación y los datos del entorno de sección
no se envían.
WITH
Sentencias 275
ALTER WORKLOAD
DETAILS
Especifica que la sentencia y los datos del entorno de compilación
deben enviarse a cualquier supervisor de sucesos de actividades
activas para aquellas actividades que las tienen. Los datos del
entorno de sección no se envían.
SECTION
Especifica que los datos de sentencia, de entorno de compilación,
de entorno de sección y los datos reales de sección han de enviarse
a cualquier supervisor de sucesos de actividades activo para
aquellas actividades que incluyan estos. Se debe especificar
DETAILS si se especifica SECTION. Los datos reales de sección
sólo se recopilarán en cualquier miembro donde se recopilen datos
de actividad.
INCLUDE ACTUALS BASE
Especifica que los datos reales de sección sólo se recopilarán en
las particiones donde se recopilen datos de actividad. Para que
se recopilen datos reales de sección, se debe especificar la
cláusula INCLUDE ACTUALS o se debe establecer el
parámetro de configuración de base de datos section_actuals.
La configuración efectiva para la recopilación de datos reales
de sección es la combinación del valor de la cláusula
INCLUDE ACTUALS, el parámetro de configuración de base
de datos section_actuals y el valor <collectsectionactuals>
especificado en la rutina WLM_SET_CONN_ENV. Por ejemplo,
si se especifica INCLUDE ACTUALS BASE, pero el valor del
parámetro de configuración de la base de datos
section_actuals es NONE y <collectsectionactuals> se
establece en NONE, el valor efectivo de la colección de datos
reales de la sección es BASE.
BASE especifica que han de habilitarse y recopilarse los datos
reales siguientes durante la ejecución de la actividad:
v Recuentos de cardinalidad de operador básico
v Estadísticas para cada objeto referenciado (sólo sentencias
DML)
AND VALUES
Especifica que los valores de datos de entrada van a enviarse al
supervisor de sucesos de actividades activas para las actividades
que dispongan de los mismos.
NONE
Especifica que los datos de actividad no se recopilan para cada actividad
que se asocie con esta carga de trabajo.
COLLECT ACTIVITY METRICS
Especifica que la métrica del supervisor debe recopilarse para una actividad
enviada por una ocurrencia de la carga de trabajo. El valor por omisión es
COLLECT ACTIVITY METRICS NONE.
La configuración efectiva de la recopilación de métrica de actividad es la
combinación del atributo especificado por la cláusula COLLECT ACTIVITY
METRICS de la carga de trabajo que envía la petición y el parámetro de
configuración de base de datos MON_ACT_METRICS. Si ni el atributo de
carga de trabajo ni el parámetro de configuración tienen un valor distinto de
NONE, se recopilará la métrica para la actividad.
NONE
Especifica que no se recopilará ninguna métrica para cualquier actividad
enviada por una ocurrencia de la carga de trabajo.
BASE
Especifica que la métrica básica se recopilará para cualquier actividad
enviada por una ocurrencia de la carga de trabajo.
EXTENDED
Especifica que la métrica básica se recopilará para cualquier actividad
enviada por una ocurrencia de la carga de trabajo. Asimismo, especifica
que los valores de los siguientes elementos de supervisor deben
determinarse con granularidad adicional:
v total_section_time
v total_section_proc_time
v total_routine_user_code_time
v total_routine_user_code_proc_time
v total_routine_time
COLLECT AGGREGATE ACTIVITY DATA
Especifica que los datos de actividades agregadas sobre las actividades
asociadas con esta carga de trabajo deben enviarse al supervisor de sucesos
estadísticos, si hay alguno activo. Esta información se recopila periódicamente
en un intervalo que se especifica por medio del parámetro de configuración de
base de datos wlm_collect_int. Cuando se especifica COLLECT AGGREGATE
ACTIVITY DATA, el valor por omisión es COLLECT AGGREGATE ACTIVITY
DATA BASE.
BASE
Especifica que los datos de actividades agregadas básicas sobre las
actividades asociadas con esta carga de trabajo se deben enviar al
supervisor de sucesos estadísticos, si hay alguno activo. Los datos de
actividad agregada básica incluyen:
v Marca de límite superior del coste de actividad estimado
v Marca de límite superior de las filas devueltas
v Marca de límite superior del uso de espacio de tablas temporal. Sólo las
actividades a las que se ha aplicado un umbral SQLTEMPSPACE
participan en esta marca de límite superior.
v Histograma de tiempo de vida de la actividad
v Histograma de tiempo en cola de la actividad
v Histograma de tiempo de ejecución de la actividad
EXTENDED
Especifica que todos los datos de actividades agregadas sobre las
actividades asociadas con esta carga de trabajo deben enviarse al
supervisor de sucesos estadísticos, si hay alguno activo. Ello incluye todos
los datos de actividad agregados básicos más:
v Histograma de coste estimado del lenguaje de manipulación (DML) de
datos de actividad
v Histograma de tiempo de llegada de DML de actividad
NONE
Especifica que no debe recopilarse ningún dato de actividad agregada para
esta carga de trabajo.
Sentencias 277
ALTER WORKLOAD
Sentencias 279
ALTER WORKLOAD
Sentencias 281
ALTER WORKLOAD
Normas
v Una sentencia de SQL exclusiva de gestión de carga de trabajo (WLM) debe ir
después de una sentencia COMMIT o ROLLBACK (SQLSTATE 5U021). Las
sentencias de SQL exclusivas de WLM son:
– CREATE HISTOGRAM TEMPLATE, ALTER HISTOGRAM TEMPLATE o
DROP (HISTOGRAM TEMPLATE)
– CREATE SERVICE CLASS, ALTER SERVICE CLASS o DROP (SERVICE
CLASS)
– CREATE THRESHOLD, ALTER THRESHOLD o DROP (THRESHOLD)
– CREATE WORK ACTION SET, ALTER WORK ACTION SET o DROP (WORK
ACTION SET)
– CREATE WORK CLASS SET, ALTER WORK CLASS SET o DROP (WORK
CLASS SET)
– CREATE WORKLOAD, ALTER WORKLOAD o DROP (WORKLOAD)
– GRANT (privilegios de carga de trabajo) o REVOKE (privilegios de carga de
trabajo)
Notas
v Los cambios se graban en el catálogo del sistema, pero no surten efecto hasta
que se confirmen, incluso para la conexión que emite la sentencia. Para
apariciones de cargas de trabajo recién emitidas, los cambios surten efecto
después de confirmar la sentencia ALTER WORKLOAD. Para las apariciones de
carga de trabajo activas, los cambios surtirán efecto al principio de la siguiente
unidad de trabajo.
v Si se especifica la opción DISABLE, la carga de de trabajo se inhabilitará después
de las confirmaciones de sentencia. La carga de trabajo no se tendrá en cuenta la
próxima vez que se seleccione una carga de trabajo. Si hay una aparición de
carga de trabajo activa asociada con esta carga de trabajo cuando se confirma la
sentencia ALTER WORKLOAD, sigue ejecutándose hasta el final de la unidad de
trabajo actual. Al principio de la siguiente unidad de trabajo, tendrá lugar una
reevaluación de carga de trabajo y la conexión pasará a estar asociada a una
carga de trabajo diferente.
v Privilegios: el privilegio USAGE no se otorga a ningún usuario, grupo o rol
cuando se crea una carga de trabajo. Para habilitar el uso de una carga de
trabajo, otorgue el privilegio USAGE de esa carga de trabajo a un usuario, grupo
o rol mediante la sentencia GRANT USAGE ON WORKLOAD.
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con las versiones anteriores de los productos
DB2 y con otros productos de base de datos. Estas alternativas no son estándar y
no deberían utilizarse.
– Puede especificarse DATABASE PARTITION en lugar de MEMBER, salvo
cuando la variable de registro DB2_ENFORCE_MEMBER_SYNTAX se
establece en ON.
– Puede especificarse DATABASE PARTITIONS en lugar de MEMBERS, salvo
cuando la variable de registro DB2_ENFORCE_MEMBER_SYNTAX se
establece en ON.
– Puede especificarse COLLECT UNIT OF WORK DATA PACKAGE LIST en
lugar de COLLECT UNIT OF WORK DATA BASE INCLUDE PACKAGE
LIST.
Ejemplos
v Ejemplo 1: La carga de trabajo PAYROLL se ha colocado en la actualidad de
modo que la carga de trabajo INVENTORY se tome en consideración en primer
lugar cuando DB2 seleccione una carga de trabajo en tiempo de ejecución.
Modifique el orden de evaluación para que PAYROLL se tome en consideración
en primer lugar.
ALTER WORKLOAD PAYROLL
POSITION BEFORE INVENTORY
v Ejemplo 2: Modifique el orden de evaluación de modo que la carga de trabajo
BENCHMARK se evalúe por medio de DB2 antes de cualquier carga de trabajo
del catálogo.
ALTER WORKLOAD BENCHMARK
POSITION AT 1
v Ejemplo 3: Se ha creado la carga de trabajo REPORTS con APPLNAME
establecido en appl1, appl2 y appl3 y SYSTEM_USER establecido en BOB y
Sentencias 283
ALTER WORKLOAD
MARY. Modifique la carga de trabajo para añadir una aplicación nueva, appl4 a
la lista de nombres de aplicación y elimine appl2, ya que no debería
correlacionarse con REPORTS.
ALTER WORKLOAD REPORTS
ADD APPLNAME (’appl4’)
DROP APPLNAME (’appl2’)
v Ejemplo 4: suponiendo que existe un supervisor de sucesos llamado LOCK y que
está activo, crear registros de sucesos de bloqueo con el historial de sentencias
para los sucesos de tiempo de espera de bloqueo que tengan lugar dentro de la
carga de trabajo APP.
ALTER WORKLOAD APP
COLLECT LOCK TIMEOUT DATA WITH HISTORY
v Ejemplo 5: suponiendo que existe un supervisor de sucesos de bloqueo
denominado LOCK y que está activo, crear registros de sucesos de bloqueo sólo
para sucesos de tiempo de espera de punto muerto y bloqueo que tengan lugar
en la carga de trabajo PAYROLL en todas las particiones.
ALTER WORKLOAD PAYROLL
COLLECT DEADLOCK DATA
COLLECT LOCK TIMEOUT DATA WITHOUT HISTORY
v Ejemplo 6: suponiendo que existe un supervisor de sucesos de bloqueo
denominado LOCK y que está activo, crear registros de sucesos de bloqueo con
un historial de sentencias para sucesos de punto muerto que tengan lugar dentro
de la carga de trabajo INVOICE.
ALTER WORKLOAD
INVOICE
COLLECT DEADLOCK DATA WITH HISTORY AND VALUES
v Ejemplo 7: suponiendo que existe un supervisor de sucesos de bloqueo
denominado LOCK y que está activo, crear registros de sucesos de bloqueo con
un historial de sentencias y valores para bloqueos adquiridos después de esperar
más de 150 milisegundos dentro de la carga de trabajo INVOICE.
ALTER WORKLOAD
INVOICE
COLLECT LOCK WAIT DATA FOR LOCKS WAITING MORE THAN 150000
MICROSECONDS WITH HISTORY AND VALUES
v Ejemplo 8: modificar la carga de trabajo REPORTS para recopilar datos de la
unidad de trabajo y enviarlos al supervisor de sucesos de la unidad de trabajo:
ALTER WORKLOAD REPORTS
COLLECT UNIT OF WORK DATA BASE
ALTER WRAPPER
La sentencia ALTER WRAPPER se utiliza para actualizar las propiedades de un
derivador.
Invocación
Autorización
Sintaxis
ALTER WRAPPER nombre-derivador OPTIONS
,
ADD
( nombre-opción-derivador constante-serie )
SET
DROP nombre-opción-derivador
Descripción
nombre-derivador
Especifica el nombre del derivador.
OPTIONS
Indica que se deben habilitar, restaurar o descartar las opciones de derivador.
ADD
Habilita una opción de servidor.
SET
Cambia el valor de una opción de derivador.
nombre-opción-derivador
Nombra una opción de derivador que se debe habilitar o restaurar.
Actualmente el único nombre de opción de derivador soportado es
DB2_FENCED.
constante-serie
Especifica el valor para nombre-opción-derivador como una constante de serie
de caracteres. Los valores válidos son 'Y' o 'N'. El valor por omisión para
los derivadores relacionales es 'N', y el valor por omisión para los
derivadores no relacionales es 'Y'.
DROP nombre-opción-derivador
Descarta una opción de derivador.
Sentencias 285
ALTER WRAPPER
Notas
v La ejecución de la sentencia ALTER WRAPPER no incluye la comprobación de
validez de las opciones específicas de derivador.
v Una sentencia ALTER WRAPPER de una unidad de trabajo (UOW) determinada
no puede procesarse (SQLSTATE 55007) si la UOW ya incluye uno de los
siguientes elementos:
– Una sentencia SELECT que hace referencia a un apodo que pertenece al
derivador.
– Un cursor abierto en un apodo que pertenece al derivador.
– Una sentencia INSERT, DELETE o UPDATE emitida para un apodo que
pertenece al derivador.
Ejemplo
ALTER XSROBJECT
Esta sentencia se utiliza para habilitar o inhabilitar el soporte de la descomposición
para un esquema XML específico. Los esquemas XML anotados se pueden utilizar
para descomponer documentos XML en tablas relacionales, si se ha habilitado la
descomposición para dichos esquemas XML.
Invocación
Autorización
Sintaxis
ALTER XSROBJECT nombre-objetoxsr ENABLE DECOMPOSITION
DISABLE DECOMPOSITION
Descripción
nombre-objetoxsr
Identifica el objeto XSR que se va a modificar. El nombre-objetoxsr (incluido el
calificador de esquema implícito o explícito) debe designar de forma exclusiva
un objeto XSR existente en el servidor actual. Si no existe ningún objeto XSR
con este identificador, se devolverá un error (SQLSTATE 42704).
ENABLE DECOMPOSITION o DISABLE DECOMPOSITION
Habilita o inhabilita el uso del objeto XSR para la descomposición. El objeto
XSR identificado debe ser un esquema XML (SQLSTATE 42809). Para habilitar
la descomposición, es preciso anotar el esquema XML con normas de
descomposición (SQLSTATE 225DE) y los objetos a los que dichas normas
hacen referencia deben existir en el servidor actual (SQLSTATE 42704).
Notas
v Cuando se inhabilita la descomposición de un objeto XSR, se eliminan todas las
entradas de catálogo relacionadas.
v El soporte de descomposición de un objeto XSR se inhabilitará si se descarta o se
modifica algún objeto del que dependa el objeto XRS (como por ejemplo tablas)
para convertirlo en incompatible con el objeto XSR.
v En un entorno de base de datos particionada, se puede emitir esta sentencia
conectándose a cualquier partición.
Sentencias 287
ASSOCIATE LOCATORS
ASSOCIATE LOCATORS
La sentencia ASSOCIATE LOCATORS obtiene el valor localizador de cada conjunto
de resultados devuelto por un procedimiento.
Invocación
Autorización
No se necesita.
Sintaxis
RESULT SET
ASSOCIATE LOCATOR
LOCATORS
Descripción
variable-localizadora-cr
Especifica una variable localizadora de conjuntos de resultados que se ha
declarado en una sentencia de SQL compuesto (procedimiento).
WITH PROCEDURE
Identifica el procedimiento que devuelve localizadores de conjuntos de
resultados de acuerdo con el nombre de procedimiento especificado.
nombre-procedimiento
Un nombre de procedimiento es un nombre calificado o no calificado.
Un nombre de procedimiento totalmente calificado consta de dos partes.
La primera parte es un identificador que contiene el nombre de esquema
del procedimiento. La última parte es un identificador que contiene el
nombre del procedimiento. Las dos partes deben estar separadas por un
punto. Cualquiera de las partes o ambas puede ser un identificador
delimitado.
Si el nombre de procedimiento no está calificado, consta de un solo
nombre, pues el nombre de esquema implícito no se añade como
calificador al nombre del procedimiento. Para que la sentencia ASSOCIATE
LOCATOR se ejecute satisfactoriamente sólo es necesario que el nombre de
procedimiento no calificado contenido en la sentencia sea el mismo que el
nombre de procedimiento contenido en la sentencia CALL ejecutada más
recientemente y que se especificó con un nombre de procedimiento no
calificado. Cuando se comparan los nombres, no se tiene en cuenta el
nombre de esquema implícito del nombre no calificado contenido en la
sentencia CALL. En el párrafo siguiente se describen las normas para
especificar un nombre de procedimiento.
Notas
v Si el número de variables localizadoras de conjuntos de resultados que aparecen
en la sentencia ASSOCIATE LOCATORS es menor que el número de
localizadores devueltos por el procedimiento, todas las variables de la sentencia
se asignan a un valor, y se emite un aviso.
v Si el número de variables localizadoras de conjuntos de resultados que aparecen
en la sentencia ASSOCIATE LOCATORS es mayor que el número de
localizadores devueltos por el procedimiento, se asigna el valor 0 a las variables
sobrantes.
v Si un mismo llamador invoca un procedimiento más de una vez, sólo son
accesibles los conjuntos de resultados más recientes.
v Los valores de localizadora de conjunto de resultados están disponibles para un
procedimiento que se llame utilizando una sentencia EXECUTE que ejecuta la
sentencia CALL preparada con anterioridad por medio de la sentencia
PREPARE. Sin embargo, los valores de localizadora de conjunto de resultados no
están disponibles para un procedimiento que se llame utilizando una sentencia
EXECUTE IMMEDIATE.
v Los nombres de procedimientos de módulo a los que se hace referencia en una
sentencia ASSOCIATE LOCATORS sólo pueden ser referencias de nombre
calificado en 1 ó 2 partes. No se permiten las referencias de nombre en 3 partes
(SQLSTATE 42601). Las sentencias CALL que hacen referencia a un
procedimiento-módulo al que se hacía referencia en una sentencia ASSOCIATE
LOCATORS deben especificar el procedimiento-módulo con el mismo nombre
calificado en 1 ó 2 partes que se utilizaba en la sentencia ASSOCIATE
LOCATORS.
Ejemplos
En los ejemplos siguientes se da por supuesto que las sentencias utilizadas están
intercaladas en procedimientos SQL.
v Ejemplo 1: Utilice las variables localizadoras de conjuntos de resultados LOC1 y
LOC2 para obtener los valores de los dos conjuntos de resultados devueltos por
el procedimiento P1. Se supone que el procedimiento se invoca utilizando un
nombre que consta de dos partes.
CALL P1;
ASSOCIATE RESULT SET LOCATORS (LOC1, LOC2)
WITH PROCEDURE P1;
v Ejemplo 2: Repita el supuesto del Ejemplo 1, pero utilice un nombre de dos
partes para especificar un nombre de esquema explícito para el procedimiento
para asegurar que se utilice ese procedimiento P1 del esquema MYSCHEMA.
CALL MYSCHEMA.P1;
ASSOCIATE RESULT SET LOCATORS (LOC1, LOC2)
WITH PROCEDURE MYSCHEMA.P1;
Sentencias 289
AUDIT
AUDIT
La sentencia AUDIT determina la política de auditoría que se va a utilizar para
una base de datos concreta u objeto de base de datos en el servidor actual. Cada
vez que se está utilizando el objeto, éste se auditará con arreglo a dicha política.
Invocación
Autorización
Sintaxis
,
(1)
AUDIT DATABASE
TABLE nombre-tabla
TRUSTED CONTEXT nombre-contexto
USER nombre-autorización
GROUP
ROLE
ACCESSCTRL
CREATE_SECURE_OBJECT
DATAACCESS
DBADM
SECADM
SQLADM
SYSADM
SYSCTRL
SYSMAINT
SYSMON
WLMADM
Notas:
1 Cada cláusula (con el mismo nombre de objeto, si es de aplicación) puede
especificarse como máximo una vez (SQLSTATE 42713).
Descripción
ACCESSCTRL, CREATE_SECURE_OBJECT, DATAACCESS, DBADM, SECADM, SQLADM,
SYSADM, SYSCTRL, SYSMAINT, SYSMON o WLMADM
Especifica que una política de auditoría va a asociarse o eliminarse de la
autorización especificada. Todos los sucesos auditables que se inician por
medio de un usuario que tiene la autorización especificada, incluso en el caso
Sentencias 291
AUDIT
Normas
v Una sentencia de SQL exclusiva de AUDIT debe ir después de una sentencia
COMMIT o ROLLBACK (SQLSTATE 5U021). Las sentencias de SQL exclusivas
de AUDIT son:
– AUDIT
– CREATE AUDIT POLICY, ALTER AUDIT POLICY o DROP (AUDIT POLICY)
– DROP (ROLE o TRUSTED CONTEXT si está asociada a una política de
auditoría)
v Una sentencia de SQL exclusiva de AUDIT no puede emitirse en una transacción
global (SQLSTATE 51041) como por ejemplo, una transacción XA.
v Un objeto que puede estar asociado con no más de una política (SQLSTATE
5U042).
Notas
v Los cambios se graban en el catálogo, pero no surten efecto hasta después de
que se ejecute una sentencia COMMIT.
v Los cambios no surten efecto hasta la siguiente unidad de trabajo que haga
referencia al objeto al que se aplica la política de auditoría. Por ejemplo, si se
utiliza la política de auditoría para la base de datos, ninguna unidad de trabajo
actual comenzará la auditoría con arreglo a la política hasta después de que se
complete una sentencia COMMIT o ROLLBACK.
v Las vistas que acceden a una tabla asociada con una política de auditoría se
comprueban con arreglo a la política de la tabla subyacente.
v La política de auditoría que se aplica a una tabla no se aplica a una tabla de
consulta materializada (MQT) basada en dicha tabla. Resulta recomendable que
si se asocia una política de auditoría con una tabla, también se asocie dicha
política con cualquier MQT basada en dicha tabla. Es posible que el compilador
utilice automáticamente una MQT, aún en el caso de que una sentencia de SQL
haga referencia a la tabla base; sin embargo, estará vigente la política de
auditoría que se utilice para la tabla base.
v Cuando se realice una operación de usuario de conmutador en un contexto
fiable, se vuelven a evaluar todas las políticas de auditoría con arreglo al usuario
nuevo y no se utiliza ninguna política del usuario antiguo para la sesión actual.
Esta acción se aplica específicamente a las políticas de auditoría asociadas
directamente con el usuario, las pertenencias al rol o al grupo del usuario y las
autorizaciones del usuario. Por ejemplo, si se auditó la sesión actual debido a
Ejemplos
v Ejemplo 1: Utilice la política de auditoría DBAUDPRF para determinar los
valores de auditoría para la base de datos en el servidor actual.
AUDIT DATABASE USING POLICY DBAUDPRF
v Ejemplo 2: Elimine la política de auditoría de la tabla EMPLOYEE.
AUDIT TABLE EMPLOYEE REMOVE POLICY
v Ejemplo 3: Utilice la política de auditoría POWERUSERS para determinar los
valores de auditoría para las autorizaciones SYSADM, DBADM y SECADM, así
como el grupo DBAS.
AUDIT SYSADM, DBADM, SECADM, GROUP DBAS USING POLICY POWERUSERS
v Ejemplo 4: Sustituya la política de auditoría por el rol TELLER por la política
nueva TELLERPRF.
AUDIT ROLE TELLER REPLACE POLICY TELLERPRF
Sentencias 293
BEGIN DECLARE SECTION
Invocación
Autorización
No se necesita.
Sintaxis
BEGIN DECLARE SECTION
Descripción
Normas
v Las sentencias BEGIN DECLARE SECTION y END DECLARE SECTION deben
especificarse por pares y no pueden anidarse.
v No pueden incorporarse sentencias de SQL dentro de la sección de declaración.
v Las variables a las que se hace referencia en las sentencias de SQL se deben
declarar en una sección de declaración en todos los lenguajes principales que no
sean REXX. Además, la sección debe aparecer antes que la primera referencia a
la variable. En general, las variables de lenguaje principal no se declaran en
REXX, excepto los localizadores de LOB y las variables de referencia a archivos.
En este caso, no se declaran dentro de una BEGIN DECLARE SECTION.
v Las variables declaradas fuera de una sección de declaración no deben tener el
mismo nombre que las variables declaradas dentro de una sección de
declaración.
v El tipo de datos y la longitud de los tipos de datos LOB deben ir precedidos por
las palabras clave SQL TYPE IS.
Ejemplos
v Ejemplo 1: Defina las variables del lenguaje principal hv_smint (smallint),
hv_vchar24 (varchar(24)), hv_double (double), hv_blob_50k (blob(51200)),
hv_struct (del tipo estructurado "struct_type" como blob(10240)) en un programa
escrito en C.
double hv_double;
SQL TYPE IS BLOB(50K) hv_blob_50k;
SQL TYPE IS struct_type AS BLOB(10k) hv_struct;
EXEC SQL END DECLARE SECTION;
v Ejemplo 2: Defina las variables del lenguaje principal HV-SMINT (smallint),
HV-VCHAR24 (varchar(24)), HV-DEC72 (dec(7,2)) y HV-BLOB-50k (blob(51200))
en un programa COBOL.
WORKING-STORAGE SECTION.
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 HV-SMINT PIC S9(4) COMP-4.
01 HV-VCHAR24.
49 HV-VCHAR24-LENGTH PIC S9(4) COMP-4.
49 HV-VCHAR24-VALUE PIC X(24).
01 HV-DEC72 PIC S9(5)V9(2) COMP-3.
01 HV-BLOB-50K USAGE SQL TYPE IS BLOB(50K).
EXEC SQL END DECLARE SECTION END-EXEC.
v Ejemplo 3: Defina las variables del lenguaje principal HVSMINT (smallint),
HVVCHAR24 (char(24)), HVDOUBLE (double) y HVBLOB50k (blob(51200)) en
un programa Fortran.
EXEC SQL BEGIN DECLARE SECTION
INTEGER*2 HVSMINT
CHARACTER*24 HVVCHAR24
REAL*8 HVDOUBLE
SQL TYPE IS BLOB(50K) HVBLOB50K
EXEC SQL END DECLARE SECTION
Nota: En Fortran, si el valor esperado es mayor que 254 bytes, debe utilizarse
una variable del lenguaje principal CLOB.
v Ejemplo 4: Defina las variables de lenguaje principal HVSMINT (smallint),
HVBLOB50K (blob(51200)) y HVCLOBLOC (un localizador de CLOB) en un
programa REXX.
DECLARE :HVCLOBLOC LANGUAGE TYPE CLOB LOCATOR
call sqlexec ’FETCH c1 INTO :HVSMINT, :HVBLOB50K’
Observe que las variables HVSMINT y HVBLOB50K se han definido de manera
implícita al utilizarlas en la sentencia FETCH.
Sentencias 295
CALL
CALL
La sentencia CALL llama a un procedimiento o a un procedimiento externo.
Invocación
Autorización
Sintaxis
CALL nombre-procedimiento
,
( argumento )
Argumento:
expresión
nombre-parámetro => DEFAULT
NULL
Descripción
nombre-procedimiento
Especifica el procedimiento que va a llamarse. Debe ser un procedimiento que
esté descrito en el catálogo o que esté declarado en el ámbito de la sentencia
de SQL compuesto (compilado) que incluye la sentencia CALL. El
procedimiento específico que debe invocarse se elige mediante la utilización de
la resolución de procedimiento. (Para obtener más detalles, consulte el
apartado “Notas” de esta sentencia.)
argumento
nombre-parámetro
Nombre del parámetro al que se asigna el argumento. Cuando se asigna un
argumento a un parámetro por nombre, todos los argumentos que le
siguen también deben asignarse por nombre (SQLSTATE 4274K).
Un argumento con nombre sólo debe especificarse una vez (implícita o
explícitamente) (SQLSTATE 4274K).
Notas
v Asignaciones de parámetros: cuando se ejecuta la sentencia CALL, el valor de
cada uno de sus argumentos se asigna (mediante la asignación de
almacenamiento) al parámetro correspondiente del procedimiento. Los valores
de los parámetros que se hayan definido con un valor por omisión pueden
omitirse de la lista de argumentos cuando se invoque el procedimiento.
Cuando se ejecuta la sentencia CALL, se transfiere el control al procedimiento
según los convenios de llamada del lenguaje principal. Cuando la ejecución del
procedimiento se ha completado, el valor de cada parámetro del procedimiento
se asigna (utilizando la asignación de almacenamiento) al argumento
correspondiente de la sentencia CALL definido como OUT o INOUT. Si el
procedimiento devuelve un error, los argumentos OUT no se definen y los
argumentos INOUT no cambian. Para obtener detalles sobre las normas de
asignación, consulte “Asignaciones y comparaciones”.
Sentencias 297
CALL
– Cada procedimiento candidato tiene los parámetros necesarios para que para
cada argumento con nombre incluido en la sentencia CALL exista un
parámetro con un nombre coincidente que no corresponda ya a un argumento
de posición (o sin nombre).
– Cada parámetro de un procedimiento candidato que no tenga un argumento
correspondiente en la sentencia CALL, especificado por posición o por
nombre, se define con un valor por omisión.
– Cada procedimiento candidato de un conjunto de uno o varios esquemas
tiene el privilegio EXECUTE asociado con el ID de autorización de la
sentencia que invoca la función.
Asimismo, el conjunto de procedimientos candidatos depende del entorno en el
que se invoca el procedimiento y de la forma de calificarse el nombre de
procedimiento.
– Si el nombre del procedimiento no está calificado, la resolución del
procedimiento se realiza siguiendo estos pasos:
1. Si se invoca un procedimiento desde una sentencia de SQL compuesto
(compilado) y existe un procedimiento declarado con el mismo nombre en
el ámbito anidado, busque el conjunto de sentencias de SQL compuesto
(compilado) en el que la sentencia CALL está anidada para los
procedimientos candidatos. Si no se encuentra ningún procedimiento
candidato, se devuelve un error (SQLSTATE 42884). Si se encuentra un
procedimiento candidato, la resolución ha finalizado. Si hay varios
procedimientos candidatos, determine el que tenga el menor número de
parámetros y elimine los que tengan un mayor número de parámetros.
2. Si se invoca un procedimiento desde un objeto de módulo, busque
procedimientos candidatos dentro del módulo. Si se encuentran uno o más
procedimientos candidatos en el módulo de contexto, estos procedimientos
candidatos se incluyen con cualquier procedimiento candidato de los
esquemas en la vía de acceso de SQL (véase el siguiente elemento).
3. Buscar todos los procedimientos de esquema con un esquema en la vía de
acceso de SQL para los procedimientos candidatos. Si se encuentran uno o
más procedimientos candidatos en los esquemas de la vía de acceso de
SQL, estos procedimientos candidatos se incluyen con cualquier
procedimiento candidato del módulo de contexto (véase el elemento
anterior). Si permanece un solo procedimiento candidato, la resolución ha
finalizado. Si hay varios procedimientos candidatos, elija el procedimiento
del módulo de contexto si continúa siendo candidato; de lo contrario, elija
el procedimiento cuyo esquema aparezca antes en la vía de acceso de
SQL. Si todavía hay varios procedimientos candidatos, determine el que
tenga el menor número de parámetros y elimine los que tengan un mayor
número de parámetros.
Si no quedan procedimientos candidatos después del paso 3, se devuelve un
error (SQLSTATE 42884).
– Si el nombre del procedimiento está calificado, la resolución del
procedimiento se realiza siguiendo estos pasos:
1. Si se invoca el procedimiento desde una sentencia de SQL compuesto
(compilado) y existe un procedimiento declarado con el mismo nombre
donde el calificador coincide con la etiqueta de la sentencia de SQL
compuesto (compilado) del conjunto de sentencias de SQL compuesto
(compilado) en el que la sentencia CALL está anidada, busque esa
sentencia de SQL compuesto (compilado) con la etiqueta coincidente para
los procedimientos candidatos. Si no se encuentra ningún procedimiento
candidato, se devuelve un error (SQLSTATE 42884). Si se encuentra un
Sentencias 299
CALL
PROCA:
EXEC SQL CALL PROCB;
PROCB:
EXEC SQL DECLARE B1 CURSOR WITH RETURN TO CLIENT ...;
EXEC SQL DECLARE B2 CURSOR WITH RETURN TO CALLER ...;
EXEC SQL DECLARE B3 CURSOR FOR SELECT UDFA FROM T1;
UDFA:
EXEC SQL CALL PROCC;
PROCC:
EXEC SQL DECLARE C1 CURSOR WITH RETURN TO CLIENT ...;
EXEC SQL DECLARE C2 CURSOR WITH RETURN TO CALLER ...;
En el procedimiento PROCB:
Sentencias 301
CALL
Ejemplos
v Ejemplo 1: Un procedimiento Java se define en la base de datos utilizando la
sentencia siguiente:
CREATE PROCEDURE PARTS_ON_HAND (IN PARTNUM INTEGER,
OUT COST DECIMAL(7,2),
OUT QUANTITY INTEGER)
EXTERNAL NAME ’pieza!disponibles’
LANGUAGE JAVA
PARAMETER STYLE DB2GENERAL;
Una aplicación Java llama a este procedimiento utilizando el fragmento de
código siguiente:
...
CallableStatement stpCall ;
stpCall.setInt(1, hvPartnum);
stpCall.setBigDecimal(2, hvCost);
stpCall.setInt(3, hvQuantity);
stpCall.registerOutParameter( 2, Types.DECIMAL, 2 ) ;
stpCall.registerOutParameter( 3, Types.INTEGER ) ;
stpCall.execute() ;
hvCost = stpCall.getBigDecimal(2);
hvQuantity = stpCall.getInt(3);
...
Este fragmento de código de aplicación invocará el método Java onhand de la
clase parts, porque el nombre de procedimiento especificado en la sentencia
CALL se encuentra en la base de datos y tiene el nombre externo parts!onhand.
v Ejemplo 2: Existen seis procedimientos FOO, en cuatro esquemas distintos,
registrados de la forma siguiente (observe que no aparecen todas las palabras
clave necesarias):
CREATE PROCEDURE AUGUSTUS.FOO (INT) SPECIFIC FOO_1 ...
CREATE PROCEDURE AUGUSTUS.FOO (DOUBLE, DECIMAL(15, 3)) SPECIFIC FOO_2 ...
CREATE PROCEDURE JULIUS.FOO (INT) SPECIFIC FOO_3 ...
CREATE PROCEDURE JULIUS.FOO (INT, INT, INT) SPECIFIC FOO_4 ...
CREATE PROCEDURE CAESAR.FOO (INT, INT) SPECIFIC FOO_5 ...
CREATE PROCEDURE NERO.FOO (INT,INT) SPECIFIC FOO_6 ...
La referencia de procedimiento es la siguiente (donde I1 e I2 son valores
INTEGER):
CALL FOO(I1, I2)
Suponga que la aplicación que efectúa esta referencia tiene una vía de acceso de
SQL establecida como:
"JULIUS","AUGUSTUS","CAESAR"
De acuerdo con el algoritmo...
El procedimiento que tiene el nombre específico FOO_6 se elimina como
candidato, ya que el esquema "NERO" no se ha incluido en la vía de acceso de
SQL. FOO_1, FOO_3 y FOO_4 se eliminan como candidatos, pues tienen un
número incorrecto de parámetros. Se considera que los restantes candidatos son
correctos, tal como determina la vía de acceso de SQL. Observe que los tipos de
los argumentos y parámetros se pasan por alto. Los parámetros de FOO_5
coinciden exactamente con los argumentos de CALL, pero se ha elegido FOO_2
porque "AUGUSTUS" aparece antes que "CAESAR" en la vía de acceso de SQL.
v Ejemplo 3: Supongamos que existe el procedimiento siguiente.
z CREATE PROCEDURE update_order(
IN IN_POID BIGINT,
IN IN_CUSTID BIGINT DEFAULT GLOBAL_CUST_ID,
IN NEW_STATUS VARCHAR(10) DEFAULT NULL,
IN NEW_ORDERDATE DATE DEFAULT NULL,
IN NEW_COMMENTS VARCHAR(1000)DEFAULT NULL)...
Supongamos también que la variable global GLOBAL_CUST_ID está establecida en
el valor 1002. Llame al procedimiento para cambiar el estado del pedido 5000
del cliente 1002 a 'Shipped' (enviado). Deje el resto de los datos del pedido tal
como están, dejando que el resto de los argumentos tomen como valor por
omisión el valor nulo.
Sentencias 303
CALL
A partir de DB2 Versión 9.7 Fixpack 1, uno de los criterios para un parámetro de
procedimiento que no tiene un argumento correspondiente en la sentencia CALL
(especificado por posición o por nombre) consiste en que el parámetro se defina
con un valor por omisión. Por lo tanto, no se considera como candidata la
primera versión de p1.
CASE
La sentencia CASE selecciona una vía de ejecución de acuerdo con varias
condiciones. Esta sentencia no se debe confundir con la expresión CASE, que
permite seleccionar una expresión basándose en la evaluación de una o varias
condiciones.
Invocación
Autorización
Sintaxis
CASE cláusula-when-sentencia-case-búsqueda END CASE
cláusula-when-sentencia-case-simple
cláusula-when-sentencia-case-simple:
ELSE sentencia-procedimiento-SQL ;
cláusula-when-sentencia-case-búsqueda:
Sentencias 305
CASE
ELSE sentencia-procedimiento-SQL ;
Descripción
CASE
Empieza una sentencia-case.
cláusula-when-sentencia-case-simple
El valor de la expresión anterior a la primera palabra clave WHEN se
comprueba para determinar si es igual al valor de cada expresión que sigue a la
palabra clave WHEN. Si se cumple la condición de búsqueda, se ejecuta la
sentencia THEN. Si el resultado es desconocido o falso, el proceso continúa en
la siguiente condición de búsqueda. Si el resultado no coincide con ninguna de
las condiciones de búsqueda y existe una cláusula ELSE, se procesan las
sentencias de la cláusula ELSE.
cláusula-when-sentencia-case-búsqueda
Se evalúa la condición-búsqueda que sigue a la palabra clave WHEN. Si su
evaluación da un resultado verdadero, se procesan las sentencias de la cláusula
THEN asociada. Si su evaluación da un resultado falso o desconocido, se
evalúa la siguiente condición-búsqueda. Si ninguna condición-búsqueda devuelve
un resultado verdadero y existe una cláusula ELSE, se procesan las sentencias
de la cláusula ELSE.
sentencia-procedimiento-SQL
Especifica una sentencia que se debe invocar. Consulte sentencia-procedimiento-
SQL en la sentencia de “SQL compuesto (compilado)”.
END CASE
Finaliza una sentencia-case.
Notas
v Si ninguna de las condiciones especificadas en la cláusula WHEN devuelve un
resultado verdadero y no hay una cláusula ELSE especificada, se emite un error
durante la ejecución y se interrumpe la ejecución de la sentencia CASE
(SQLSTATE 20000).
v Asegúrese de que la sentencia CASE abarca todas las condiciones de ejecución
posibles.
Ejemplos
Sentencias 307
CLOSE
CLOSE
La sentencia CLOSE cierra un cursor. Si se ha creado una tabla de resultados
cuando se ha abierto el cursor, se ha destruido esa tabla.
Invocación
Autorización
Sintaxis
CLOSE nombre-cursor
nombre-variable-cursor WITH RELEASE
Descripción
nombre-cursor
Identifica el cursor que se va a cerrar. El nombre-cursor debe identificar un
cursor declarado tal como se explica en la sentencia DECLARE CURSOR.
Cuando se ejecuta la sentencia CLOSE, el cursor debe estar en el estado
abierto.
nombre-variable-cursor
Identifica el cursor que se va a cerrar. nombre-variable-cursor debe identificar
una variable de cursor. Cuando se ejecuta la sentencia CLOSE, el cursor
subyacente del nombre-variable-cursor debe estar en estado abierto (SQLSTATE
24501). Una sentencia CLOSE que utiliza un nombre-variable-cursor sólo se
puede utilizar en una sentencia de SQL compuesto (compilado).
WITH RELEASE
Se intenta liberar todos los bloqueos que se han mantenido para el cursor.
Tenga en cuenta que no se liberan necesariamente todos los bloqueos; se
pueden conservar bloqueos para otras operaciones o actividades.
Notas
v Al final de una unidad de trabajo, todos los cursores que pertenecen a un
proceso de aplicación y que se han declarado sin la opción WITH HOLD se
cierran de manera implícita.
v Un cursor subyacente de una variable de cursor está implícitamente cerrado
cuando se convierte en un cursor huérfano. Un cursor subyacente se convierte
en huérfano cuando deja de ser un cursor subyacente de cualquier variable de
cursor. Por ejemplo, esto puede ocurrir si todas las variables de cursor de un
cursor subyacente están en el mismo ámbito y todas salen del ámbito al mismo
tiempo.
v La cláusula WITH RELEASE no tiene ningún efecto al cerrar los cursores que se
han definido en las funciones o en los métodos. La cláusula tampoco tiene
ningún efecto al cerrar los cursores que se han definido en los procedimientos
llamados desde las funciones o los métodos.
v La cláusula WITH RELEASE no tiene ningún efecto para los cursores que están
funcionando bajo los niveles de aislamiento CS o UR. Cuando se especifica para
cursores que están funcionando bajo los niveles de aislamiento RS o RR, WITH
RELEASE termina algunas de las garantías de dichos niveles de aislamiento. De
forma específica, si se vuelve a abrir el cursor, un cursor RS puede experimentar
el fenómeno de 'lectura no repetible', y un cursor RR puede experimentar el
fenómeno de 'lectura no repetible' y el de 'fantasma'.
Si un cursor que originalmente era RR o RS se vuelve a abrir tras haberse
cerrado utilizando la cláusula WITH RELEASE, adquirirá nuevos bloqueos.
v Se aplican normas especiales a los cursores de un procedimiento que no se
hayan cerrado antes de volver al programa que efectúa la llamada.
v Mientras un cursor está abierto (es decir, todavía no se ha cerrado), los cambios
realizados en los valores de secuencia como resultado de las sentencias que
implican a ese cursor (por ejemplo FETCH o UPDATE utilizando el cursor que
incluye una expresión NEXT VALUE para una secuencia) no darán como
resultado una actualización en PREVIOUS VALUE para esas secuencias desde el
punto de vista del cursor. Los valores PREVIOUS VALUE de esas secuencias
afectadas se actualizarán cuando el cursor se cierre explícitamente con la
sentencia CLOSE. En un entorno de base de datos particionada, si un cursor se
cierra implícitamente mediante una operación de confirmar o retrotraer, puede
que no se actualice PREVIOUS VALUE con el valor generado más recientemente
para la secuencia.
Ejemplo
Se utiliza un cursor para buscar una fila cada vez en las variables del programa C
dnum, dname y mnum. Finalmente, se cierra el cursor. Si se vuelve a abrir el cursor, se
sitúa de nuevo al principio de las filas en las que se debe buscar.
EXEC SQL DECLARE C1 CURSOR FOR
SELECT DEPTNO, DEPTNAME, MGRNO
FROM TDEPT
WHERE ADMRDEPT = ’A00’;
while (SQLCODE==0) { .
EXEC SQL FETCH C1 INTO :dnum, :dname, :mnum;
.
.
}
EXEC SQL CLOSE C1;
Sentencias 309
COMMENT
COMMENT
La sentencia COMMENT añade o sustituye comentarios en las descripciones del
catálogo de diversos objetos.
Invocación
Autorización
Sintaxis
COMMENT ON
objetos IS constante-serie
,
objetos:
designador-alias
AUDIT POLICY nombre-política
COLUMN nombre-tabla.nombre-columna
nombre-vista.nombre-columna
CONSTRAINT nombre-tabla.nombre-restricción
DATABASE PARTITION GROUP nombre-grupo-particiones-bd
designador-función
FUNCTION MAPPING nombre-correlación-función
HISTOGRAM TEMPLATE nombre-plantilla
(1)
INDEX nombre-índice
MASK nombre-máscara
MODULE nombre-módulo
NICKNAME apodo
PACKAGE id-paquete
nombre-esquema. VERSION
id-versión
PERMISSION nombre-permiso
designador-procedimiento
ROLE nombre-rol
SCHEMA nombre-esquema
SECURITY LABEL nombre-etiqueta-seguridad
SECURITY LABEL COMPONENT nombre-componente-etiqueta-seguridad
SECURITY POLICY nombre-política-etiqueta
SEQUENCE nombre-secuencia
SERVER nombre-servidor
SERVER OPTION nombre-opción-servidor FOR servidor-remoto
designador-clase-servicio
STOGROUP nombre-grupo-almacenamiento
TABLE nombre-tabla
nombre-vista
TABLESPACE nombre-espacio-tablas
THRESHOLD nombre-umbral
TRIGGER nombre-activador
TRUSTED CONTEXT nombre-contexto
TYPE nombre-tipo
TYPE MAPPING nombre-correlación-tipos
USAGE LIST nombre-lista-uso
VARIABLE nombre-variable
WORK ACTION SET nombre-conjunto-acciones-trabajo
WORK CLASS SET nombre-conjunto-clases-trabajo
WORKLOAD nombre-carga-trabajo
WRAPPER nombre-derivador
XSROBJECT nombre-objetoxsr
designador-alias:
FOR TABLE
ALIAS nombre-alias
PUBLIC FOR MODULE
FOR SEQUENCE
designador-función:
FUNCTION nombre-función
( )
,
tipo-datos
SPECIFIC FUNCTION nombre-específico
Sentencias 311
COMMENT
designador-procedimiento:
PROCEDURE nombre-procedimiento
( )
,
tipo-datos
SPECIFIC PROCEDURE nombre-específico
servidor-remoto:
SERVER nombre-servidor
SERVER TYPE tipo-servidor
VERSION versión-servidor
WRAPPER nombre-derivador
versión-servidor:
versión
. release
. mod
constante-serie-versión
designador-clase-servicio:
Notas:
1 Nombre-índice puede ser el nombre de un índice o una especificación de
índice.
Descripción
designador-alias
ALIAS nombre-alias
Indica un comentario que se añadirá o sustituirá para un alias. El
nombre-alias debe identificar un alias que exista en el servidor actual
(SQLSTATE 42704).
Para TABLE, FOR MODULE o FOR SEQUENCE
Especifica el tipo de objeto del alias.
FOR TABLE
El alias es para una tabla, vista o apodo. El comentario sustituye el
valor de la columna REMARKS de la vista de catálogo
SYSCAT.TABLES para la fila que describe el alias.
FOR MODULE
El alias es para un módulo. El comentario sustituye el valor de la
columna REMARKS de la vista de catálogo SYSCAT.MODULES
para la fila que describe el alias.
FOR SEQUENCE
El alias es para una secuencia. El comentario sustituye el valor de
la columna REMARKS de la vista de catálogo
SYSCAT.SEQUENCES para la fila que describe el alias.
Sentencias 313
COMMENT
INDEX nombre-índice
Indica que se añadirá o sustituirá un comentario para un índice o
especificación de índice. El nombre-índice debe identificar un índice diferenciado
o una especificación de índice que exista en el servidor actual (SQLSTATE
42704). El comentario sustituye el valor de la columna REMARKS de la vista
de catálogo SYSCAT.INDEXES correspondiente a la fila que describe el índice o
especificación de índice.
MASK nombre-máscara
Identifica la máscara de columna a la que se aplica el comentario.
nombre-máscara debe identificar una máscara de columna que exista en el
servidor actual (SQLSTATE 42704). El comentario se encuentra en la columna
REMARKS de la tabla de catálogo SYSCAT.CONTROLS para la fila que
describe la máscara.
MODULE nombre-módulo
Indica que se añadirá un comentario o se sustituirá para un módulo. El
nombre-módulo debe identificar un módulo que exista en el servidor actual
(SQLSTATE 42704). El comentario sustituye al valor de la columna REMARKS
de la vista de catálogo SYSCAT.MODULES para la fila que describe el módulo.
NICKNAME apodo
Indica que se añadirá o sustituirá un comentario para un apodo. El apodo debe
ser un apodo que exista en el servidor actual (SQLSTATE 42704). El comentario
sustituye el valor de la columna REMARKS de la vista de catálogo
SYSCAT.TABLES correspondiente a la fila que describe el apodo.
PACKAGE nombre-esquema.id-paquete
Indica que se añadirá o se sustituirá un comentario para un paquete. Si no se
ha especificado un nombre de esquema, el esquema por omisión calificará
implícitamente el ID de paquete. El nombre de esquema y el ID de paquete,
junto con el ID de versión especificado de forma implícita o explícita, deben
identificar un paquete que exista en el servidor actual (SQLSTATE 42704). El
comentario sustituye el valor para la columna REMARKS de la vista de
catálogo SYSCAT.PACKAGES para la fila que describe el paquete.
VERSION id-versión
Identifica en qué versión del paquete va a realizarse el comentario. Si no se
especifica un valor, la versión tomará por omisión una serie de caracteres
vacía. Si existen varios paquetes con el mismo nombre de paquete pero con
distintas versiones, sólo podrá comentarse una versión del paquete en una
invocación de la sentencia COMMENT. Delimite el identificador de versión
con comillas dobles cuando:
v Se genera mediante la opción del precompilador VERSION(AUTO)
v Comienza con un dígito
v Contiene minúsculas o mayúsculas y minúsculas
Si la sentencia se invoca desde el indicador de mandatos del sistema
operativo, preceda cada delimitador de dobles comillas con una barra
inclinada invertida para asegurar que el sistema operativo no divide los
delimitadores.
PERMISSION nombre-permiso
Identifica el permiso de fila al que se aplica el comentario. nombre-permiso debe
identificar un permiso de fila que existe en el servidor actual (SQLSTATE
42704, SQLCODE -204). El comentario se encuentra en la columna REMARKS
de la tabla de catálogo SYSCAT.CONTROLS para la fila que describe el
permiso.
designador-procedimiento
Indica que se añadirá o sustituirá un comentario para un procedimiento. Para
obtener más información, consulte el apartado “Designadores de función,
método y procedimiento” en la página 22.
No es posible comentar un procedimiento que está en el esquema SYSIBM,
SYSIBMADM, SYSFUN o SYSPROC (SQLSTATE 42832).
El comentario sustituye al valor de la columna REMARKS de la vista de
catálogo SYSCAT.ROUTINES de la fila que describe al procedimiento.
ROLE nombre-rol
Indica que se añadirá o sustituirá un comentario para el rol. El nombre-rol debe
identificar un rol que exista en el servidor actual (SQLSTATE 42704). El
comentario sustituye el valor de la columna REMARKS de la vista de catálogo
SYSCAT.ROLES para la fila que describe el rol.
SCHEMA nombre-esquema
Indica que se añadirá o sustituirá un comentario para un esquema. El
nombre-esquema debe identificar un esquema que exista en el servidor actual
(SQLSTATE 42704). El comentario sustituye el valor de la columna REMARKS
de la vista de catálogo SYSCAT.SCHEMATA para la fila que describe el
esquema.
SECURITY LABEL nombre-etiqueta-seguridad
Indica que se añadirá o sustituirá un comentario para la etiqueta de seguridad
denominada nombre-etiqueta-seguridad. Se debe calificar el nombre con una
política de seguridad y debe identificar una etiqueta de seguridad que exista
en el servidor actual (SQLSTATE 42704). El comentario sustituye el valor para
la columna REMARKS de la vista de catálogo SYSCAT.SECURITYLABELS para
la fila que describe la etiqueta de seguridad.
SECURITY LABEL COMPONENT nombre-componente-etiqueta
Indica que se añadirá o sustituirá un comentario para el componente de
etiqueta de seguridad denominado nombre-componente-etiqueta. El
nombre-componente-etiqueta debe identificar un componente de etiqueta de
seguridad que exista en el servidor actual (SQLSTATE 42704). El comentario
sustituye el valor para la columna REMARKS de la vista de catálogo
SYSCAT.SECURITYLABELCOMPONENTS para la fila que describe el
componente de etiqueta de seguridad.
SECURITY POLICY nombre-política-seguridad
Indica que se añadirá o sustituirá un comentario para la política de seguridad
denominada nombre-política-seguridad. El nombre-política-seguridad debe
identificar una política de seguridad que exista en el servidor actual
(SQLSTATE 42704). El componente sustituye el valor para la columna
REMARKS de la vista de catálogo SYSCAT.SECURITYPOLICIES para la fila
que describe la política de seguridad.
SEQUENCE nombre-secuencia
Indica que se añadirá o sustituirá un comentario para una secuencia. El
nombre-secuencia debe identificar una secuencia que exista en el servidor actual
(SQLSTATE 42704). El comentario sustituye al valor de la columna REMARKS
de la vista de catálogo SYSCAT.SEQUENCES para la fila que describe la
secuencia.
SERVER nombre-servidor
Indica que se añadirá o sustituirá un comentario para una fuente de datos. El
nombre-servidor debe identificar una fuente de datos que exista en el servidor
Sentencias 315
COMMENT
Sentencias 317
COMMENT
Notas
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con las versiones anteriores de los productos
DB2 y con otros productos de base de datos. Estas alternativas no son estándar y
no deberían utilizarse.
– NODEGROUP puede especificarse en lugar de DATABASE PARTITION
GROUP
– DISTINCT TYPE nombre-tipo puede especificarse en vez de TYPE nombre-tipo
– DATA TYPE nombre-tipo puede especificarse en vez de TYPE nombre-tipo
– SYNONYM puede especificarse en lugar de ALIAS
Ejemplos
v Ejemplo 1: Añada un comentario para la tabla EMPLOYEE.
COMMENT ON TABLE EMPLOYEE
IS ’Refleja la reorganización del primer trimestre’
v Ejemplo 2: Añada un comentario para la vista EMP_VIEW1.
COMMENT ON TABLE EMP_VIEW1
IS ’Vista de la tabla EMPLOYEE sin la información de salarios’
v Ejemplo 3: Añada un comentario para la columna EDLEVEL de la tabla
EMPLOYEE.
COMMENT ON COLUMN EMPLOYEE.EDLEVEL
IS ’curso más alto aprobado en la escuela’
v Ejemplo 4: Añada comentarios para dos columnas diferentes de la tabla
EMPLOYEE.
COMMENT ON EMPLOYEE
(WORKDEPT IS ’vea los nombres en la tabla DEPARTMENT’,
EDLEVEL IS ’curso más alto aprobado en la escuela’ )
v Ejemplo 5: Pellow desea realizar un comentario sobre la función CENTRE, que
ha creado en su esquema PELLOW, utilizando la signatura para identificar la
función específica que se debe comentar.
COMMENT ON FUNCTION CENTRE (INT,FLOAT)
IS ’func CENTRE de Frank, utiliza método Chebychev’
Sentencias 319
COMMENT
COMMIT
La sentencia COMMIT termina una unidad de trabajo y confirma los cambios de la
base de datos que ha realizado esa unidad de trabajo.
Invocación
Autorización
No se necesita.
Sintaxis
WORK
COMMIT
Descripción
Sentencias 321
COMMIT
Notas
v Se recomienda encarecidamente que cada proceso de aplicación finalice
explícitamente su unidad de trabajo antes de terminar. Si el programa de
aplicación finaliza normalmente sin una sentencia COMMIT ni ROLLBACK
entonces el gestor de bases de datos intenta una confirmación o retrotracción
según el entorno de aplicación.
v Para obtener información acerca del efecto de COMMIT en las sentencias de
SQL dinámico colocadas en la antememoria, consulte la sección “EXECUTE”.
v Para obtener información acerca de los posibles efectos de COMMIT en las
tablas temporales creadas, consulte la sección “CREATE GLOBAL TEMPORARY
TABLE”.
v Para obtener información acerca de los posibles efectos de COMMIT en las
tablas temporales declaradas, consulte la sección “DECLARE GLOBAL
TEMPORARY TABLE”.
v Las sentencias de SQL dinámico siguientes pueden estar activas durante la
operación COMMIT:
– Cursor WITH HOLD abierto
– Sentencia COMMIT
– Sentencias CALL en las que se ha ejecutado la sentencia COMMIT
Ejemplo
SQL compuesto
Una sentencia de SQL compuesto es una secuencia de sentencias de SQL
individuales especificada entre las palabras clave BEGIN y END.
Sentencias 323
SQL compuesto (en línea)
Invocación
Autorización
Sintaxis
BEGIN ATOMIC
(1)
etiqueta:
,
declaración-variable-SQL ; sentencia-SQL ;
declaración-condición
END
etiqueta
declaración-variable-SQL:
,
DEFAULT NULL
DECLARE nombre-variable-SQL tipo-datos
DEFAULT constante
declaración-condición:
VALUE
SQLSTATE
constante-serie
sentencia-SQL:
CALL
FOR
selección completa
,
WITH expresión-tabla-común
GET DIAGNOSTICS
IF
INSERT
ITERATE
LEAVE
MERGE
RETURN
supresión-búsqueda
actualización-búsqueda
SET Variable
SIGNAL
WHILE
Notas:
1 Sólo se puede especificar una etiqueta cuando la sentencia está en una
definición de función, método o activador.
Descripción
etiqueta
Define la etiqueta del bloque de programa. Si se especifica la etiqueta inicial, se
puede utilizar para calificar variables de SQL declaradas en la sentencia de
SQL compuesto (en línea) y también se puede especificar en una sentencia
LEAVE. Si se especifica una etiqueta final, ésta deberá ser igual que la etiqueta
inicial.
ATOMIC
ATOMIC indica que, si se produce un error en la sentencia compuesta, se
retrotraerán todas las sentencias de SQL de la sentencia compuesta y no se
procesarán las restantes sentencias de SQL de la sentencia.
Si se especifica la palabra clave ATOMIC en una función de SQL de un módulo
o un procedimiento de SQL, la sentencia compuesta se procesa como si se
tratara de una sentencia de SQL compuesto (compilado).
sentencia-SQL
Especifica que se ejecute una sentencia de SQL en la sentencia de SQL
compuesto (en línea).
declaración-variable-SQL
Declara una variable que es local respecto a la sentencia de SQL compuesto (en
línea).
nombre-variable-SQL
Define el nombre de una variable local. Las bases de datos DB2 convierten
todos los nombres de variables de SQL a mayúsculas. El nombre no puede
ser igual a:
v Otra variable de SQL de la sentencia compuesta
v Un nombre de parámetro
Sentencias 325
SQL compuesto (en línea)
Notas
v Las sentencias de SQL compuesto (en línea) se compilan como una única
sentencia. Esta sentencia es eficaz en scripts breves que supongan una lógica
mínima de flujo de control, pero un flujo importante de datos. En el caso de
construcciones más grandes con requisitos de manejo de condiciones o flujo de
control anidado, es preferible utilizar la sentencia de SQL compuesto
(compilada) o un procedimiento SQL.
v Un procedimiento llamado dentro de una sentencia compuesta no debe emitir
una sentencia COMMIT ni ROLLBACK (SQLSTATE 42985).
v Restricciones de acceso a las tablas: si un procedimiento se ha definido como
READS SQL DATA o MODIFIES SQL DATA, ninguna sentencia del
procedimiento puede acceder a una tabla que la sentencia compuesta que ha
invocado el procedimiento está modificando (SQLSTATE 57053). Si el
procedimiento se ha definido como MODIFIES SQL DATA, ninguna sentencia
del procedimiento puede modificar una tabla que la sentencia compuesta que ha
invocado el procedimiento esté leyendo o modificando (SQLSTATE 57053).
Ejemplo
El ejemplo presenta tres tablas. La tabla TARGET contiene los datos limpiados. La
tabla EXCEPT almacena las filas que no pueden limpiarse (excepciones) y la tabla
SOURCE contiene los datos sin procesar que han de limpiarse.
Para clasificar y modificar los datos se utiliza una función de SQL simple
denominada DISCRETIZE. Ésta devuelve el valor nulo para todos los datos
incorrectos. La sentencia de SQL compuesto (en línea) limpia entonces los datos.
Recorre todas las filas de la tabla SOURCE en un bucle-FOR y determina si la fila
actual se inserta en la tabla TARGET o la tabla EXCEPT, en función del resultado
de la función DISCRETIZE. Con esta técnica es posible utilizar mecanismos más
elaborados (limpieza en varias etapas).
Esto crea una tabla denominada TARGET para contener los datos que se han
limpiado.
Esto crea una tabla denominada EXCEPT para contener las excepciones.
Sentencias 327
SQL compuesto (en línea)
Esto crea una tabla denominada SOURCE para contener los datos que van a
limpiarse.
Invoque la función:
BEGIN ATOMIC
FOR ROW AS
SELECT PK, C1, DISCRETIZE(C1) AS D FROM SOURCE
DO
IF ROW.D IS NULL THEN
INSERT INTO EXCEPT VALUES(ROW.PK, ROW.C1);
ELSE
INSERT INTO TARGET VALUES(ROW.PK, ROW.D);
END IF;
END FOR;
END
Invocación
Autorización
Sintaxis
BEGIN COMPOUND ATOMIC STATIC
NOT ATOMIC
STOP AFTER FIRST variable-lenguaje-principal STATEMENTS
END COMPOUND
sentencia-sql ;
Descripción
ATOMIC
Especifica que, si falla alguna de las subsentencias de la sentencia de SQL
compuesto (incorporado), se deshacen todos los cambios efectuados en la base
de datos por cualquiera de las subsentencias, incluidos los cambios realizados
por subsentencias satisfactorias.
NOT ATOMIC
Especifica que, sin tener en cuenta si falla alguna subsentencia, la sentencia de
SQL compuesto (incorporado) no deshará ningún cambio efectuado en la base
de datos por las otras subsentencias.
STATIC
Especifica que las variables de entrada para todas las subsentencias conservan
su valor original. Por ejemplo, si
SELECT ... INTO :abc ...
va seguido de:
UPDATE T1 SET C1 = 5 WHERE C2 = :abc
Sentencias 329
SQL compuesto (incorporado)
Normas
v DB2 Connect no da soporte a las sentencias SELECT que seleccionan columnas
LOB en un bloque SQL compuesto.
v No está permitido ningún código de lenguaje principal en una sentencia de SQL
compuesto (incorporado); es decir, no está permitido ningún código de lenguaje
principal entre las subsentencias que componen la sentencia de SQL compuesto
(incorporado).
v DB2 Connect sólo aceptará sentencias de SQL compuesto (incorporado) NOT
ATOMIC.
v Las sentencias de SQL compuesto (incorporado) no se pueden anidar.
Notas
v Se devuelve una SQLCA para toda la sentencia de SQL compuesto
(incorporado). La mayor parte de la información de dicha SQLCA refleja los
valores establecidos por el servidor de aplicaciones cuando ha procesado la
última subsentencia. Por ejemplo:
– Normalmente, SQLCODE y SQLSTATE son los que corresponden a la última
subsentencia (la excepción se describe en el punto siguiente).
– Si se ha devuelto el aviso 'no se han encontrado datos' (SQLSTATE 02000), se
da prioridad a ese aviso respecto a cualquier otro aviso con el fin de que
pueda realizarse una acción en la excepción WHENEVER NOT FOUND. (Esto
significa que los campos SQLCODE, SQLERRML, SQLERRMC y SQLERRP de
la SQLCA que finalmente se devuelve a la aplicación son los campos de la
subsentencia que ha activado el aviso 'no se han encontrado datos'. Si existe
más de un aviso indicando que no se han encontrado datos dentro de la
sentencia de SQL compuesto (incorporado), los campos de la última
subsentencia serán los campos que se devuelven).
– Los indicadores SQLWARN son una acumulación de los indicadores
establecidos para todas las subsentencias.
v Si se han producido uno o varios errores durante la ejecución del SQL
compuesto NOT ATOMIC y ninguno de éstos es grave, SQLERRMC contendrá
información acerca de estos errores, hasta un máximo de siete errores. El primer
símbolo de SQLERRMC indicará el número total de errores que se han
producido. Los símbolos restantes contendrán cada uno la posición ordinal y el
SQLSTATE de la subsentencia anómala dentro de la sentencia de SQL compuesto
(incorporado). El formato es una serie de caracteres en el formato:
nnnXsssccccc
en la que la subserie que empieza por X se repite hasta seis veces más y los
elementos de la serie están definidos de la manera siguiente.
nnn El número total de sentencias que han producido errores. (Si el número
excede de 999, el recuento volverá a empezar desde cero.) Este campo se
alinea a la izquierda y se rellena con blancos.
X El separador de símbolos X'FF'.
sss La posición ordinal de la sentencia que ha provocado el error. (Si el
número excede de 999, el recuento volverá a empezar desde cero.) Por
ejemplo, si la primera sentencia no se ha ejecutado satisfactoriamente,
este campo contendría el número uno alineado a la izquierda ('1 ').
ccccc El SQLSTATE del error.
v El segundo campo SQLERRD contiene el número de sentencias que han fallado
(han devuelto SQLCODE negativos).
v El tercer campo SQLERRD de la SQLCA es una acumulación del número de filas
afectadas por todas las subsentencias.
v El cuarto campo SQLERRD de la SQLCA es una cuenta del número de
subsentencias satisfactorias. Si, por ejemplo, falla la tercera subsentencia de una
sentencia de SQL compuesto (incorporado), el cuarto campo SQLERRD se
establecería en 2, lo que indicaría que dos subsentencias se habrían procesado de
manera satisfactoria antes de encontrar el error.
Sentencias 331
SQL compuesto (incorporado)
Ejemplos
v Ejemplo 1: En un programa C, emitir una sentencia de SQL compuesto
(incorporado) que actualice las tablas ACCOUNTS y TELLERS. Si hay un error
en cualquiera de las sentencias, deshaga el efecto de todas las sentencias
(ATOMIC). Si no hay errores, confirme la unidad de trabajo actual.
EXEC SQL BEGIN COMPOUND ATOMIC STATIC
UPDATE ACCOUNTS SET ABALANCE = ABALANCE + :delta
WHERE AID = :aid;
UPDATE TELLERS SET TBALANCE = TBALANCE + :delta
WHERE TID = :tid;
INSERT INTO TELLERS (TID, BID, TBALANCE) VALUES (:i, :branch_id, 0);
COMMIT;
END COMPOUND;
v Ejemplo 2: En un programa C, inserte 10 filas de datos en la base de datos
Suponga que la variable del lenguaje principal :nbr contiene el valor 10 y S1 es
una sentencia INSERT preparada. Además, suponga que todas las inserciones
deben intentarse sin tener en cuenta los errores (NOT ATOMIC).
EXEC SQL BEGIN COMPOUND NOT ATOMIC STATIC STOP AFTER FIRST :nbr STATEMENTS
EXECUTE S1 USING DESCRIPTOR :*sqlda0;
EXECUTE S1 USING DESCRIPTOR :*sqlda1;
EXECUTE S1 USING DESCRIPTOR :*sqlda2;
EXECUTE S1 USING DESCRIPTOR :*sqlda3;
EXECUTE S1 USING DESCRIPTOR :*sqlda4;
EXECUTE S1 USING DESCRIPTOR :*sqlda5;
EXECUTE S1 USING DESCRIPTOR :*sqlda6;
EXECUTE S1 USING DESCRIPTOR :*sqlda7;
EXECUTE S1 USING DESCRIPTOR :*sqlda8;
EXECUTE S1 USING DESCRIPTOR :*sqlda9;
END COMPOUND;
Invocación
Autorización
Sintaxis
NOT ATOMIC
BEGIN
etiqueta: ATOMIC
declaración-tipo ;
declaración-variable-SQL ;
declaración-condición
declaración-códigos-retorno
declaración-sentencia ; sentencia-DECLARE-CURSOR ;
declaración-procedimiento ;
declaración-manejador ;
Sentencias 333
SQL compuesto (compilado)
END
etiqueta
sentencia-procedimiento-SQL ;
declaración-tipo:
definición-tipo-matriz:
2147483647
tipo-datos1 ARRAY [ ]
constante-entero
tipo-datos-2
tipo-datos1:
tipo-incorporado
tipo-datos-anclados
nombre-tipo-fila
tipo-incorporado:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(34)
DECFLOAT
(16)
(1)
CHARACTER
CHAR (entero) FOR BIT DATA
VARCHAR (entero)
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
XML
BOOLEAN
CURSOR
tipo-datos-anclados:
Sentencias 335
SQL compuesto (compilado)
DATA TYPE TO
ANCHOR nombre-variable
nombre-tabla.nombre-columna
OF
ROW nombre-tabla
nombre-vista
nombre-variable-cursor
tipo-datos-2:
INTEGER
INT
VARCHAR ( entero )
CHARACTER VARYING
CHAR
tipo-datos-no-fila-anclados
tipo-datos-no-fila-anclados:
DATA TYPE TO
ANCHOR nombre-variable
nombre-tabla.nombre-columna
definición-tipo-fila:
tipo3-datos:
tipo-incorporado
tipo-datos-no-fila-anclados
nombre-tipo-diferenciado
tipo-datos-fila-anclados:
DATA TYPE TO
ANCHOR nombre-variable
OF
ROW nombre-tabla
nombre-vista
nombre-variable-cursor
declaración-variable-SQL:
DECLARE nombre-variable-SQL
tipo4-datos:
tipo-incorporado
tipo-datos-anclados
(2)
nombre-tipo-matriz
nombre-tipo-cursor
nombre-tipo-diferenciado
(3)
nombre-tipo-fila
constructor-valor-cursor:
declaración-parámetro-cursor:
nombre-parámetro tipo-datos5
tipo-datos5:
tipo-incorporado
tipo-datos-no-fila-anclados
nombre-tipo-diferenciado
posibilidad de mantenimiento:
WITHOUT HOLD
WITH HOLD
declaración-condición:
declaración-sentencia:
Sentencias 337
SQL compuesto (compilado)
declaración-códigos-retorno:
DEFAULT '00000'
DECLARE SQLSTATE CHARACTER(5)
CHAR(5) DEFAULT constante-serie
DEFAULT 0
SQLCODE INTEGER
INT DEFAULT constante-entera
declaración-procedimiento:
( ) cuerpo-procedimiento-SQL
,
declaración-parámetro
cuerpo-procedimiento-SQL:
sentencia-procedimiento-SQL
declaración-manejador-condiciones:
valor-condición-específica sentencia-procedimiento-SQL
valor-condición-general
valor-condición-específica:
,
VALUE
SQLSTATE constante-serie
nombre-condición
valor-condición-general:
SQLEXCEPTION
SQLWARNING
NOT FOUND
sentencia-procedimiento-SQL:
sentencia-SQL
etiqueta:
Notas:
1 Si tipo-datos4 especifica un tipo incorporado CURSOR o un nombre-tipo-cursor,
solamente pueden especificarse NULL o constructor-valor-cursor. Sólo puede
especificarse de forma explícita DEFAULT NULL para nombre-tipo-matriz o
nombre-tipo-fila.
2 Sólo puede especificarse de forma explícita DEFAULT NULL para
nombre-tipo-matriz.
3 Sólo puede especificarse de forma explícita DEFAULT NULL para
nombre-tipo-fila.
4 El nombre-sentencia no se puede especificar si se ha especificado la
declaración-parámetro-cursor.
Descripción
etiqueta
Define la etiqueta del bloque de programa. Si se especifica la etiqueta inicial, se
puede utilizar para calificar variables de SQL declaradas en la sentencia
compuesta y también se puede especificar en una sentencia LEAVE. Si se
especifica una etiqueta final, ésta deberá ser igual que la etiqueta inicial.
ATOMIC o NOT ATOMIC
ATOMIC indica que si se produce una condición de excepción no manejada en
la sentencia compuesta, se retrotraerán todas las sentencias de SQL de la
sentencia compuesta.
NOT ATOMIC indica que una condición de excepción no manejada dentro de
la sentencia compuesta no da lugar a la retrotracción de la sentencia
compuesta.
Si se especifica la palabra clave ATOMIC en una sentencia compuesta
preparada dinámicamente o una función de SQL que no está en un módulo, la
sentencia compuesta se procesa como si se tratara de una sentencia de SQL
compuesto (en línea).
declaración-tipo
Declara un tipo de datos definido por el usuario que es local respecto a la
sentencia compuesta.
nombre-tipo
Especifica el nombre de un tipo de datos definido por el usuario local.
El nombre no puede ser igual que cualquier otro tipo declarado dentro
de la sentencia compuesta actual (SQLSTATE 42734). El nombre-tipo sin
calificar tiene las mismas restricciones que las descritas en cualquier
sentencia CREATE TYPE (SQLSTATE 42939).
definición-tipo-matriz
Especifica los atributos de un tipo de datos de matriz que se deben
asociar con el nombre-tipo. Consulte “CREATE TYPE (matriz)” para
obtener una descripción de los elementos de sintaxis. El nombre-tipo-fila
puede hacer referencia a un tipo de fila declarado que se haya
declarado previamente y que esté en el ámbito de la sentencia de SQL
compuesto (compilado) actual. El nombre-variable especificado está en
una cláusula de tipo-datos-anclados puede hacer referencia a una
variable local en el ámbito de la sentencia de SQL compuesto
(compilado) actual.
definición-tipo-fila
Especifica los campos de un tipo de datos de fila que se deben asociar
Sentencias 339
SQL compuesto (compilado)
nombre-tabla.nombre-columna
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 el nombre-variable-SQL.
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 del
nombre-variable-SQL 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):
v Una variable de SQL o una variable global con un tipo de
datos de cursor de tipo firme.
v Una variable de SQL o una variable declarada localmente
con un tipo de datos de cursor de tipo no firme 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 es de un tipo
firme que utiliza un tipo de fila con nombre, el tipo de datos
de nombre-variable-SQL es un tipo de fila sin nombre.
nombre-tipo-matriz
Especifica el nombre de un tipo de matriz definido por el usuario. El
tipo de datos de matriz puede ser un tipo de datos declarado
localmente, un tipo de datos de esquema o un tipo de datos de
módulo.
nombre-tipo-cursor
Especifica el nombre de un tipo de cursor. El tipo de datos de cursor
puede ser un tipo de datos de esquema o un tipo de datos de módulo.
nombre-tipo-diferenciado
Especifica el nombre de un tipo diferenciado. El tipo de datos
diferenciado puede ser un tipo de datos de esquema o un tipo de datos
de módulo. La longitud, la precisión y la escala de la variable
declarada son, respectivamente, la longitud, la precisión y la escala del
tipo fuente del tipo diferenciado.
nombre-tipo-fila
Especifica el nombre de un tipo de fila definido por el usuario. El tipo
de datos de fila puede ser un tipo de datos declarado localmente, un
tipo de datos de esquema o un tipo de datos de módulo. Los campos
de la variable son los campos del tipo de fila.
DEFAULT o CONSTANT
Especifica un valor para la variable de SQL cuando se hace referencia a la
sentencia de SQL compuesto (compilado). Si no se especifica ninguna, el
valor por omisión para la variable de SQL es el valor nulo. Sólo puede
especificarse de forma explícita DEFAULT NULL si está
especificadonombre-tipo-matriz o nombre-tipo-fila.
Sentencias 341
SQL compuesto (compilado)
DEFAULT
Define el valor por omisión de la variable de SQL. La variable se
inicializa cuando se hace referencia a la sentencia de SQL compuesto
(compilado). El valor por omisión debe ser una asignación compatible
con el tipo de datos de la variable.
CONSTANT
Especifica que la variable de SQL tiene un valor fijo que no se puede
cambiar. Una variable de SQL que se defina mediante CONSTANT no
puede utilizarse como destino de una operación de asignación. El valor
fijo debe ser compatible con la asignación al tipo de datos de la
variable.
NULL
Especifica NULL como valor por omisión para la variable de SQL.
constante
Especifica una constante como valor por omisión para la variable de
SQL. Si tipo-datos4 especifica un tipo incorporado CURSOR o un
nombre-tipo-cursor, no puede especificarse la constante (SQLSTATE
42601).
constructor-valor-cursor
Un constructor-valor-cursor especifica la sentencia-select asociada con la
variable de SQL. La asignación de un constructor-valor-cursor a una
variable de cursor define el cursor subyacente de esa variable de
cursor.
(declaración-parámetro-cursor, ...)
Especifica los parámetros de entrada del cursor, incluido el nombre
y el tipo de datos de cada parámetro. Sólo se pueden especificar
parámetros de entrada con nombre si la sentencia-select también
está especificada en el constructor-valor-cursor (SQLSTATE 428HU).
nombre-parámetro
Asigna un nombre al parámetro de cursor que se debe utilizar
como variable de SQL dentro de la sentencia-select. El nombre
no puede ser igual que ningún otro nombre de parámetro del
cursor. Los nombres deben elegirse también evitando nombres
de columna que se puedan utilizar en la sentencia-select, ya que
los nombres de columna se resuelven antes que los nombres de
parámetro.
tipo-datos5
Especifica el tipo de datos del parámetro de cursor utilizado
dentro de una sentencia-select. No se pueden especificar tipos
estructurados ni tipos de referencia (SQLSTATE 429BB).
tipo-incorporado
Especifica un tipo de datos incorporado. Para obtener una
descripción más completa de cada tipo de datos
incorporado, consulte "CREATE TABLE". Los tipos
incorporados BOOLEAN y CURSOR no pueden
especificarse (SQLSTATE 429BB).
tipo-datos-no-fila-anclados
Identifica otro objeto que se utiliza para determinar el tipo
de datos del parámetro de cursor. El tipo de datos del
objeto de anclaje tiene las mismas limitaciones que se
aplican cuando se especifica el tipo de datos directamente.
Sentencias 343
SQL compuesto (compilado)
nombre-condición
Especifica el nombre de la condición. El nombre de la condición debe ser
exclusivo dentro de la sentencia compuesta en la que está declarada, salvo
en el caso de las declaraciones de las sentencias compuestas anidadas
dentro de dicha sentencia compuesta (SQLSTATE 42734). Sólo se puede
hacer referencia al nombre de una condición dentro de la sentencia
compuesta en la que está declarada, incluidas las sentencias compuestas
anidadas dentro de dicha sentencia compuesta (SQLSTATE 42737).
CONDITION FOR SQLSTATE VALUEconstante-serie
Especifica el SQLSTATE que está asociado a la condición. La constante de
serie debe especificarse como cinco caracteres entre comillas simples, y la
clase de SQLSTATE (los dos primeros caracteres) no deben ser '00'. Si esta
cláusula no se especifica, la condición no tendrá un valor SQLSTATE
asociado.
declaración-sentencia
Declara una lista de uno o más nombres que son locales en la sentencia
compuesta. Cada nombre en nombre-sentencia no debe ser el mismo que
cualquier otro nombre de sentencia declarado en la misma sentencia
compuesta.
declaración-códigos-retorno
Declara las variables especiales llamadas SQLSTATE y SQLCODE, que se
establecen automáticamente en el valor que se devuelve tras procesar una
sentencia de SQL. Las variables SQLSTATE y SQLCODE sólo se pueden
declarar en la sentencia compuesta más externa del cuerpo del procedimiento
de SQL cuando existen sentencias de SQL compuesto (compilado) anidadas,
por ejemplo, en un cuerpo de procedimiento de SQL. Estas variables sólo se
pueden declarar una vez para cada procedimiento de SQL.
sentencia-declare-cursor
Declara un cursor incorporado en el cuerpo del procedimiento. Las variables
de los tipos de datos de cursor definidos por el usuario se declaran con las
sentencias declaración-variable-SQL.
Todos los cursores declarados han de tener un nombre exclusivo dentro de la
sentencia compuesta en la que están declarados, salvo en el caso de las
declaraciones de las sentencias compuestas anidadas dentro de dicha sentencia
compuesta (SQLSTATE 42734). Sólo se puede hacer referencia al cursor dentro
de la sentencia compuesta en la que está declarado, incluidas las sentencias
compuestas anidadas dentro de dicha sentencia compuesta (SQLSTATE 34000).
Utilice una sentencia OPEN para abrir el cursor, y una sentencia FETCH para
leer filas utilizando el cursor. Para que el procedimiento SQL devuelva
conjuntos de resultados a la aplicación cliente, el cursor se debe declarar
utilizando la cláusula WITH RETURN. El ejemplo siguiente devuelve un
conjunto de resultados a la aplicación cliente:
CREATE PROCEDURE RESULT_SET()
LANGUAGE SQL
RESULT SETS 1
BEGIN
DECLARE C1 CURSOR WITH RETURN FOR
SELECT id, name, dept, job
FROM staff;
OPEN C1;
END
Nota: Para procesar conjuntos de resultados debe grabar la aplicación cliente
utilizando una de las interfaces de programación de aplicaciones siguientes:
DB2 Call Level Interface (DB2 Call Level Interface), Open Database
Connectivity (ODBC), Java Database Connectivity (JDBC) o SQL incorporado
para Java (SQLJ).
Para obtener más información acerca de la declaración de un cursor, consulte
“DECLARE CURSOR”.
declaración-procedimiento
Declara un procedimiento que es local respecto a la sentencia compuesta. La
definición de un procedimiento local no incluye la especificación de ninguna
de las opciones posibles en una sentencia “CREATE PROCEDURE (SQL)”. Las
opciones tienen los mismos valores por omisión que tendrían para una
sentencia “CREATE PROCEDURE (SQL)” con la excepción de MODIFIES SQL
DATA. El nivel de acceso a datos para el procedimiento queda determinado de
forma automática en el nivel mínimo necesario para procesar el cuerpo del
procedimiento de SQL.
nombre-procedimiento
Define los nombres de un procedimiento local. El nombre debe
especificarse sin ninguna calificación (SQLSTATE 42601). La signatura de
procedimiento, que consta del nombre-procedimiento y el número de
parámetros declarados, debe ser exclusiva dentro de la sentencia
compuesta actual. Las sentencias compuestas externas en las que está
anidada la sentencia compuesta actual no pueden contener un
procedimiento con el mismo nombre.
declaración-parámetro
Especifica los parámetros del procedimiento local. Consulte “CREATE
PROCEDURE (SQL)” para obtener una descripción de los elementos de
sintaxis. El tipo de datos de parámetro puede ser un tipo de datos
declarado localmente en el ámbito de la sentencia compuesta actual.
cuerpo-procedimiento-SQL
Especifica la sentencia de SQL que forma el cuerpo del procedimiento de
SQL. Los nombres a los que se hace referencia en el cuerpo-procedimiento-
SQL pueden hacer referencia a objetos declarados (como variables
declaradas, tipos de datos y procedimientos) que se han declarado
anteriormente y que están en el ámbito de la sentencia compuesta en la
que se declara el procedimiento local.
declaración-manejador
Especifica un manejador y un conjunto de una o varias sentencias-procedimiento-
SQL que debe ejecutarse cuando se produzca una condición de excepción o de
terminación en la sentencia compuesta. sentencia-procedimiento-SQL es una
sentencia que se ejecuta cuando el manejador de condiciones recibe el control.
Se dice que un manejador está activo mientras dura la ejecución del conjunto
de sentencias-procedimiento-SQL que sigue al conjunto de declaraciones-manejador
dentro de la sentencia compuesta en la que se ha declarado el manejador,
incluidas las sentencias compuestas anidadas.
Existen tres tipos de manejadores de condiciones:
CONTINUE
Tras la invocación satisfactoria del manejador de condiciones, el control
pasa a la sentencia de SQL que sigue a continuación de la sentencia que
provocó la condición de excepción. Si el error que causó la excepción es
una sentencia FOR, IF, CASE, WHILE o REPEAT (pero no una sentencia de
Sentencias 345
SQL compuesto (compilado)
Normas
v Las sentencias compuestas definidas como ATOMIC no se pueden anidar.
v Las normas siguientes son aplicables a la declaración de un manejador de
condiciones:
Sentencias 347
SQL compuesto (compilado)
Notas
v Asignaciones de XML: la asignación a parámetros y variables de tipo de datos
XML se realiza por referencia.
Los parámetros del tipo de datos XML de una sentencia CALL se pasan a un
procedimiento de SQL por referencia. Cuando los valores XML se pasan por
referencia, los árboles de nodos de entrada se utilizan directamente desde el
argumento XML. Este uso directo mantiene todas las propiedades, incluyendo el
orden de documentos, las identidades de nodo originales y todas las
propiedades padre.
Ejemplos
v Ejemplo 1: crear un procedimiento con una sentencia de SQL compuesto
(compilado) que lleva a cabo las acciones siguientes:
1. Declara variables de SQL
2. Declara un cursor para que proporcione el salario de los empleados de un
departamento determinado de acuerdo con un parámetro IN. En la sentencia
SELECT, convierte de DECIMAL a DOUBLE el tipo de datos de la columna
salary (salario).
3. Declara un manejador de condiciones EXIT para la condición NOT FOUND
(fin de archivo), que asigna el valor '6666' al parámetro de salida
medianSalary (salario medio)
4. Selecciona el número de empleados del departamento especificado y lo
coloca en la variable de SQL numRecords
5. Lee filas desde el cursor en un bucle WHILE hasta llegar al 50% + 1 de los
empleados
6. Devuelve el salario medio
CREATE PROCEDURE DEPT_MEDIAN
(IN deptNumber SMALLINT, OUT medianSalary DOUBLE)
LANGUAGE SQL
BEGIN
DECLARE v_numRecords INTEGER DEFAULT 1;
DECLARE v_counter INTEGER DEFAULT 0;
DECLARE c1 CURSOR FOR
SELECT CAST(salary AS DOUBLE) FROM staff
WHERE DEPT = deptNumber
ORDER BY salary;
DECLARE EXIT HANDLER FOR NOT FOUND
SET medianSalary = 6666;
-- inicializar parámetro de salida
SET medianSalary = 0;
SELECT COUNT(*) INTO v_numRecords FROM staff
WHERE DEPT = deptNumber;
OPEN c1;
WHILE v_counter < (v_numRecords / 2 + 1) DO
FETCH c1 INTO medianSalary;
SET v_counter = v_counter + 1;
END WHILE;
CLOSE c1;
END
v Ejemplo 2: en el ejemplo siguiente se muestra el flujo de ejecución en un caso
hipotético donde se ha activado un manejador UNDO desde otra condición
como resultado de RESIGNAL:
CREATE PROCEDURE A()
LANGUAGE SQL
CS1: BEGIN ATOMIC
DECLARE C CONDITION FOR SQLSTATE ’12345’;
DECLARE D CONDITION FOR SQLSTATE ’23456’;
Sentencias 349
SQL compuesto (compilado)
-- ...
-- ...
CONNECT (tipo 1)
La sentencia CONNECT (Tipo 1) conecta un proceso de aplicación con el servidor
de aplicaciones identificado según las normas para una unidad de trabajo remota.
Invocación
Autorización
El proceso de CONNECT pasa por dos niveles de control de acceso. Ambos niveles
deben cumplirse para que la conexión sea correcta.
Sintaxis
CONNECT
Sentencias 351
CONNECT (tipo 1)
TO nombre-servidor
variable-lenguaje-principal bloque-bloqueo autorización
RESET
(1)
autorización
autorización:
contraseña
variable-lenguaje-principal
NEW contraseña CONFIRM contraseña
variable-lenguaje-principal
bloque-bloqueo:
IN SHARE MODE
IN EXCLUSIVE MODE
ON SINGLE MEMBER
Notas:
1 Este formato sólo es válido si se ha habilitado la conexión implícita.
Descripción
CONNECT (sin ningún operando)
Devuelve información acerca del servidor actual. La información se devuelve
en el campo SQLERRP de la SQLCA, tal como se describe en “Conexión
satisfactoria”.
Si existe un estado de conexión, el ID de autorización y el alias de base de
datos se colocan en el campo SQLERRMC de la SQLCA. Si el ID de
autorización es mayor que 8 bytes, se truncará a 8 bytes, y el truncamiento se
indicará en los campos SQLWARN0 y SQLWARN1 de la SQLCA, mediante 'W'
y 'A', respectivamente.
Si no existe ninguna conexión y es posible la conexión implícita, se intenta
efectuar una conexión implícita. Si no hay una conexión implícita disponible,
este intento produce un error (no hay ninguna conexión existente). Si no hay
conexión, el campo SQLERRMC está en blanco.
El código de territorio y la página de códigos del servidor de aplicaciones se
encuentran en el campo SQLERRMC (ya que están con una sentencia
CONNECT correcta).
Esta forma de CONNECT:
v No necesita que el proceso de aplicación esté en estado conectable.
v Si está conectado, no cambia el estado de conexión.
v Si está desconectado y está disponible la conexión implícita, se realiza una
conexión con el servidor de aplicaciones por omisión. En este caso, el código
Sentencias 353
CONNECT (tipo 1)
Sentencias 355
CONNECT (tipo 1)
USING contraseña/variable-lenguaje-principal
Identifica la contraseña del ID de usuario que intenta conectarse con el
servidor de aplicaciones. La contraseña o la variable-lenguaje-principal pueden
tener una longitud de hasta 14 bytes. Si se especifica una variable del lenguaje
principal, debe ser una variable de serie de caracteres con un atributo de
longitud no superior a 14 y no debe incluir una variable de indicador.
NEW contraseña/variable-lenguaje-principal CONFIRM contraseña
Identifica la nueva contraseña que debe asignarse al ID de usuario que se
identifica por medio de la opción USER. La contraseña o la
variable-lenguaje-principal pueden tener una longitud de hasta 14 bytes. Si se
especifica una variable del lenguaje principal, debe ser una variable de serie de
caracteres con un atributo de longitud no superior a 14 y no debe incluir una
variable de indicador. El sistema en que se cambiará la contraseña depende de
cómo esté configurada la autentificación de usuario. Se pueden asignar nuevas
contraseñas utilizando esta cláusula en los servidores siguientes en los releases
indicados (y posteriores): DB2 Universal Database Versión 8 en sistemas
operativos AIX y Windows, DB2 Versión 9.1 Fixpack 3 o versiones posteriores
en sistemas operativos Linux, DB2 para z/OS Versión 7, DB2 para i5/OS V6R1.
A fin de dar soporte al cambio de contraseñas para los productos de base de
datos DB2 en Linux, la instancia de DB2 debe estar configurada para utilizar
los conectores de seguridad IBMOSchgpwdclient e IBMOSchgpwdserver.
Notas
v Es conveniente que la primera sentencia de SQL que ejecute un proceso de la
aplicación sea la sentencia CONNECT.
v Si se emite una sentencia CONNECT al servidor de aplicaciones actual con otro
ID de usuario y contraseña, la conversación se desasignará y se reasignará. El
gestor de bases de datos cierra todos los cursores (con pérdida de la posición del
cursor si se ha utilizado la opción WITH HOLD).
v Si se emite una sentencia CONNECT al servidor de aplicaciones actual con el
mismo ID de usuario y contraseña, la conversación no se desasignará ni se
reasignará. En este caso, los cursores no se cierran.
v Para utilizar un entorno de base de datos particionada con varias particiones, el
usuario o la aplicación debe conectarse a una de las particiones de base de datos
indicadas en el archivo db2nodes.cfg. Debe intentar garantizar que todos los
usuarios no utilicen la misma partición de base de datos como partición
coordinadora.
v El nombre-autorización SYSTEM no se puede especificar explícitamente en la
sentencia CONNECT. No obstante, en sistemas operativos Windows, las
aplicaciones locales que se ejecutan con la cuenta de sistema local pueden
conectarse implícitamente a la base de datos, con el ID de usuario SYSTEM.
v Cuando se establece conexión con Windows Server de forma explícita, el
nombre-autorización o variable-lenguaje-principal de usuario puede especificarse
utilizando el nombre compatible con el Administrador de cuentas de seguridad
(SAM) de Microsoft Windows.
v Puede que no pueda accederse a la base de datos si ésta no se ha activado
explícitamente, si una aplicación de cliente realiza reconexiones frecuentes o si el
intervalo de tiempo entre emisiones de los mandatos DEACTIVATE DATABASE y
ACTIVATE DATABASE se ha establecido en un valor muy breve. Active la base de
datos mediante la emisión del mandato ACTIVATE DATABASE y, a continuación,
intente conectarse con la base de datos.
Sentencias 357
CONNECT (tipo 1)
Ejemplos
v Ejemplo 1: en un programa C, conectar el servidor de aplicaciones TOROLAB,
utilizando el alias de base de datos TOROLAB, el ID de usuario FERMAT y la
contraseña THEOREM.
EXEC SQL CONNECT TO TOROLAB USER FERMAT USING THEOREM;
v Ejemplo 2: en un programa C, conectar con un servidor de aplicaciones cuyo
alias de base de datos esté almacenado en la variable del lenguaje principal
APP_SERVER (varchar(8)). Después de haber establecido una conexión
satisfactoria, copie el identificador del producto de 3 caracteres del servidor de
aplicaciones en la variable PRODUCT (char(3)).
EXEC SQL CONNECT TO :APP_SERVER;
if (strncmp(SQLSTATE,’00000’,5))
strncpy(PRODUCT,sqlca.sqlerrp,3);
CONNECT (tipo 2)
La sentencia CONNECT (Tipo 2) conecta un proceso de aplicación con el servidor
de aplicaciones identificado y establece las normas para una unidad de trabajo
distribuida y dirigida por aplicación. Este servidor es entonces el servidor actual
para el proceso.
La mayor parte de los aspectos de una sentencia CONNECT (Tipo 1) son también
aplicables a una sentencia CONNECT (Tipo 2). En lugar de repetir ahora lo mismo,
esta sección sólo describe los elementos del Tipo 2 que difieren del Tipo 1.
Invocación
Autorización
El proceso de CONNECT pasa por dos niveles de control de acceso. Ambos niveles
deben cumplirse para que la conexión sea correcta.
Sintaxis
CONNECT
Sentencias 359
CONNECT (tipo 2)
TO nombre-servidor
variable-lenguaje-principal bloque-bloqueo autorización
RESET
(1)
autorización
autorización:
contraseña
variable-lenguaje-principal
NEW contraseña CONFIRM contraseña
variable-lenguaje-principal
bloque-bloqueo:
IN SHARE MODE
IN EXCLUSIVE MODE
ON SINGLE MEMBER
Notas:
1 Este formato sólo es válido si se ha habilitado la conexión implícita.
Descripción
TO nombre-servidor/variable-lenguaje-principal
Las normas para codificar el nombre del servidor son las mismas que para el
Tipo 1.
Si la opción SQLRULES(STD) está en vigor, el nombre-servidor no debe
identificar una conexión existente del proceso de aplicación; de lo contrario, se
produce un error (SQLSTATE 08002).
Si la opción SQLRULES(DB2) está en vigor y el nombre-servidor identifica una
conexión existente del proceso de aplicación, esa conexión se convierte en la
actual y la conexión anterior se coloca en estado inactivo. Es decir, el efecto de
la sentencia CONNECT en esta situación es el mismo que el de la sentencia
SET CONNECTION.
Para obtener información acerca de la especificación de SQLRULES, consulte el
apartado “Opciones que rigen la semántica de la unidad de trabajo
distribuida”.
Conexión satisfactoria
Si la sentencia CONNECT es satisfactoria:
v Se crea (o deja de estar inactiva) una conexión con el servidor de
aplicaciones y se coloca en estado actual y mantenido.
v Si CONNECT TO se dirige a un servidor diferente del actual, la
conexión actual se coloca en estado inactivo.
v El registro especial CURRENT SERVER y la SQLCA se actualizan de
la misma forma que con CONNECT (Tipo 1).
Conexión no satisfactoria
Si la sentencia CONNECT no es satisfactoria:
v No importa cuál haya sido la razón de la anomalía, el estado de
conexión del proceso de aplicación y los estados de sus conexiones
permanecen invariables.
v Al igual que para un CONNECT de Tipo 1 no satisfactorio, el campo
SQLERRP de la SQLCA se establece en el nombre del módulo en el
peticionario o servidor de aplicaciones que ha detectado el error.
CONNECT (sin ningún operando), IN SHARE/EXCLUSIVE MODE, USER y USING
Si existe una conexión, el Tipo 2 se comporta como un Tipo 1. El ID de
autorización y el alias de base de datos se colocan en el campo SQLERRMC de
la SQLCA. Si no existe una conexión, no se realiza ningún intento de establecer
una conexión implícita y los campos SQLERRP y SQLERRMC devuelven un
blanco. (Las aplicaciones pueden comprobarse si existe una conexión actual
comprobando estos campos.)
CONNECT sin operandos que incluya USER y USING todavía puede conectar
un proceso de aplicación a una base de datos mediante la variable de entorno
DB2DBDFT. Este método es equivalente a CONNECT RESET Tipo 2, pero está
permitido utilizar un ID de usuario y una contraseña.
RESET
Equivale a una conexión explícita con la base de datos por omisión, si está
disponible. Si no hay una base de datos por omisión que esté disponible, el
estado de conexión del proceso de aplicación y los estados de sus conexiones
permanecen invariables.
La disponibilidad de una base de datos por omisión se determina de acuerdo
con las opciones de instalación, las variables de entorno y los valores de
autentificación.
Normas
v Como se describe en “Opciones que rigen la semántica de la unidad de trabajo
distribuida”, un conjunto de opciones de conexión controla la semántica de la
gestión de conexiones. Se asignan valores por omisión a todos los archivos
fuente preprocesados. Una aplicación puede constar de múltiples archivos fuente
precompilados con diferentes opciones de conexión.
A menos que primero se haya ejecutado un mandato SET CLIENT o una API,
las opciones de conexión que se utilizan al procesar previamente el archivo
fuente que contiene la primera sentencia de SQL que se ejecuta en tiempo de
ejecución se convierten en las opciones de conexión que están en vigor.
Si posteriormente se ejecuta una sentencia CONNECT desde un archivo fuente
previamente procesado con opciones de conexión distintas sin que intervenga en
la ejecución ningún mandato SET CLIENT o la API, se devuelve un error
(SQLSTATE 08001). Observe que, una vez que se ha ejecutado un mandato SET
CLIENT o una API, se pasan por alto las opciones de conexión utilizadas al
preprocesar todos los archivos fuente de la aplicación.
En el Ejemplo 1 del apartado “Ejemplos” de esta sentencia se muestran estas
normas.
v Aunque la sentencia CONNECT se puede utilizar para establecer o conmutar
conexiones, CONNECT con la cláusula USER/USING sólo se aceptará cuando
no haya una conexión actual o inactiva al servidor indicado. La conexión debe
liberarse antes de emitir una conexión con el mismo servidor con la cláusula
Sentencias 361
CONNECT (tipo 2)
Utilización de CONNECT:
Tipo 1 Tipo 2
Cada unidad de trabajo sólo puede establecer Cada unidad de trabajo puede establecer
conexión con un servidor de aplicaciones. conexión con múltiples servidores de
aplicaciones.
Se debe confirmar o retrotraer la unidad de No es necesario confirmar ni retrotraer la
trabajo actual antes de permitir una conexión unidad de trabajo actual antes de conectar
con otro servidor de aplicaciones. con otro servidor de aplicaciones.
La sentencia CONNECT establece la Igual que CONNECT Tipo 1 si se establece la
conexión actual. Las peticiones SQL primera conexión. Si se conmuta a una
posteriores se reenvían a esta conexión hasta conexión inactiva y SQLRULES está
que otra CONNECT la modifique. establecido en STD, debe utilizarse la
sentencia SET CONNECTION en su lugar.
Conectar con la conexión actual es válido y Igual que CONNECT de tipo 1 si se la
no modifica la conexión actual. opción de precompilador SQLRULES se
establece en DB2. Si SQLRULES está
establecida en STD, debe utilizarse la
sentencia SET CONNECTION en su lugar.
Conectar con otro servidor de aplicaciones Conectar con otro servidor de aplicaciones
desconecta la conexión actual. La nueva pone la conexión actual en el estado inactivo.
conexión se convierte en la conexión actual. La nueva conexión se convierte en la
En una unidad de trabajo sólo se mantiene conexión actual. Pueden mantenerse
una conexión. múltiples conexiones en una unidad de
trabajo.
Utilización de CONNECT...USER...USING:
Tipo 1 Tipo 2
Conectar con la cláusula USER...USING Conectar con la cláusula USER/USING sólo
desconecta la conexión actual y establece una se aceptará cuando no haya una conexión
nueva conexión con el nombre de actual o inactiva con el mismo servidor
autorización y la contraseña proporcionados. indicado.
Tipo 1 Tipo 2
CONNECT RESET puede utilizarse para CONNECT RESET equivale a conectar
desconectar la conexión actual. explícitamente con el servidor de
aplicaciones por omisión si hay uno definido
en el sistema.
Anomalías de CONNECT:
Sentencias 363
CONNECT (tipo 2)
Tipo 1 Tipo 2
Sin tener en cuenta si hay una conexión Si hay una conexión actual cuando
actual cuando CONNECT falla (con un error CONNECT falla, la conexión actual no se
que no sea que el nombre-servidor no está verá afectada.
definido en el directorio local), el proceso de
aplicación se coloca en estado no conectado. Si no hay una conexión actual cuando
Las sentencias posteriores que no sean CONNECT falla, el programa pasa a estar en
CONNECT recibirán un SQLSTATE de 08003. estado no conectado. Las sentencias
posteriores que no sean CONNECT recibirán
un SQLSTATE de 08003.
Notas
v Se da soporte a la conexión implícita para la primera sentencia de SQL en una
aplicación con conexiones de Tipo 2. Para ejecutar sentencias de SQL en la base
de datos por omisión, primero debe utilizarse la sentencia CONNECT RESET o
CONNECT USER/USING para establecer la conexión. La sentencia CONNECT
sin operandos visualizará información acerca de la conexión actual si la hay,
pero no establecerá una conexión con la base de datos por omisión si no hay
ninguna conexión actual.
v El nombre-autorización SYSTEM no se puede especificar explícitamente en la
sentencia CONNECT. No obstante, en sistemas operativos Windows, las
aplicaciones locales que se ejecutan con la cuenta de sistema local pueden
conectarse implícitamente a la base de datos, con el ID de usuario SYSTEM.
v Cuando se establece conexión con Windows Server de forma explícita, el
nombre-autorización o variable-lenguaje-principal de usuario puede especificarse
utilizando el nombre compatible con el Administrador de cuentas de seguridad
(SAM) de Microsoft Windows.
v Terminación de una conexión: Cuando se termina una conexión y una
transacción aún no se ha confirmado o retrotraído, consulte el siguiente
apartado, "Utilización de CONNECT, CONNECT RESET implícitas y
Desconexión", para obtener más información acerca de lo que les sucede a estas
transacciones. Para garantizar un comportamiento coherente, codifique una
sentencia COMMIT o ROLLBACK en lugar de depender de la sentencia
CONNECT.
v Alternativas de sintaxis: Las siguientes alternativas se admiten para mantener la
compatibilidad con versiones anteriores de productos DB2 y otros productos de
base de datos. Estas alternativas no son estándar y no deberían utilizarse.
– Se pueden especificar DBPARTITIONNUM o NODE en lugar de MEMBER,
salvo cuando la variable de registro DB2_ENFORCE_MEMBER_SYNTAX se
establece en ON.
Ejemplos
v Ejemplo 1: En este ejemplo se muestra la utilización de varios programas fuente
(se muestran en los recuadros), algunos procesados previamente con opciones de
conexión distintas (se muestran en la sentencia que precede al código) y uno de
los cuales contiene una llamada a la SET CLIENT API.
PGM1: CONNECT(2) SQLRULES(DB2) DISCONNECT(CONDITIONAL)
...
exec sql CONNECT TO OTTAWA;
exec sql SELECT col1 INTO :hv1
FROM tbl1;
...
PGM2: CONNECT(2) SQLRULES(STD) DISCONNECT(AUTOMATIC)
...
exec sql CONNECT TO QUEBEC;
exec sql SELECT col1 INTO :hv1
FROM tbl2;
...
PGM3: CONNECT(2) SQLRULES(STD) DISCONNECT(EXPLICIT)
...
1
SET CLIENT CONNECT 2 SQLRULES DB2 DISCONNECT EXPLICIT
exec sql CONNECT TO LONDON;
exec sql SELECT col1 INTO :hv1
FROM tbl3;
...
Nota:
1. No es la sintaxis real de la API SET CLIENT.
PGM4: CONNECT(2) SQLRULES(DB2) DISCONNECT(CONDITIONAL)
...
exec sql CONNECT TO REGINA;
exec sql SELECT col1 INTO :hv1
FROM tbl4;
...
Si la aplicación ejecuta PGM1 y luego PGM2:
– la conexión con OTTAWA ejecuta: connect=2, sqlrules=DB2,
disconnect=CONDITIONAL
– la conexión con QUEBEC es anómala con SQLSTATE 08001 porque
SQLRULES y DISCONNECT son diferentes.
Si la aplicación ejecuta PGM1 y luego PGM3:
– la conexión con OTTAWA ejecuta: connect=2, sqlrules=DB2,
disconnect=CONDITIONAL
– la conexión con LONDON ejecuta: connect=2, sqlrules=DB2,
disconnect=EXPLICIT
Esto es correcto porque la API SET CLIENT se ejecuta antes que la segunda
sentencia CONNECT.
Si la aplicación ejecuta PGM1 y luego PGM4:
– la conexión con OTTAWA ejecuta: connect=2, sqlrules=DB2,
disconnect=CONDITIONAL
– la conexión con REGINA ejecuta: connect=2, sqlrules=DB2,
disconnect=CONDITIONAL
Esto es correcto porque las opciones de preprocesador para PGM1 son las
mismas que para PGM4.
v Ejemplo 2: este ejemplo muestra las interrelaciones de las sentencias CONNECT
(tipo 2), SET CONNECTION, RELEASE y DISCONNECT. S0, S1, S2 y S3
representan cuatro servidores.
Sentencias 365
CONNECT (tipo 2)
CREATE ALIAS
La sentencia CREATE ALIAS define un alias para un módulo, apodo, secuencia,
tabla, vista u otro alias. Los alias también se conocen con el nombre de sinónimos.
Invocación
Autorización
Los privilegios requeridos para utilizar el objeto al que se hace referencia mediante
su alias son idénticos a los privilegios requeridos para utilizar el objeto
directamente.
Sintaxis
CREATE ALIAS alias-tabla
OR REPLACE PUBLIC alias-módulo
alias-secuencia
alias-tabla:
TABLE
nombre-alias FOR nombre-tabla
nombre-vista
apodo
nombre-alias2
alias-módulo:
Sentencias 367
CREATE ALIAS
alias-secuencia:
Descripción
OR REPLACE
Especifica que se debe sustituir la definición del alias si existe uno en el
servidor actual. La definición existente se descarta de forma efectiva antes de
que se sustituya la nueva definición en el catálogo. Esta opción se ignora si no
existe una definición para el alias en el servidor actual. Esta opción sólo puede
especificarla el propietario del objeto.
PUBLIC
Especifica que el alias es un objeto del esquema del sistema SYSPUBLIC.
nombre-alias
Indica el nombre del alias. En el caso de los alias de tabla, el nombre no debe
identificar un apodo, una tabla, una vista o un alias de tabla que ya exista en
el servidor actual. En el caso de los alias de módulo, el nombre no debe
identificar un módulo o un alias de módulo que ya exista en el servidor actual.
En el caso de los alias de secuencia, el nombre no debe identificar una
secuencia o un alias de secuencia que ya exista en el servidor actual.
Si se especifica un nombre de dos partes, el nombre del esquema no puede
empezar por 'SYS' (SQLSTATE 42939) excepto si se especifica PUBLIC, en cuyo
caso el nombre de esquema debe ser SYSPUBLIC (SQLSTATE 428EK).
FOR TABLE nombre-tabla, nombre-vista, apodo o nombre-alias2
Identifica la tabla, la vista, el apodo o el alias de tabla para el que se ha
definido nombre-alias. En caso de proporcionar otro alias (nombre-alias2), este no
debe ser el mismo que el nuevo nombre-alias que se está definiendo (en su
forma completamente calificada). El nombre-tabla no puede ser una tabla
temporal declarada (SQLSTATE 42995).
FOR MODULE nombre-módulo o nombre-alias2
Identifica el módulo o el alias de módulo para el que se ha definido
nombre-alias. En caso de proporcionar otro alias (nombre-alias2), este no debe ser
el mismo que el nuevo nombre-alias que se está definiendo (en su forma
completamente calificada).
FOR SEQUENCE nombre-secuencia o nombre-alias2
Identifica la secuencia o el alias de secuencia para el que se ha definido
nombre-alias. En caso de proporcionar otro alias (nombre-alias2), este no debe ser
el mismo que el nuevo nombre-alias que se está definiendo (en su forma
completamente calificada). El nombre-secuencia no debe ser una secuencia
generada por el sistema para una columna de identidad (SQLSTATE 428FB).
Notas
v La palabra clave PUBLIC se utiliza para crear un alias público (también
conocido como sinónimo público). Si la palabra clave PUBLIC no se utiliza, el
tipo de alias es un alias privado (también conocido como sinónimo privado).
v La definición del alias de tabla creado recientemente se almacena en
SYSCAT.TABLES. La definición del alias de módulo creado recientemente se
almacena en SYSCAT.MODULES. La definición del alias de secuencia creado
recientemente se almacena en SYSCAT.SEQUENCES.
Ejemplos
v Ejemplo 1: HEDGES intenta crear un alias para una tabla T1 (ambos sin
calificar).
Sentencias 369
CREATE ALIAS
Invocación
Autorización
Sintaxis
CREATE AUDIT POLICY nombre-política ? CATEGORIES
,
(1)
ALL STATUS BOTH
AUDIT FAILURE
CHECKING NONE
CONTEXT SUCCESS
WITHOUT DATA
EXECUTE
WITH DATA
OBJMAINT
SECMAINT
SYSADMIN
VALIDATE
Notas:
1 Cada categoría puede especificarse una vez como máximo (SQLSTATE 42614)
y no puede especificarse ninguna otra categoría si se especifica ALL
(SQLSTATE 42601).
Descripción
nombre-política
Asigna un nombre a la política de auditoría. Este nombre consta de una sola
parte. Se trata de un identificador de SQL (ordinario o delimitado). El
nombre-política no debe identificar una política de auditoría que ya esté descrita
en el catálogo (SQLSTATE 42710). El nombre no debe empezar por los
caracteres 'SYS' (SQLSTATE 42939).
Sentencias 371
CREATE AUDIT POLICY
CATEGORIES
Una lista de una o más categorías de auditoría para las que se especifica un
estado. Si no se especifica ALL, el STATUS de cualquier categoría que no se
especifique explícitamente se establece en NONE.
ALL
Establece todas las categorías en el mismo estado. La categoría EXECUTE
es WITHOUT DATA.
AUDIT
Genera registros cuando se modifican los valores de auditoría o cuando se
accede a las anotaciones cronológicas de auditoría.
CHECKING
Genera registros durante la comprobación de autorización de intentos de
acceder o manipular funciones u objetos de base de datos.
CONTEXT
Genera registros para mostrar el contexto de operación cuando se realiza
una operación de base de datos.
EXECUTE
Genera registros para mostrar la ejecución de sentencias de SQL.
WITHOUT DATA o WITH DATA
Especifica si se proporcionan valores de datos de entrada para las
variables del lenguaje principal y deben registrarse marcadores de
parámetro como parte de la categoría EXECUTE.
WITHOUT DATA
Se proporcionan valores de datos de entrada para las variables del
lenguaje principal y no se registran marcadores de parámetro como
parte de la categoría EXECUTE. WITHOUT DATA es el valor por
omisión.
WITH DATA
Se proporcionan valores de datos de entrada para las variables del
lenguaje principal y se registran marcadores de parámetro como
parte de la categoría EXECUTE. No se registran todos los valores
de entrada; específicamente, los parámetros de tipo estructurado,
LOB, LONG y XML aparecen como valor nulo. Los campos de
fecha, hora e indicación de fecha y hora se registran en formato
ISO. Los valores de datos de entrada se convierten a la página de
códigos de base de datos antes de registrarse. Si falla la conversión
de página de códigos, no se devuelven errores y se registran los
datos no convertidos.
OBJMAINT
Genera registros cuando se crean o descartan los objetos de datos.
SECMAINT
Genera registros cuando se otorgan o revocan privilegios de objeto,
privilegios de base de datos o la autorización DBADM. También se
generan registros cuando se modifican los parámetros de configuración de
seguridad del gestor de base de datos grupo_sysadm, grupo_sysctrl o
grupo_sysmaint.
SYSADMIN
Genera registros cuando se realizan operaciones que requieren autorización
SYSADM, SYSMAINT o SYSCTRL.
VALIDATE
Genera registros cuando se autentifican usuarios o cuando se recupera
información de seguridad del sistema relacionada con un usuario.
STATUS
Especifica un estado para la categoría especificada.
BOTH
Se auditarán los sucesos satisfactorios y anómalos.
FAILURE
Sólo se auditarán los sucesos anómalos.
SUCCESS
Sólo se auditarán los sucesos satisfactorios.
NONE
No se auditarán los sucesos de esta categoría.
ERROR TYPE
Especifica si van a devolverse o ignorarse los errores de auditoría.
NORMAL
Los errores generados por la auditoría se ignorarán y sólo se devolverán a
la aplicación los SQLCODE para los errores asociados con la operación que
se está realizando.
AUDIT
Se devuelven a la aplicación todos los errores, incluyendo los errores que
se producen dentro del propio recurso de auditoría.
Normas
v Una sentencia de SQL exclusiva de AUDIT debe ir después de una sentencia
COMMIT o ROLLBACK (SQLSTATE 5U021). Las sentencias de SQL exclusivas
de AUDIT son:
– AUDIT
– CREATE AUDIT POLICY, ALTER AUDIT POLICY o DROP (AUDIT POLICY)
– DROP (ROLE o TRUSTED CONTEXT si está asociada a una política de
auditoría)
v Una sentencia de SQL exclusiva de AUDIT no puede emitirse en una transacción
global (SQLSTATE 51041) como por ejemplo, una transacción XA.
Notas
v Sólo se permite una sentencia de SQL exclusiva de AUDIT sin confirmar a la vez
entre todas las particiones de la base de datos. Si se ejecuta una sentencia de
SQL exclusiva de AUDIT sin confirmar, las siguientes sentencias de SQL
exclusivas de AUDIT esperarán hasta que se confirme o retrotraiga la sentencia
de SQL exclusiva de AUDIT actual.
v Los cambios se graban en el catálogo del sistema, pero no surten efecto hasta
que se confirmen, incluso para la conexión que emite la sentencia.
Ejemplo
Cree una política de auditoría para auditar éxitos y anomalías para las categorías
AUDIT y OBJMAINT; sólo las anomalías para las categorías SECMAINT,
CHECKING y VALIDATE y ningún suceso para las demás categorías.
Sentencias 373
CREATE AUDIT POLICY
CREATE BUFFERPOOL
La sentencia CREATE BUFFERPOOL define una agrupación de almacenamientos
intermedios en el servidor actual. Las agrupaciones de almacenamientos
intermedios se definen en miembros que pueden acceder a particiones de datos.
Invocación
Autorización
Sintaxis
IMMEDIATE
CREATE BUFFERPOOL nombre-agrup-almac-interm
DEFERRED
ALL DBPARTITIONNUMS
,
NUMBLOCKPAGES 0
?
NUMBLOCKPAGES número-de-páginas
BLOCKSIZE número-de-páginas
?
PAGESIZE entero
K
cláusula-except:
EXCEPT ON MEMBER
MEMBERS
Sentencias 375
CREATE BUFFERPOOL
Descripción
nombre-agrup-almac-interm
Indica el nombre de la agrupación de almacenamientos intermedios. Este
nombre consta de una sola parte. Se trata de un identificador de SQL
(ordinario o delimitado). El nombre-agrup-almac-interm no debe identificar
ninguna agrupación de almacenamientos intermedios que ya exista en el
catálogo (SQLSTATE 42710). El nombre-agrup-almac-interm no debe empezar por
los caracteres 'SYS' (SQLSTATE 42939).
IMMEDIATE o DEFERRED
Indica si la agrupación de almacenamientos intermedios se creará de forma
inmediata.
IMMEDIATE
La agrupación de almacenamientos intermedios se creará inmediatamente.
Si no hay espacio reservado suficiente en la memoria compartida de la
base de datos para asignar la nueva agrupación de almacenamientos
intermedios (SQLSTATE 01657), la sentencia se ejecutará como DEFERRED.
DEFERRED
La agrupación de almacenamientos intermedios se creará cuando se
desactive la base de datos (es necesario desconectar todas las aplicaciones
de la base de datos). No es necesario espacio de memoria reservado; DB2
asignará la memoria necesaria del sistema.
ALL DBPARTITIONNUMS o DATABASE PARTITION GROUP
Identifica los miembros en los que se debe definir la agrupación de
almacenamientos intermedios. El valor por omisión es ALL
DBPARTITIONNUMS.
ALL DBPARTITIONNUMS
Esta agrupación de almacenamientos intermedios se creará en todos los
miembros que puedan acceder a todas las particiones de datos de la base
de datos.
DATABASE PARTITION GROUP nombre-grupo-particiones-bd, ...
Identifica el grupo o grupos de particiones de base de datos a los que se
aplica la definición de agrupación de almacenamientos intermedios. La
agrupación de almacenamientos intermedios se creará sólo en los
miembros de los grupos de partición de base de datos especificados. Cada
grupo de partición de base de datos debe existir en la base de datos
(SQLSTATE 42704).
SIZE
Especifica el tamaño de la agrupación de almacenamientos intermedios. Este
tamaño será el tamaño por omisión para todos los miembros en los que existe
la agrupación de almacenamientos intermedios. El valor por omisión es 1.000
páginas.
número-de-páginas
Número de páginas de la nueva agrupación de almacenamientos
intermedios. El número mínimo de páginas es 2 y el número máximo
depende de la arquitectura (SQLSTATE 42615).
AUTOMATIC
Habilita el ajuste automático para la agrupación de almacenamientos
intermedios. El gestor de bases de datos ajusta el tamaño de la agrupación
de almacenamientos intermedios como respuesta a los requisitos de carga
de trabajo. El número de páginas implícito o explícito especificado se
utiliza como tamaño inicial de la agrupación de almacenamientos
intermedios. En las activaciones posteriores de la base de datos, el tamaño
de la agrupación de almacenamientos intermedios se basa en el último
valor ajustado determinado por el gestor de memoria de autoajuste
(STMM). Tenga en cuenta que STMM aplica un tamaño mínimo a las
agrupaciones de almacenamientos intermedios automáticos. Para
determinar el tamaño actual de las agrupaciones de almacenamientos
intermedios que se han habilitado para el autoajuste, utilice el mandato GET
SNAPSHOT y examine el tamaño actual de las agrupaciones de
almacenamientos intermedios (el valor del elemento de supervisor
bp_cur_buffsz).
NUMBLOCKPAGES número-de-páginas
Especifica el número de páginas que deben existir en el área basada en
bloques. El número de páginas no debe superar el 98 por ciento del número de
páginas para la agrupación de almacenamientos intermedios (SQLSTATE
54052). Si se especifica el valor 0, se inhabilita la E/S de bloque. El valor real
de NUMBLOCKPAGES utilizado será un múltiplo de BLOCKSIZE.
No se da soporte a NUMBLOCKPAGES en un entorno DB2 pureScale
(SQLSTATE 56038).
BLOCKSIZE número-de-páginas
Especifica el número de páginas de un bloque. El tamaño de bloque debe ser
un valor comprendido entre el 2 y el 256 (SQLSTATE 54053). El valor por
omisión es 32.
BLOCKSIZE no se soporta en un entorno DB2 pureScale (SQLSTATE 56038).
EXCEPT ON MEMBER o EXCEPT ON MEMBERS
Especifica el miembro o los miembros para los que el tamaño de la agrupación
de almacenamientos intermedios será distinta del valor por omisión
especificado para el grupo de particiones de base de datos al que el miembro
tiene acceso. Si no se especifica esta cláusula, todos los miembros que puedan
acceder a las particiones de datos del grupo de particiones de base de datos
especificado tendrán el mismo tamaño que el especificado para esta agrupación
de almacenamientos intermedios.
miembro-número1
Especifica un número de miembro para un miembro que tiene acceso a una
partición de datos para la que se ha creado la agrupación de
almacenamientos intermedios (SQLSTATE 42729).
TO miembro-número2
Especifica un rango de números de miembro. El valor de miembro-número2
debe ser superior o igual al valor de miembro-número1 (SQLSTATE 428A9).
Cada miembro identificado por el rango de números de miembro debe
tener acceso a la partición de datos para la que se ha creado la agrupación
de almacenamientos intermedios (SQLSTATE 428A9).
SIZE número-de-páginas
El tamaño de agrupación de almacenamientos intermedios especificado
como el número de páginas. El número mínimo de páginas es 2 y el
número máximo depende de la arquitectura (SQLSTATE 42615).
Sentencias 377
CREATE BUFFERPOOL
Notas
v Si la agrupación de almacenamientos intermedios se crea mediante la utilización
de la opción DEFERRED, cualquier espacio de tablas que se cree en esta
agrupación de almacenamientos intermedios utilizará una pequeña agrupación
de almacenamientos intermedios del sistema con el mismo tamaño de página
hasta la próxima vez que se active la base de datos. La base de datos deberá
reiniciarse para que la agrupación de almacenamientos intermedios se active y
para que entren en vigor las asignaciones de espacio de tablas para la nueva
agrupación de almacenamientos intermedios. La opción por omisión es
IMMEDIATE.
v Debe haber suficiente memoria real en la máquina para el total de las
agrupaciones de almacenamientos intermedios, así como para el resto de
necesidades de espacio del gestor de bases de datos y de las aplicaciones. Si DB2
no puede obtener memoria para las agrupaciones de almacenamientos
intermedios normales, intentará iniciarse con agrupaciones de almacenamientos
intermedios del sistema pequeñas, una para cada tamaño de página (4 K, 8 K, 16
K y 32 K). Ante esta situación, se enviará un mensaje de aviso al usuario
(SQLSTATE 01626) y las páginas de todos los espacios de tablas utilizarán las
agrupaciones de almacenamientos intermedios del sistema.
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con las versiones anteriores de los productos
DB2 y con otros productos de base de datos. Estas alternativas no son estándar y
no deberían utilizarse.
– NODEGROUP puede especificarse en lugar de DATABASE PARTITION
GROUP
– Se puede especificar DBPARTITIONNUM o NODE en lugar de MEMBER,
salvo cuando la variable de registro DB2_ENFORCE_MEMBER_SYNTAX se
ha establecido en ON.
– Se puede especificar DBPARTITIONNUMS o NODES en lugar de MEMBERS,
salvo cuando se ha establecido la variable de registro
DB2_ENFORCE_MEMBER_SYNTAX en ON.
Invocación
Autorización
Sintaxis
ON ALL DBPARTITIONNUMS
,
ON DBPARTITIONNUMS ( partición-bd-número1 )
DBPARTITIONNUM TO partición-bd-número2
Descripción
nombre-grupo-particiones-bd
Indica el nombre del grupo de particiones de base de datos. Este nombre
consta de una sola parte. Se trata de un identificador de SQL (ordinario o
delimitado). El nombre-grupo-particiones-bd no debe identificar un grupo de
particiones de base de datos que ya exista en el catálogo (SQLSTATE 42710). El
nombre-grupo-particiones-bd no debe empezar por los caracteres 'SYS' o 'IBM'
(SQLSTATE 42939).
ON ALL DBPARTITIONNUMS
Especifica que el grupo de particiones de base de datos está definido en todas
las particiones de base de datos definidas para la base de datos (archivo
db2nodes.cfg) cuando se crea el grupo de particiones de base de datos.
Si se añade una partición de base de datos al sistema de la base de datos, debe
emitirse la sentencia ALTER DATABASE PARTITION GROUP para que incluya
esta nueva partición de base de datos en un grupo de particiones de base de
datos (incluido IBMDEFAULTGROUP). Además, debe emitirse el mandato
REDISTRIBUTE DATABASE PARTITION GROUP para mover datos a la
partición de base de datos.
ON DBPARTITIONNUMS
Especifica las particiones de base de datos que se encuentran en el grupo de
particiones de base de datos. DBPARTITIONNUM es sinónimo de
DBPARTITIONNUMS.
Sentencias 379
CREATE DATABASE PARTITION GROUP
partición-bd-núm-1
Especifique un número de partición de base de datos. (Para mantener la
compatibilidad con la versión anterior, puede especificarse un nombre-nodo
en el formato NODEnnnnn.)
TO partición-bd-número2
Especifique un rango de números de partición de base de datos. El valor
de partición-bd-número2 debe ser mayor que o igual al valor de
partición-bd-número1 (SQLSTATE 428A9). Todas las particiones de base de
datos entre los números de partición de base de datos especificados e
incluidos estos se encuentran en el grupo de particiones de base de datos.
Normas
v Cada partición de base de datos especificada por número debe estar definida en
el archivo db2nodes.cfg (SQLSTATE 42729).
v Cada número-partición-base-de-datos de la lista de la cláusula ON
DBPARTITIONNUMS deberá aparecer una vez como máximo (SQLSTATE
42728).
v Un número-partición-base-de-datos válido es un número comprendido entre 0 y
999, ambos inclusive (SQLSTATE 42729).
v La sentencia CREATE DATABASE PARTITION GROUP puede resultar anómala
(SQLSTATE 55071) si una petición para añadir un servidor de particiones de
base de datos está pendiente o en curso. Esta sentencia puede también resultar
anómala (SQLSTATE 55077) si se añade en línea un servidor de particiones de
base de datos nuevo a la instancia y no todas las aplicaciones saben de la
existencia del servidor de particiones de base de datos nuevo.
Notas
v Esta sentencia crea una correlación de distribución para el grupo de particiones
de base de datos. Para cada correlación de distribución, se genera un
identificador de correlaciones de distribución (PMAP_ID). Esta información se
graba en el catálogo y puede recuperarse desde SYSCAT.DBPARTITIONGROUPS
y SYSCAT.PARTITIONMAPS. Cada entrada de la correlación de distribución
especifica la partición de base de datos de destino en la que residen todas las
filas generadas aleatoriamente. Para un grupo de particiones de base de datos de
una sola partición, la correlación de distribución correspondiente sólo tiene una
entrada. Para un grupo de particiones de base de datos de varias particiones, la
correlación de distribución correspondiente tiene 32768 entradas, donde los
números de partición de base de datos se asignan a las entradas de correlación
de forma rotativa por omisión.
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con las versiones anteriores de los productos
DB2 y con otros productos de base de datos. Estas alternativas no son estándar y
no deberían utilizarse.
– NODE puede especificarse en lugar de DBPARTITIONNUM
– NODES puede especificarse en lugar de DBPARTITIONNUMS
– NODEGROUP puede especificarse en lugar de DATABASE PARTITION
GROUP
Ejemplos
Los ejemplos siguientes se basan en una base de datos particionada con seis
particiones de base de datos definidas como 0, 1, 2, 5, 7 y 8.
Sentencias 381
CREATE EVENT MONITOR
Invocación
Autorización
Sintaxis
CREATE EVENT MONITOR nombre-supervisor-sucesos FOR
DATABASE
TABLES
DEADLOCKS
WITH DETAILS
HISTORY
VALUES
TABLESPACES
BUFFERPOOLS
CONNECTIONS
STATEMENTS WHERE condición-suceso
TRANSACTIONS
MANUALSTART
? ?
AUTOSTART ON DBPARTITIONNUM número-partición-bd
LOCAL
?
GLOBAL
condición-suceso:
AND | OR
APPL_ID = serie-comparación
NOT AUTH_ID (1)
APPL_NAME <>
>
(1)
>=
<
(1)
<=
LIKE
NOT LIKE
( condición-suceso )
info-grupo-evm:
? ?
,
grupo-evm
( opciones-tabla-destino )
Sentencias 383
CREATE EVENT MONITOR
BUFFERSIZE 4 BLOCKED
? ?
BUFFERSIZE páginas NONBLOCKED
opciones-tabla-destino:
(2)
TABLE nombre-tabla
IN nombre-espacio-tablas
PCTDEACTIVATE 100
PCTDEACTIVATE entero
TRUNC
,
INCLUDES ( elemento )
EXCLUDES
opciones-archivo:
MAXFILES NONE
? ? ?
MAXFILES número-de-archivos MAXFILESIZE páginas
NONE
Notas:
1 También se da soporte a otras formas de estos operadores.
2 Cada cláusula sólo puede especificarse una vez.
Descripción
nombre-supervisor-sucesos
Nombre del supervisor de sucesos. Este nombre consta de una sola parte. Se
trata de un identificador de SQL (ordinario o delimitado). El
nombre-supervisor-sucesos no debe identificar ningún supervisor de sucesos que
ya exista en el catálogo (SQLSTATE 42710).
FOR
Especifica el tipo de suceso que se debe registrar.
DATABASE
Especifica que el supervisor de sucesos registre un suceso de base de datos
cuando se desconecte la última aplicación de la base de datos.
TABLES
Especifica que el supervisor de sucesos registre un suceso de tabla para
cada tabla activa cuando se desconecte la última aplicación de la base de
datos. Para tablas particionadas, se registra un suceso de tabla para cada
partición de datos de cada tabla activa. Una tabla activa es una tabla que
ha cambiado desde la primera conexión con la base de datos.
DEADLOCKS
Sentencias 385
CREATE EVENT MONITOR
CONNECTIONS
Especifica que el supervisor de sucesos registre un suceso de conexión
cuando una aplicación se desconecta de la base de datos.
STATEMENTS
Especifica que el supervisor de sucesos registre un suceso de sentencia
siempre que una sentencia de SQL termine su ejecución.
TRANSACTIONS
Sentencias 387
CREATE EVENT MONITOR
1
La cabecera de base de datos de los grupos de datos lógicos (sólo el elemento conn_time),
el inicio y el desbordamiento se graban en el grupo CONTROL. El desbordamiento se graba
si el supervisor de sucesos está en estado no bloqueado y se han descartado los sucesos.
2
Corresponde al suceso DETAILED_DLCONN.
3
Corresponde a los grupos de datos lógicos LOCK que se producen dentro de cada suceso
DETAILED_DLCONN.
4
Sólo se crea para los entornos de bases de datos particionadas.
5
Se refiere a la versión de la tabla de sucesos con formato de este tipo de supervisor de
sucesos.
opciones-tabla-destino
Identifica la tabla de destino de un grupo. Si no se especifica
un valor para opciones-tabla-destino, el proceso CREATE EVENT
MONITOR continúa como se indica a continuación:
Sentencias 389
CREATE EVENT MONITOR
Sentencias 391
CREATE EVENT MONITOR
Sentencias 393
CREATE EVENT MONITOR
Sentencias 395
CREATE EVENT MONITOR
Normas
v Cada uno de los tipos de sucesos (DATABASE, TABLES, DEADLOCK,...) sólo
pueden especificarse una vez en la definición de un supervisor de sucesos en
particular.
Notas
v Las definiciones del supervisor de sucesos se registran en la vista de catálogo
SYSCAT.EVENTMONITORS. Los sucesos en sí se registran en la vista de
catálogo SYSCAT.EVENTS. Los nombres de las tablas de destino se graban en la
vista de catálogo SYSCAT.EVENTTABLES.
v Cuando se utiliza DEADLOCKS WITH DETAILS en lugar de DEADLOCKS, ello
afecta al rendimiento. Cuando se produce un punto muerto, el gestor de bases
de datos necesita más tiempo para grabar la información adicional del punto
muerto.
v Normalmente, siempre que se establece una conexión se graba un suceso
CONNHEADER. Sin embargo, si se ha creado un supervisor de sucesos sólo
para DEADLOCKS WITH, sólo se grabará un suceso CONNHEADER la primera
vez que la conexión participe en un punto muerto.
v En una base de datos con múltiples particiones de base de datos, la cláusula ON
DBPARTITIONNUM puede utilizarse con los supervisores de sucesos FILE y
PIPE que tengan un tipo de suceso DEADLOCKS para indicar dónde debe
residir el supervisor de sucesos propiamente dicho; la información de las otras
particiones de base de datos, si es relevante, se enviará a aquella ubicación para
el proceso.
v En una base de datos con múltiples particiones de base de datos, un supervisor
de sucesos de punto muerto recibirá información sobre las aplicaciones que
tengan bloqueos que participen en el punto muerto desde todas las particiones
de base de datos en las que existían dichos bloqueos participantes. Si la partición
de base de datos a la que está conectada la aplicación (la partición coordinadora
de la aplicación) no es una de las particiones de base de datos participantes, no
se recibirá información sobre ningún suceso de punto muerto desde esa
partición de base de datos.
v El parámetro BUFFERSIZE restringe el tamaño de los sucesos STMT,
STMT_HISTORY, DATA_VALUE y DETAILED_DLCONN. Si un suceso STMT o
STMT_HISTORY no cabe en un almacenamiento intermedio, se trunca mediante
el truncamiento del texto de la sentencia. Si un suceso DETAILED_DLCONN no
puede caber dentro de un almacenamiento intermedio, este se trunca eliminando
bloqueos. Si todavía no tiene cabida, el texto de la sentencia se trunca. Si un
suceso DATA_VAL no cabe en un almacenamiento intermedio, se trunca el valor
de datos.
Los supervisores de sucesos WITH DETAILS HISTORY VALUES (y, en menor
grado, WITH DETAILS HISTORY) utilizan una cantidad significativa de espacio
de pila de supervisor para efectuar el seguimiento de las sentencias y sus valores
Sentencias 397
CREATE EVENT MONITOR
Sentencias 399
CREATE EVENT MONITOR
Sentencias 401
CREATE EVENT MONITOR
Ejemplos
v Ejemplo 1: El siguiente ejemplo crea un supervisor de sucesos denominado
SMITHPAY. Este supervisor de sucesos, reunirá los datos de sucesos para la base
de datos así como para las sentencias de SQL realizadas por la aplicación
PAYROLL propiedad del ID de autorización JSMITH. Los datos se añadirán a la
vía de acceso absoluta /home/jsmith/event/smithpay/. Se crearán un máximo
de 25 archivos. Cada archivo debe tener una longitud máxima de 1.024 páginas
de 4K. La E/S del archivo no estará bloqueada.
CREATE EVENT MONITOR SMITHPAY
FOR DATABASE, STATEMENTS
WHERE APPL_NAME = ’PAYROLL’ AND AUTH_ID = ’JSMITH’
WRITE TO FILE ’/home/jsmith/event/smithpay’
MAXFILES 25
MAXFILESIZE 1024
NONBLOCKED
APPEND
v Ejemplo 2: El ejemplo siguiente crea un supervisor de sucesos denominado
DEADLOCKS_EVTS. Este supervisor de sucesos reunirá los sucesos de puntos
muertos y los grabará en la vía de acceso relativa DLOCKS. Se grabará un
archivo y no hay tamaño de archivo máximo. Cada vez que se active el
supervisor de sucesos, se añadirán los datos de sucesos al archivo 00000000.evt
si existe. El supervisor de sucesos se iniciará cada vez que se inicie la base de
datos. La E/S estará bloqueada por omisión.
CREATE EVENT MONITOR DEADLOCK_EVTS
FOR DEADLOCKS
WRITE TO FILE ’DLOCKS’
MAXFILES 1
MAXFILESIZE NONE
AUTOSTART
v Ejemplo 3: Este ejemplo crea un supervisor de sucesos denominado DB_APPLS.
Este supervisor de sucesos reúne sucesos de conexión y graba datos en la
conexión con nombre /home/jsmith/applpipe.
CREATE EVENT MONITOR DB_APPLS
FOR CONNECTIONS
WRITE TO PIPE ’/home/jsmith/applpipe’
v Ejemplo 4: Este ejemplo, en el que se da por supuesto un entorno de base de
datos particionada, crea un supervisor de sucesos denominado FOO. Este
supervisor de sucesos recopila los sucesos de la sentencia de SQL y los graba en
tablas de SQL con los siguientes nombres que ha obtenido:
– CONNHEADER_FOO
– STMT_FOO
– SUBSECTION_FOO
– CONTROL_FOO
Puesto que no se ha proporcionado información de espacio de tablas, todas las
tablas se crearán en un espacio de tablas seleccionado por el sistema, basándose
en las normas que se describen en la cláusula IN nombre-espacio-tablas. Todas las
tablas incluyen todos los elementos de su grupo (es decir, se definen columnas
cuyos nombres son equivalentes a los nombres de los elementos.)
CREATE EVENT MONITOR FOO
FOR STATEMENTS
WRITE TO TABLE
v Ejemplo 5: En este ejemplo, en el que se da por supuesto un entorno de base de
datos particionada, se crea un supervisor de sucesos denominado BAR. Este
supervisor de sucesos recopila la sentencia de SQL y los sucesos de la
transacción y los graba en tablas, como se indica a continuación:
– Los datos del grupo STMT se graban en la tabla MYDEPT.MYSTMTINFO. La
tabla se crea en el espacio de tablas MYTABLESPACE. Cree columnas sólo
para los elementos siguientes: ROWS_READ, ROWS_WRITTEN y
STMT_TEXT. Los demás elementos del grupo se descartarán.
– Los datos del grupo SUBSECTION se graban en la tabla
MYDEPT.MYSUBSECTIONINFO. La tabla se crea en el espacio de tablas
MYTABLESPACE. La tabla incluye todas las columnas, excepto START_TIME,
STOP_TIME y PARTIAL_RECORD.
– Los datos del grupo XACT se graban en la tabla XACT_BAR. Puesto que no
se ha proporcionado información de espacio de tablas, la tabla se creará en un
espacio de tablas seleccionado por el sistema, basándose en las normas
descritas en la cláusula IN nombre-espacio-tablas. Esta tabla incluye todos los
elementos que están contenidos en el grupo XACT.
– No se crea ninguna tabla para connheader o control; todos los datos de esos
grupos se descartan.
CREATE EVENT MONITOR BAR
FOR STATEMENTS, TRANSACTIONS
WRITE TO TABLE
STMT(TABLE MYDEPT.MYSTMTINFO IN MYTABLESPACE
INCLUDES(ROWS_READ, ROWS_WRITTEN, STMT_TEXT)),
STMT(TABLE MYDEPT.MYSTMTINFO IN MYTABLESPACE
EXCLUDES(START_TIME, STOP_TIME, PARTIAL_RECORD)),
XACT
Sentencias 403
CREATE EVENT MONITOR (actividades)
Invocación
Autorización
Sintaxis
CREATE EVENT MONITOR nombre-supervisor-sucesos FOR ACTIVITIES
AUTOSTART LOCAL
? ? ?
MANUALSTART ON MEMBER número-miembro
info-tabla-sucesos-con-formato:
BLOCKED
? ?
,
grupo-evm
( opciones-tabla-destino )
?
opciones-tabla-destino:
(1)
TABLE nombre-tabla
IN nombre-espacio-tablas
PCTDEACTIVATE 100
PCTDEACTIVATE entero
opciones-archivo:
MAXFILES NONE
? ? ?
MAXFILES número-de-archivos MAXFILESIZE páginas
NONE
BLOCKED APPEND
? ?
REPLACE
Notas:
1 Cada cláusula sólo puede especificarse una vez.
Descripción
nombre-supervisor-sucesos
Nombre del supervisor de sucesos. Este nombre consta de una sola parte. Se
trata de un identificador de SQL (ordinario o delimitado). El
nombre-supervisor-sucesos no debe identificar ningún supervisor de sucesos que
ya exista en el catálogo (SQLSTATE 42710).
FOR
Especifica el tipo de suceso que se debe registrar.
ACTIVITIES
Especifica que el supervisor de sucesos registra un suceso de actividad
cuando una actividad termina de ejecutarse o antes de completarse la
ejecución si el procedimiento CAPTURE_ACTIVITY_IN_PROGRESS activa
el suceso. La actividad debe:
v Pertenecer a una clase de servicio o carga de trabajo que tenga el
conjunto COLLECT ACTIVITY DATA, o
v Pertenecer a una clase de trabajo cuya acción de trabajo asociada sea
COLLECT ACTIVITY DATA, o
v Identificarse como la actividad que ha violado el umbral cuya cláusula
COLLECT ACTIVITY DATA estaba especificada, o
v Haberse identificado en una llamada al procedimiento
CAPTURE_ACTIVITY_IN_PROGRESS antes de completarse
WRITE TO
Especifica el destino para los datos.
TABLE
Indica que el destino de los datos del supervisor de sucesos es un conjunto
de tablas de base de datos. El supervisor de sucesos separa la corriente de
datos en uno o más grupos de datos lógicos e inserta cada grupo en una
tabla separada. Los datos para los grupos que tienen una tabla de destino
se conservan, mientras que los datos para los grupos que no tienen una
Sentencias 405
CREATE EVENT MONITOR (actividades)
Tipo de supervisor de
sucesos Valor grupo-evm
Actividades v ACTIVITY
v ACTIVITYMETRICS
v ACTIVITYSTMT
v ACTIVITYVALS
v CONTROL
opciones-tabla-destino
Identifica la tabla de destino de un grupo.
TABLE nombre-tabla
Especifica el nombre de la tabla de destino. La tabla de
destino debe ser una tabla no particionada. Si el nombre es
un nombre no calificado, el esquema de tabla toma por
omisión el valor del registro especial CURRENT SCHEMA.
Si no se proporciona ningún nombre, el nombre no
calificado se obtiene de grupo-evm y de
nombre-supervisor-sucesos como se indica a continuación:
substring(grupo-evm CONCAT ’_’
CONCAT nombre-supervisor-sucesos,1,128)
IN nombre-espacio-tablas
Define el espacio de tablas en el que va a crearse la tabla.
Si no se proporciona un nombre de espacio de tablas, el
espacio de tablas se selecciona utilizando el mismo proceso
que cuando se crea una tabla sin nombre de espacio de
tablas utilizando CREATE TABLE.
Puesto que el tamaño de la página afecta a las longitudes
de INLINE LOB utilizadas, considere la posibilidad de
especificar un espacio de tablas con un tamaño de página
lo más grande posible para mejorar el rendimiento de
INSERT del supervisor de sucesos.
PCTDEACTIVATE entero
Si se está creando una tabla para el supervisor de sucesos
en un almacenamiento automático (no temporal) o un
espacio de tablas DMS, el parámetro PCTDEACTIVATE
especifica hasta qué punto debe llenarse el espacio de
tablas antes de que el supervisor de sucesos se desactive
Sentencias 407
CREATE EVENT MONITOR (actividades)
opciones-archivo
Especifica las opciones para el formato del archivo.
MAXFILES NONE
Especifica que no hay ningún límite en el número de archivos de
sucesos que vaya a crear el supervisor de sucesos. Es el valor por
omisión.
MAXFILES número-de-archivos
Especifica que hay un límite en el número de archivos del
supervisor de sucesos que vayan a existir para un supervisor de
sucesos en particular en cualquier momento. Siempre que un
supervisor de sucesos tenga que crear otro archivo, comprobará
que el número de archivos .evt del directorio sea inferior al
número-de-archivos. Si ya se ha alcanzado este límite, el supervisor
de sucesos se desactivará por sí solo.
Si una aplicación elimina los archivos de sucesos del directorio
después de haberlos grabado, el número total de archivos que un
supervisor de sucesos puede producir puede exceder el
número-de-archivos. Esta opción se ha proporcionado para permitir a
un usuario garantizar que los datos de sucesos no consumirán más
de una cantidad de espacio de disco especificada.
MAXFILESIZE páginas
Especifica que hay un límite en el tamaño de cada archivo del
supervisor de sucesos. Siempre que un supervisor de sucesos grabe
un nuevo registro de suceso en un archivo, comprueba que el
archivo no vaya a crecer de manera que sobrepase las páginas (en
unidades de páginas de 4K). Si el archivo resultante fuese a ser
demasiado grande, entonces el supervisor de sucesos conmutará al
siguiente archivo. El valor por omisión para esta opción es:
v Windows - 200 páginas de 4 K
v UNIX - 1000 páginas de 4K
El número de páginas debe ser mayor que el tamaño del
almacenamiento intermedio de sucesos en páginas, como mínimo.
Si no se cumple este requisito, se generará un error (SQLSTATE
428A4).
MAXFILESIZE NONE
Especifica que no hay ningún límite establecido en el tamaño de
un archivo. Si se especifica MAXFILESIZE NONE, también debe
especificarse MAXFILES 1. Esta opción significa que un archivo
contendrá todos los datos de sucesos para un supervisor de
sucesos en particular. En este caso el único archivo de sucesos será
00000000.evt.
BLOCKED
Especifica que cada agente que genera un suceso debe esperar a
que se grabe en disco un almacenamiento intermedio de sucesos si
el agente determina que ambos almacenamientos intermedios de
sucesos están llenos. Debe seleccionarse BLOCKED para garantizar
que no se van a perder datos. Es la opción por omisión.
APPEND
Especifica que si ya existen archivos de datos de sucesos cuando se
activa el supervisor de sucesos, este añadirá los nuevos datos de
sucesos a los archivos de corriente de datos existentes. Cuando el
Sentencias 409
CREATE EVENT MONITOR (actividades)
Normas
v El tipo de suceso ACTIVITIES no puede combinarse con ningún otro tipo de
suceso de una definición de supervisor de sucesos concreta.
Notas
v Las definiciones del supervisor de sucesos se registran en la vista de catálogo
SYSCAT.EVENTMONITORS. Los sucesos en sí se registran en la vista de
catálogo SYSCAT.EVENTS. Los nombres de las tablas de destino se graban en la
vista de catálogo SYSCAT.EVENTTABLES.
v Si el miembro en el que se debe ejecutar el supervisor de sucesos no está activo,
la activación del supervisor de sucesos tiene lugar cuando se vuelve a activar ese
miembro.
v Una vez activado un supervisor de sucesos, este se comporta como un
supervisor de sucesos de inicio automático hasta que el supervisor de sucesos se
desactiva explícitamente o se recicla la instancia. Es decir, si un supervisor de
sucesos está activo cuando se desactiva un miembro y ese miembro se vuelve a
activar posteriormente, el supervisor de sucesos también se vuelve a activar
explícitamente.
v La sentencia FLUSH EVENT MONITOR no es aplicable a este supervisor de
sucesos y no se aplicará cuando se emita contra el mismo.
v Supervisores de sucesos de grabación en tabla: Notas generales:
– Todas las tablas de destino se crean cuando se ejecuta la sentencia CREATE
EVENT MONITOR.
– Si la creación de una tabla no se realiza satisfactoriamente por cualquier
razón, se envía un error al programa de aplicación y la sentencia CREATE
EVENT MONITOR no se ejecuta satisfactoriamente.
– Una tabla de destino sólo puede utilizarla un supervisor de sucesos. Durante
el proceso de CREATE EVENT MONITOR, si se encuentra una tabla de
destino que ya se había definido para que la utilizara otro supervisor de
sucesos, la sentencia CREATE EVENT MONITOR no se ejecuta
satisfactoriamente y se envía un error al programa de aplicación. Una tabla se
habrá definido para que la utilice otro supervisor de sucesos si el nombre de
la tabla coincide con un valor que se encuentra en la vista de catálogo
SYSCAT.EVENTTABLES.
– Durante el proceso de CREATE EVENT MONITOR, si ya existe una tabla,
pero no se ha definido para que la utilice otro supervisor de sucesos, no se
creará ninguna tabla y el proceso continuará. Se enviará un aviso al programa
de aplicación.
– Deberán existir espacios de tablas para que pueda ejecutarse la sentencia
CREATE EVENT MONITOR. La sentencia CREATE EVENT MONITOR no
crea espacios de tablas.
– Si se han especificado, las palabras clave LOCAL y GLOBAL se pasan por
alto. Con los supervisores de sucesos WRITE TO TABLE, se inicia una hebra o
un proceso de salida del supervisor de sucesos en cada miembro de base de
datos de la instancia, y cada uno de estos procesos sólo notifica datos al
miembro en el que está ejecutándose.
– Los supervisores de sucesos de grabación en tabla no graban los tipos de
sucesos siguientes del archivo de anotaciones cronológicas plano del
supervisor o del formato de conexión:
- LOG_STREAM_HEADER
- LOG_HEADER
Sentencias 411
CREATE EVENT MONITOR (actividades)
Sentencias 413
CREATE EVENT MONITOR (actividades)
marcará esa tabla de destino para que se descarten los datos destinados a la
misma durante el proceso de ejecución.
– Si no existe una tabla de destino al activarse el supervisor de sucesos (o, en
un entorno de base de datos particionada, si el espacio de tablas no reside en
una partición de base de datos), la activación continúa y los datos que, de
otro modo, se insertarían en esta tabla, se pasan por alto.
– El proceso de activación valida cada tabla de destino. Si la validación no se
realiza satisfactoriamente, la activación del supervisor de sucesos no tiene
lugar y se graban mensajes en el archivo de anotaciones cronológicas de
administración.
– Durante la activación en un entorno de base de datos particionada, las filas
de la tabla CONTROL de FIRST_CONNECT y de EVMON_START sólo se
insertan en la partición de base de datos de catálogo. Para ello es necesario
que el espacio de tablas de la tabla CONTROL exista en la partición de base
de datos de catálogo. Si no existe en la partición de base de datos de catálogo,
dichas inserciones no se realizan.
– En un entorno de base de datos particionada, si un miembro todavía no está
activo al activarse el supervisor de sucesos de grabación en tabla, el
supervisor de sucesos se activará la próxima vez que se active el miembro.
Tiempo de ejecución:
– El supervisor de sucesos se ejecuta con autorización DATAACCESS.
– Si, mientras existe un supervisor de sucesos activo, no se ejecuta
satisfactoriamente una operación de inserción en una tabla de destino:
- Los cambios no confirmados se retrotraen.
- Se graba un mensaje en el archivo de anotaciones cronológicas de
administración.
- El supervisor de sucesos se desactiva.
– Si existe un supervisor de sucesos activo, ejecuta COMMIT localmente cuando
ha terminado de procesar un almacenamiento intermedio del supervisor de
sucesos.
– En un entorno que no sea una base de datos particionada o un entorno DB2
pureScale, todos los supervisores de sucesos de grabación en tabla se
desactivarán cuando finalice la última aplicación (y la base de datos no se
haya activado de forma explícita). En un entorno DB2 pureScale, los
supervisores de sucesos de grabación en tabla se desactivan en un miembro
concreto cuando el miembro se detiene y se vuelve a activar cuando el
miembro se reinicia. En un entorno de base de datos particionada, los
supervisores de sucesos de grabación en tabla se desactivan al desactivarse la
partición de catálogo.
– La sentencia DROP EVENT MONITOR no descarta tablas de destino.
– Siempre que se active un supervisor de sucesos de grabación en tabla,
obtendrá bloqueos de tabla IN en cada tabla de destino para impedir que se
modifiquen mientras el supervisor de sucesos esté activo. Los bloqueos de
tabla se mantienen en todas las tablas mientras el supervisor de sucesos está
activo. Si en cualquiera de estas tablas de destino es necesario un acceso
exclusivo (por ejemplo, cuando se va a ejecutar un programa de utilidad),
primero desactive el supervisor de sucesos para liberar los bloqueos de tabla
antes de intentar dicho acceso.
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con las versiones anteriores de los productos
DB2 y con otros productos de base de datos. Estas alternativas no son estándar y
no deberían utilizarse.
Ejemplo
Sentencias 415
CREATE EVENT MONITOR (historial de cambios)
Invocación
Autorización
Sintaxis
AUTOSTART
WRITE TO TABLE información-tabla-sucesos-con-formato
MANUALSTART
control-sucesos:
ALL
BACKUP
CFGALL
DBCFG
DBCFGVALUES
DBMCFG
DBMCFGVALUES
DDLALL
DDLDATA
DDLFEDERATED
DDLMONITOR
DDLSECURITY
DDLSQL
DDLSTORAGE
DDLWLM
DDLXML
LOAD
MOVETABLE
REDISTRIBUTE
REGVAR
REGVARVALUES
REORG
RESTORE
ROLLFORWARD
RUNSTATS
UTILALL
info-tabla-sucesos-con-formato:
grupo-evm
( opciones-tabla-destino )
opciones-tabla-destino:
(1)
TABLE nombre-tabla
IN nombre-espacio-tablas
PCTDEACTIVATE 100
PCTDEACTIVATE entero
Notas:
1 Cada condición sólo puede especificarse una vez (SQLSTATE 42613).
Descripción
nombre-supervisor-sucesos
Nombre del supervisor de sucesos. Este nombre consta de una sola parte. Se
trata de un identificador de SQL (ordinario o delimitado). El
nombre-supervisor-sucesos no debe identificar ningún supervisor de sucesos que
exista en el catálogo (SQLSTATE 42710).
Sentencias 417
CREATE EVENT MONITOR (historial de cambios)
FOR
Especifica el tipo de suceso que se debe registrar.
CHANGE HISTORY
Especifica que este supervisor de sucesos puede registrar sucesos para cambios
en la configuración, cambios en el registro y para la ejecución de sentencias
DDL y programas de utilidad. También puede registrar la configuración inicial
y los valores de registro en el momento del inicio del supervisor de sucesos. El
conjunto de sucesos registrados depende de los controles de sucesos
especificados en la cláusula WHERE EVENT IN.
WHERE EVENT IN (control-sucesos, ...)
Especifica uno o más controles de suceso utilizados para identificar qué
sucesos captura el supervisor de sucesos.
control-sucesos
ALL Captura todos los tipos de sucesos.
BACKUP
Captura la ejecución del programa de utilidad de copia de
seguridad en línea.
CFGALL
Captura todos los parámetros de configuración y los tipos de
sucesos de variable de registro.
DBCFG
Captura los cambios en los parámetros de configuración de la base
de datos.
DBCFGVALUES
Registra los valores iniciales para todos los parámetros de
configuración de la base de datos en el momento del inicio del
supervisor de sucesos si el supervisor de sucesos no ha capturado
la actualización de alguno de los parámetros de configuración de la
base de datos.
DBMCFG
Captura los cambios en los parámetros de configuración del gestor
de la base de datos.
DBMCFGVALUES
Registra los valores iniciales para todos los parámetros de
configuración del gestor de la base de datos en el momento del
inicio del supervisor de sucesos si el supervisor de sucesos no ha
capturado la actualización de alguno de los parámetros de
configuración del gestor de la base de datos.
DDLALL
Captura la ejecución para todos los tipos de sentencias DDL.
DDLDATA
Captura la ejecución de índices, secuencias, tablas y DDL de tablas
temporales.
DDLFEDERATED
Captura la ejecución de apodos, servidores, correlación de usuarios
y DDL de derivadores.
DDLMONITOR
Captura la ejecución del supervisor de sucesos y DDL de lista de
uso.
DDLSECURITY
Captura la ejecución de políticas de auditoría, asignaciones,
máscaras, roles de permiso, revocaciones, etiquetas de seguridad,
componentes de etiquetas de seguridad, políticas de seguridad y
DDL de contexto fiable.
DDLSQL
Captura la ejecución de alias, funciones, métodos, módulos,
paquetes, procedimientos, esquemas, sinónimos, transformaciones,
activadores, tipos, variables y DDL de visualización.
DDLSTORAGE
Captura la ejecución de la sentencia ALTER DATABASE,
agrupaciones de almacenamiento intermedio, grupos de
particiones, grupos de almacenamientos y DDL de espacios de
tablas.
DDLWLM
Captura la ejecución de histogramas, clases de servicio, umbrales,
conjuntos de acciones de trabajo, conjuntos de clases de trabajo y
DDL de cargas de trabajo.
DDLXML
Captura la ejecución de XSROBJECT DDL.
LOAD
Captura la ejecución del programa de utilidad de carga.
MOVETABLE
Captura la ejecución del programa de utilidad de movimiento de
tablas (invocaciones del procedimiento almacenado
ADMIN_MOVE_TABLE).
REDISTRIBUTE
Captura la ejecución del programa de utilidad del grupo de
particiones de redistribución.
REGVAR
Captura los cambios en las variables del registro inmediato.
REGVARVALUES
Registra los valores iniciales de las variables de registro en el
momento del inicio del supervisor de sucesos.
REORG
Captura la ejecución del programa de utilidad de reorganización.
RESTORE
Captura la ejecución del programa de utilidad de restauración en
línea.
ROLLFORWARD
Captura la ejecución del programa de utilidad de recuperación en
avance en línea.
RUNSTATS
Captura la ejecución del programa de utilidad runstats.
UTILALL
Captura la ejecución de los programas de utilidad de carga, de
movimiento de tablas, de copia de seguridad en línea, de
restauración en línea, de recuperación en avance en línea, de
redistribución, de reorganización y runstats.
Sentencias 419
CREATE EVENT MONITOR (historial de cambios)
WRITE TO
Especifica el destino para los datos.
TABLE
Indica que el destino de los datos del supervisor de sucesos es un conjunto de
tablas de base de datos. El supervisor de sucesos separa la corriente de datos
en uno o más grupos de datos lógicos e inserta cada grupo en una tabla
separada. Cada elemento del supervisor que está contenido dentro de un
grupo se correlaciona con una columna de tabla que tiene el mismo nombre.
En la tabla sólo se insertan los elementos para los que existe una columna de
tabla correspondiente.
info-tabla-sucesos-con-formato
Define la tabla de destino de un grupo de datos lógicos. Especifique esta
cláusula para cada agrupación que ha de registrarse. Sin embargo, si no se
especifica ninguna cláusula grupo-evm, los grupos necesarios para las opciones
control-suceso especificadas se crearán junto con los grupos lógicos CONTROL,
CHANGESUMMARY y EVMONSTART.
grupo-evm
Identifica el grupo de datos lógicos para el que está definiéndose una tabla
de destino. El valor depende del tipo de supervisor de sucesos, tal como se
muestra en la tabla siguiente:
Tipo de supervisor de
sucesos Valor grupo-evm
Historial de cambios v CONTROL
v CHANGESUMMARY
v EVMONSTART
v TXNCOMPLETION
v DDLSTMTEXEC
v DBDBMCFG
v REGVAR
v UTILSTART
v UTILSTOP
v UTILPHASE
v UTILLOCATION
opciones-tabla-destino
Identifica la tabla de destino de un grupo.
TABLE nombre-tabla
Especifica el nombre de la tabla de destino. La tabla de destino debe
ser una tabla no particionada. Si el nombre es un nombre no calificado,
el esquema de tabla toma por omisión el valor del registro especial
CURRENT SCHEMA. Si no se proporciona ningún nombre, el nombre
no calificado se obtiene de grupo-evm y de nombre-supervisor-sucesos
como se indica a continuación:
SUBSTRING(grupo-evm CONCAT ’_’
CONCAT nombre-supervisor-suceso, 1, 128)
IN nombre-espacio-tablas
Define el espacio de tablas en el que va a crearse la tabla. Si no se
proporciona un nombre de espacio de tablas, el espacio de tablas se
selecciona utilizando el mismo proceso que cuando se crea una tabla
sin nombre de espacio de tablas utilizando CREATE TABLE.
PCTDEACTIVATE entero
Si se está creando una tabla para el supervisor de sucesos en un
almacenamiento automático (no temporal) o un espacio de tablas DMS,
el parámetro PCTDEACTIVATE especifica hasta qué punto debe
llenarse el espacio de tablas antes de que el supervisor de sucesos se
desactive automáticamente. El valor especificado, que representa un
porcentaje, puede ser de 0 a 100, donde 100 significa que el supervisor
de sucesos se desactiva cuando el espacio de tablas se llena. El valor
por omisión es 100 si no se ha especificado PCTDEACTIVATE. Esta
opción se ignora para espacios de tablas SMS.
Notas
v Creación de tablas de sucesos de destino: Las tablas de sucesos de destino se
crean cuando se ejecuta la sentencia CREATE EVENT MONITOR FOR CHANGE
HISTORY si las tablas de destino no existen.
v Tablas de sucesos creadas anteriormente: Durante el proceso de CREATE
EVENT MONITOR FOR CHANGE HISTORY, si ya se ha definido una tabla de
sucesos para que la utilice otro supervisor de sucesos, la sentencia CREATE
EVENT MONITOR FOR CHANGE HISTORY falla y se devuelve un error al
programa de aplicación. Una tabla de sucesos se habrá definido para que la
utilice otro supervisor de sucesos si el nombre de la tabla coincide con un valor
que se encuentra en la vista de catálogo SYSCAT.EVENTTABLES. Si la tabla de
sucesos existe y ésta no se ha definido para que la utilice otro supervisor de
sucesos, no se creará una tabla, se pasará por alto cualquier otro parámetro de
opciones de tabla y el proceso continuará. Se devolverá un aviso al programa de
aplicación.
v Descarte de supervisores de sucesos: Al descartar el supervisor de sucesos no se
descarta la tabla de sucesos. Las tablas de sucesos asociadas deben descartarse
manualmente después de que se descarte el supervisor de sucesos.
v Poda: las tablas de sucesos deben podarse manualmente.
Sentencias 421
CREATE EVENT MONITOR (historial de cambios)
Ejemplos
v Ejemplo 1: Este ejemplo crea un supervisor de sucesos del historial de cambios
denominado CFG_WITH_OFFLINE que registra los cambios y los valores
iniciales de la configuración.
CREATE EVENT MONITOR CFG_WITH_OFFLINE
FOR CHANGE HISTORY WHERE EVENT IN (CFGALL)
WRITE TO TABLE
CHANGESUMMARY (TABLE CHG_SUMMARY_HISTORY),
DBDBMCFG (TABLE DB_DBM_HISTORY),
REGVAR (TABLE REGVAR_HISTORY)
AUTOSTART
En este ejemplo, las tablas de destino se especifican de forma explícita. La
sentencia anterior crea las tablas siguientes:
CHG_SUMMARY_HISTORY
DB_DBM_HISTORY
REGVAR_HISTORY
v Ejemplo 2: Este ejemplo crea un supervisor de sucesos del historial de cambios
denominado BKP_REST que recopila los sucesos que describen toda la copia de
seguridad en línea y restaura las ejecuciones de los programas de utilidad.
CREATE EVENT MONITOR BKP_REST
FOR CHANGE HISTORY WHERE EVENT IN (BACKUP, RESTORE)
WRITE TO TABLE
En este ejemplo, las tablas de destino no se especifican de forma explícita. La
sentencia CREATE EVENT MONITOR sólo crea las tablas de destino necesarias
en función de los controles especificados en la cláusula WHERE EVENT IN,
junto con las tablas para los grupos de datos lógicos CONTROL,
CHANGESUMMARY y EVMONSTART. Los controles BACKUP y RESTORE
permiten la recopilación de sucesos de programas de utilidad para realizar
copias de seguridad en línea y restaurar los grupos de datos lógicos UTILSTART,
UTILSTOP, UTILLOCATION y UTILPHASE. La sentencia anterior crea las tablas
siguientes:
CONTROL_BKP_REST
CHANGESUMMARY_BKP_REST
EVMONSTART_BKP_REST
UTILSTART_BKP_REST
UTILSTOP_BKP_REST
UTILLOCATION_BKP_REST
UTILPHASE_BKP_REST
Invocación
Autorización
Sintaxis
AUTOSTART
MANUALSTART
info-tabla-sucesos-con-formato:
grupo-evm
( opciones-tabla-destino )
opciones-tabla-destino:
(1)
TABLE nombre-tabla
IN nombre-espacio-tablas
PCTDEACTIVATE 100
PCTDEACTIVATE entero
Notas:
1 Cada opción de tabla se puede especificar una vez como máximo (SQLSTATE
42613).
Sentencias 423
CREATE EVENT MONITOR (bloqueo)
Descripción
nombre-supervisor-sucesos
Nombre del supervisor de sucesos. Este nombre consta de una sola parte. Se
trata de un identificador de SQL (ordinario o delimitado). El
nombre-supervisor-sucesos no debe identificar ningún supervisor de sucesos que
ya exista en el catálogo (SQLSTATE 42710).
FOR
Especifica el tipo de suceso que se debe registrar.
LOCKING
Especifica que este supervisor de sucesos pasivo registrará cualquier
bloqueo que se genere cuando DB2 se ejecute en una o más de estas
condiciones:
v LOCKTIMEOUT: el bloqueo ha superado el tiempo de espera.
v DEADLOCK: el bloqueo estaba implicado en un punto muerto (víctima
y participantes).
v LOCKWAIT: los bloqueos no se adquieren en la duración especificada.
La creación del supervisor de sucesos de bloqueo no indica que los datos
de bloqueo se recopilarán de manera inmediata. El suceso de bloqueo real
de interés se controla en el nivel de la carga de trabajo o de la base de
datos.
WRITE TO
Especifica el destino para los datos.
TABLE
Indica que el destino de los datos del supervisor de sucesos es un conjunto
de tablas de sucesos con formato. El supervisor de sucesos separa la
corriente de datos en uno o más grupos de datos lógicos e inserta cada
grupo en una tabla separada. Los datos para los grupos que tienen una
tabla de destino se conservan, mientras que los datos para los grupos que
no tienen una tabla de destino se descartan. Cada elemento del supervisor
que está contenido dentro de un grupo se correlaciona con una columna de
tabla que tiene el mismo nombre. En la tabla sólo se insertan los elementos
para los que existe una columna de tabla correspondiente. Los demás
elementos se descartan.
info-tabla-sucesos-con-formato
Define las tablas de sucesos con formato de destino para un supervisor
de sucesos. Esta cláusula debe especificarse para cada agrupación que
deba registrarse. Sin embargo, si no se especifica ninguna cláusula
grupo-evm, se registran todos los grupos del tipo de supervisor de
sucesos.
grupo-evm
Identifica un grupo de datos lógicos para el que está definiéndose
una tabla de destino. El valor depende del tipo de supervisor de
sucesos, tal como se muestra en la tabla siguiente:
Tipo de supervisor de
sucesos Valor grupo-evm
Bloqueo v LOCK
v LOCK_PARTICIPANTS
v LOCK_PARTICIPANT_ACTIVITIES
v LOCK_ACTIVITY_VALUES
v CONTROL
Sentencias 425
CREATE EVENT MONITOR (bloqueo)
Notas
v La tabla de destino se crea cuando la sentencia CREATE EVENT MONITOR
FOR LOCKING se ejecuta, si no existe ya.
v Durante el proceso de CREATE EVENT MONITOR FOR LOCKING, si se
encuentra una tabla que ya se había definido para que la utilizara otro
supervisor de sucesos, la sentencia CREATE EVENT MONITOR FOR LOCKING
no se ejecuta satisfactoriamente y se envía un error al programa de aplicación.
Una tabla se habrá definido para que la utilice otro supervisor de sucesos si el
nombre de la tabla coincide con un valor que se encuentra en la vista de
catálogo SYSCAT.EVENTTABLES. Si la tabla existe y no se define para que la
utilice otro supervisor de sucesos, el supervisor de sucesos volverá a utilizar la
tabla.
v Al descartar el supervisor de sucesos no se descartará ninguna tabla. Las tablas
asociadas deben descartarse después de que se descarte el supervisor de sucesos.
v Los datos de suceso de bloqueo no se depurarán de forma automática desde las
tablas de sucesos sin formato o desde las tablas comunes creadas por el
Sentencias 427
CREATE EVENT MONITOR (bloqueo)
Ejemplos
v Ejemplo 1: en este ejemplo se crea un supervisor de sucesos de bloqueo
LOCKEVMON que recopilará los sucesos de bloqueo que tengan lugar en la
base de datos de creación.
CREATE EVENT MONITOR LOCKEVMON
FOR LOCKING
WRITE TO TABLE
Este supervisor de sucesos graba su salida en las tablas siguientes:
LOCK_LOCKEVMON
LOCK_PARTICIPANTS_LOCKEVMON
LOCK_PARTICIPANT_ACTIVITIES_LOCKEVMON
LOCK_ACTIVITY_VALUES_LOCKEVMON
CONTROL_LOCKEVMON
v Ejemplo 2: en este ejemplo se crea un supervisor de sucesos de bloqueo
LOCKEVMON que recopilará los sucesos de bloqueo que tengan lugar en la
base de datos de creación y los almacenará en la tabla de sucesos sin formato
IMRAN.LOCKEVENTS.
CREATE EVENT MONITOR LOCKEVMON
FOR LOCKING
WRITE TO UNFORMATTED EVENT TABLE (TABLE IMRAN.LOCKEVENTS)
v Ejemplo 3: en este ejemplo se crea un supervisor de sucesos de bloqueo
LOCKEVMON que recopilará los sucesos de bloqueo que tengan lugar en la
base de datos de creación y los almacenará en la tabla de sucesos sin formato
IMRAN.LOCKEVENTS en el espacio de tablas APPSPACE. El supervisor de
sucesos se desactivará cuando el espacio de tablas esté un 85% lleno.
CREATE EVENT MONITOR LOCKEVMON
FOR LOCKING
WRITE TO UNFORMATTED EVENT TABLE
(TABLE IMRAN.LOCKEVENTS IN APPSPACE PCTDEACTIVATE 85)
Invocación
Autorización
Sintaxis
opciones-filtro-y-recopilación
AUTOSTART
MANUALSTART
opciones-filtro-y-recopilación:
condición-suceso:
AND
(1)
UPDATED_SINCE_BOUNDARY_TIME
NUM_EXECUTIONS > constante-entera
STMT_EXEC_TIME <
<=
=
>=
Sentencias 429
Sentencia CREATE EVENT MONITOR (antememoria de paquete)
info-tabla-sucesos-con-formato:
grupo-evm
( opciones-tabla-destino )
opciones-tabla-destino:
(2)
TABLE nombre-tabla
IN nombre-espacio-tablas
PCTDEACTIVATE 100
PCTDEACTIVATE entero
Notas:
1 Cada condición sólo puede especificarse una vez (SQLSTATE 42613).
2 Cada opción de tabla se puede especificar una vez como máximo (SQLSTATE
42613).
Descripción
nombre-supervisor-sucesos
Nombre del supervisor de sucesos. Este nombre consta de una sola parte. Se
trata de un identificador de SQL (ordinario o delimitado). El
nombre-supervisor-sucesos no debe identificar ningún supervisor de sucesos que
ya exista en el catálogo (SQLSTATE 42710).
FOR
Especifica el tipo de suceso que se debe registrar.
PACKAGE CACHE
Especifica que este supervisor de sucesos registrará un suceso cuando la
entrada de antememoria de una sentencia de SQL estático o dinámico se
vacíe de la antememoria de paquete. Este supervisor de sucesos no es un
supervisor pasivo e iniciará el registro de sucesos en cuanto se active.
opciones-filtro-y-recopilación
Especifique un conjunto de opciones de filtro y recopilación.
WHERE
condición-suceso
Define un filtro que determina si las entradas que se vacían de la
antememoria de paquete deben dar lugar a que se produzca un suceso.
Si la condición del suceso es TRUE para una entrada en particular que
está vaciándose de la antememoria de paquete, esa entrada se
registrará como suceso.
Esta cláusula es una forma especial de la cláusula WHERE que no
debe confundirse con una condición de búsqueda estándar. Se trata de
una simple cláusula WHERE que incluye la utilización de los
operadores NOT, OR y LIKE, a diferencia de la cláusula WHERE que
se especifica para los supervisores de sucesos CONNECTIONS,
TRANSACTIONS y STATEMENTS.
Sentencias 431
Sentencia CREATE EVENT MONITOR (antememoria de paquete)
Tipo de supervisor de
sucesos Valor grupo-evm
Antememoria de paquete v PKGCACHE
v PKGCACHE_METRICS
v PKGCACHE_STMT_ARGS
v CONTROL
IN nombre-espacio-tablas
Especifica el espacio de tablas en el que debe crearse la tabla. La
sentencia CREATE EVENT MONITOR FOR PACKAGE CACHE no
crea espacios de tablas.
Si no se proporciona un nombre de espacio de tablas, el espacio de
tablas se selecciona utilizando el mismo proceso que cuando se crea
una tabla sin nombre de espacio de tablas utilizando CREATE TABLE.
El tamaño de la página del espacio de tablas afecta a las longitudes de
INLINE LOB utilizadas. Considere la posibilidad de especificar un
espacio de tablas con un tamaño de página lo más grande posible para
mejorar el rendimiento de INSERT del supervisor de sucesos.
PCTDEACTIVATE entero
Si se está creando una tabla para el supervisor de sucesos en un
almacenamiento automático (no temporal) o un espacio de tablas DMS,
el parámetro PCTDEACTIVATE especifica hasta qué punto debe
llenarse el espacio de tablas antes de que el supervisor de sucesos se
desactive automáticamente. El valor especificado, que representa un
porcentaje, puede ser de 0 a 100, donde 100 significa que el supervisor
de sucesos se desactiva cuando el espacio de tablas se llene por
completo. El valor por omisión que se presupone es 100 si no se
especifica PCTDEACTIVATE. Esta opción se ignora para espacios de
tablas SMS.
Notas
v La tabla de destino se crea al ejecutarse la sentencia CREATE EVENT MONITOR
FOR PACKAGE CACHE, si todavía no existe.
v Durante el proceso CREATE EVENT MONITOR FOR PACKAGE CACHE, si se
detecta que ya se había definido una tabla de destino para que la utilice otro
supervisor de sucesos, la sentencia CREATE EVENT MONITOR FOR PACKAGE
CACHE no se ejecutará correctamente y se devolverá un error al programa de
aplicación. Una tabla se habrá definido para que la utilice otro supervisor de
sucesos si el nombre de la tabla coincide con un valor que se encuentra en la
Sentencias 433
Sentencia CREATE EVENT MONITOR (antememoria de paquete)
Restricciones
v Durante la desactivación de la base de datos, el supervisor de sucesos de
antememoria de paquete no recopilará las entradas desalojadas.
Ejemplos
v Ejemplo 1: en este ejemplo se crea un supervisor de sucesos de antememoria de
paquete denominado CACHEEVMON que recopilará los datos relacionados con
sucesos de desalojo de sección de antememoria de paquete y grabará los datos
en las tablas.
CREATE EVENT MONITOR CACHEEVMON
FOR PACKAGE CACHE
WRITE TO TABLE
Este supervisor de sucesos graba su salida en las tablas siguientes:
PKGCACHE_CACHEEVMON
PKGCACHE_METRICS_CACHEEVMON
PKGCACHE_STMT_ARGS
CONTROL_CACHEEVMON
v Ejemplo 2: en este ejemplo se crea un supervisor de sucesos de antememoria de
paquete denominado CACHESTMTEVMON que recopilará los datos
relacionados con sucesos de desalojo de sección de antememoria de paquete y
los almacenará en la tabla de sucesos sin formato ALAN.STMTEVENTS.
CREATE EVENT MONITOR CACHESTMTEVMON
FOR PACKAGE CACHE
WRITE TO UNFORMATTED EVENT TABLE (TABLE ALAN.STMTEVENTS)
v Ejemplo 3: en este ejemplo se crea un supervisor de sucesos de antememoria de
paquete denominado CACHESTMTEVMON que recopilará los datos
relacionados con sucesos de desalojo de sección de antememoria de paquete y
los almacenará en la tabla de sucesos sin formato ALAN.STMTEVENTS, en el
espacio de tablas APPSPACE. El supervisor de sucesos se desactivará cuando el
espacio de tablas esté un 85% lleno.
CREATE EVENT MONITOR CACHESTMTEVMON
FOR PACKAGE CACHE
WRITE TO UNFORMATTED EVENT TABLE
(TABLE ALAN.STMTEVENTS IN APPSPACE PCTDEACTIVATE 85)
Sentencias 435
CREATE EVENT MONITOR (estadísticas)
Invocación
Autorización
Sintaxis
CREATE EVENT MONITOR nombre-supervisor-sucesos FOR STATISTICS
AUTOSTART LOCAL
? ? ?
MANUALSTART ON MEMBER número-miembro
info-tabla-sucesos-con-formato:
? ?
,
grupo-evm
( opciones-tabla-destino )
BUFFERSIZE 4 BLOCKED
? ?
BUFFERSIZE páginas NONBLOCKED
opciones-tabla-destino:
(1)
TABLE nombre-tabla
IN nombre-espacio-tablas
PCTDEACTIVATE 100
PCTDEACTIVATE entero
opciones-archivo:
MAXFILES NONE
? ? ?
MAXFILES número-de-archivos MAXFILESIZE páginas
NONE
Notas:
1 Cada cláusula sólo puede especificarse una vez.
Descripción
nombre-supervisor-sucesos
Nombre del supervisor de sucesos. Este nombre consta de una sola parte. Se
trata de un identificador de SQL (ordinario o delimitado). El
nombre-supervisor-sucesos no debe identificar ningún supervisor de sucesos que
ya exista en el catálogo (SQLSTATE 42710).
FOR
Especifica el tipo de suceso que se debe registrar.
STATISTICS
Especifica que el supervisor de sucesos registra un suceso de clase de
trabajo, carga de trabajo o clase de servicio:
v Cada período minutos, donde período es el valor del parámetro de
configuración de base de datos wlm_collect_int
v Cuando se llama al procedimiento wlm_collect_stats
WRITE TO
Especifica el destino para los datos.
TABLE
Indica que el destino de los datos del supervisor de sucesos es un conjunto
de tablas de base de datos. El supervisor de sucesos separa la corriente de
datos en uno o más grupos de datos lógicos e inserta cada grupo en una
tabla separada. Los datos para los grupos que tienen una tabla de destino
se conservan, mientras que los datos para los grupos que no tienen una
tabla de destino se descartan. Cada elemento del supervisor que está
contenido dentro de un grupo se correlaciona con una columna de tabla
que tiene el mismo nombre. En la tabla sólo se insertan los elementos para
los que existe una columna de tabla correspondiente. Los demás elementos
se descartan.
info-tabla-sucesos-con-formato
Define las tablas de destino para un supervisor de sucesos. Esta
cláusula debe especificarse para cada agrupación que deba registrarse.
Sentencias 437
CREATE EVENT MONITOR (estadísticas)
Tipo de supervisor de
sucesos Valor grupo-evm
Estadísticas v QSTATS
v SCSTATS
v WCSTATS
v WLSTATS
v HISTOGRAMBIN
v CONTROL
opciones-tabla-destino
Identifica la tabla de destino de un grupo.
TABLE nombre-tabla
Especifica el nombre de la tabla de destino. La tabla de
destino debe ser una tabla no particionada. Si el nombre es
un nombre no calificado, el esquema de tabla toma por
omisión el valor del registro especial CURRENT SCHEMA.
Si no se proporciona ningún nombre, el nombre no
calificado se obtiene de grupo-evm y de
nombre-supervisor-sucesos como se indica a continuación:
substring(grupo-evm CONCAT ’_’
CONCAT nombre-supervisor-sucesos,1,128)
IN nombre-espacio-tablas
Define el espacio de tablas en el que va a crearse la tabla.
Si no se proporciona un nombre de espacio de tablas, el
espacio de tablas se selecciona utilizando el mismo proceso
que cuando se crea una tabla sin nombre de espacio de
tablas utilizando CREATE TABLE.
PCTDEACTIVATE entero
Si se está creando una tabla para el supervisor de sucesos
en un almacenamiento automático (no temporal) o un
espacio de tablas DMS, el parámetro PCTDEACTIVATE
especifica hasta qué punto debe llenarse el espacio de
tablas antes de que el supervisor de sucesos se desactive
automáticamente. El valor especificado, que representa un
porcentaje, puede ser de 0 a 100, donde 100 significa que el
supervisor de sucesos se desactiva cuando el espacio de
tablas se llene por completo. El valor por omisión que se
presupone es 100 si no se especifica PCTDEACTIVATE.
Esta opción se ignora para espacios de tablas SMS.
Sentencias 439
CREATE EVENT MONITOR (estadísticas)
Sentencias 441
CREATE EVENT MONITOR (estadísticas)
Sentencias 443
CREATE EVENT MONITOR (estadísticas)
LOCAL
El supervisor de sucesos sólo informa acerca del miembro que está en
ejecución. Ofrece un rastreo parcial de la actividad de la base de datos. Es el
valor por omisión.
Esta cláusula es válida para los supervisores de conexión o de archivos. No es
válida para supervisores de sucesos de tabla.
GLOBAL no es un ámbito válido para este tipo de supervisor de sucesos.
Normas
v El tipo de suceso STATISTICS no puede combinarse con ningún otro tipo de
suceso de una definición de supervisor de sucesos concreta.
Notas
v Las definiciones del supervisor de sucesos se registran en la vista de catálogo
SYSCAT.EVENTMONITORS. Los sucesos en sí se registran en la vista de
catálogo SYSCAT.EVENTS. Los nombres de las tablas de destino se graban en la
vista de catálogo SYSCAT.EVENTTABLES.
v Si el miembro en el que se debe ejecutar el supervisor de sucesos no está activo,
la activación del supervisor de sucesos tiene lugar cuando se vuelve a activar ese
miembro.
v Una vez activado un supervisor de sucesos, este se comporta como un
supervisor de sucesos de inicio automático hasta que el supervisor de sucesos se
desactiva explícitamente o se recicla la instancia. Es decir, si un supervisor de
sucesos está activo cuando se desactiva un miembro y ese miembro se vuelve a
activar posteriormente, el supervisor de sucesos también se vuelve a activar
explícitamente.
v Supervisores de sucesos de grabación en tabla: Notas generales:
– Todas las tablas de destino se crean cuando se ejecuta la sentencia CREATE
EVENT MONITOR.
– Si la creación de una tabla no se realiza satisfactoriamente por cualquier
razón, se envía un error al programa de aplicación y la sentencia CREATE
EVENT MONITOR no se ejecuta satisfactoriamente.
– Una tabla de destino sólo puede utilizarla un supervisor de sucesos. Durante
el proceso de CREATE EVENT MONITOR, si se encuentra una tabla de
destino que ya se había definido para que la utilizara otro supervisor de
sucesos, la sentencia CREATE EVENT MONITOR no se ejecuta
satisfactoriamente y se envía un error al programa de aplicación. Una tabla se
habrá definido para que la utilice otro supervisor de sucesos si el nombre de
la tabla coincide con un valor que se encuentra en la vista de catálogo
SYSCAT.EVENTTABLES.
– Durante el proceso de CREATE EVENT MONITOR, si ya existe una tabla,
pero no se ha definido para que la utilice otro supervisor de sucesos, no se
creará ninguna tabla y el proceso continuará. Se enviará un aviso al programa
de aplicación.
– Deberán existir espacios de tablas para que pueda ejecutarse la sentencia
CREATE EVENT MONITOR. La sentencia CREATE EVENT MONITOR no
crea espacios de tablas.
– Si se han especificado, las palabras clave LOCAL y GLOBAL se pasan por
alto. Con los supervisores de sucesos WRITE TO TABLE, se inicia una hebra o
un proceso de salida del supervisor de sucesos en cada miembro de base de
datos de la instancia, y cada uno de estos procesos sólo notifica datos al
miembro en el que está ejecutándose.
Sentencias 445
CREATE EVENT MONITOR (estadísticas)
Sentencias 447
CREATE EVENT MONITOR (estadísticas)
Ejemplo
Invocación
Autorización
Sintaxis
AUTOSTART
WRITE TO TABLE info-tabla-sucesos-con-formato ?
PIPE nombre-conexión MANUALSTART
FILE nombre-vía-acceso opciones-archivo
LOCAL
? ? ?
ON MEMBER número-miembro
info-tabla-sucesos-con-formato:
? ?
,
grupo-evm
( opciones-tabla-destino )
BUFFERSIZE 4 BLOCKED
? ?
BUFFERSIZE páginas NONBLOCKED
opciones-tabla-destino:
Sentencias 449
CREATE EVENT MONITOR (violaciones de umbral)
(1)
TABLE nombre-tabla
IN nombre-espacio-tablas
PCTDEACTIVATE 100
PCTDEACTIVATE entero
opciones-archivo:
MAXFILES NONE
? ? ?
MAXFILES número-de-archivos MAXFILESIZE páginas
NONE
Notas:
1 Cada cláusula sólo puede especificarse una vez.
Descripción
nombre-supervisor-sucesos
Nombre del supervisor de sucesos. Este nombre consta de una sola parte. Se
trata de un identificador de SQL (ordinario o delimitado). El
nombre-supervisor-sucesos no debe identificar ningún supervisor de sucesos que
ya exista en el catálogo (SQLSTATE 42710).
FOR
Especifica el tipo de suceso que se debe registrar.
THRESHOLD VIOLATIONS
Especifica que el supervisor de sucesos registra un suceso de violación de
umbral cuando se viola un umbral. Dichos sucesos pueden registrarse en
cualquier punto de la vida de una actividad y no sólo al completarse.
WRITE TO
Especifica el destino para los datos.
TABLE
Indica que el destino de los datos del supervisor de sucesos es un conjunto
de tablas de base de datos. El supervisor de sucesos separa la corriente de
datos en uno o más grupos de datos lógicos e inserta cada grupo en una
tabla separada. Los datos para los grupos que tienen una tabla de destino
se conservan, mientras que los datos para los grupos que no tienen una
tabla de destino se descartan. Cada elemento del supervisor que está
contenido dentro de un grupo se correlaciona con una columna de tabla
que tiene el mismo nombre. En la tabla sólo se insertan los elementos para
los que existe una columna de tabla correspondiente. Los demás elementos
se descartan.
info-tabla-sucesos-con-formato
Define las tablas de destino para un supervisor de sucesos. Esta
cláusula debe especificarse para cada agrupación que deba registrarse.
Sin embargo, si no se especifica ninguna cláusula info-grupo-evm, se
registran todos los grupos del tipo de supervisor de sucesos.
grupo-evm
Identifica el grupo de datos lógicos para el que está definiéndose
una tabla de destino. El valor depende del tipo de supervisor de
sucesos, tal como se muestra en la tabla siguiente:
Tipo de supervisor de
sucesos Valor grupo-evm
Violaciones de umbral v THRESHOLDVIOLATIONS
v CONTROL
opciones-tabla-destino
Identifica la tabla de destino de un grupo.
TABLE nombre-tabla
Especifica el nombre de la tabla de destino. La tabla de
destino debe ser una tabla no particionada. Si el nombre es
un nombre no calificado, el esquema de tabla toma por
omisión el valor del registro especial CURRENT SCHEMA.
Si no se proporciona ningún nombre, el nombre no
calificado se obtiene de grupo-evm y de
nombre-supervisor-sucesos como se indica a continuación:
substring(grupo-evm CONCAT ’_’
CONCAT nombre-supervisor-sucesos,1,128)
IN nombre-espacio-tablas
Define el espacio de tablas en el que va a crearse la tabla.
Si no se proporciona un nombre de espacio de tablas, el
espacio de tablas se selecciona utilizando el mismo proceso
que cuando se crea una tabla sin nombre de espacio de
tablas utilizando CREATE TABLE.
PCTDEACTIVATE entero
Si se está creando una tabla para el supervisor de sucesos
en un almacenamiento automático (no temporal) o un
espacio de tablas DMS, el parámetro PCTDEACTIVATE
especifica hasta qué punto debe llenarse el espacio de
tablas antes de que el supervisor de sucesos se desactive
automáticamente. El valor especificado, que representa un
porcentaje, puede ser de 0 a 100, donde 100 significa que el
supervisor de sucesos se desactiva cuando el espacio de
tablas se llene por completo. El valor por omisión que se
presupone es 100 si no se especifica PCTDEACTIVATE.
Esta opción se ignora para espacios de tablas SMS.
Sentencias 451
CREATE EVENT MONITOR (violaciones de umbral)
nombre-conexión
El nombre de la conexión (FIFO en AIX) en la que el supervisor de
sucesos grabará los datos.
Las normas de denominación para las conexiones son específicas de las
plataformas. En sistemas operativos UNIX, los nombres de conexiones
se tratan como nombres de archivo. Como resultado, están permitidos
los nombres de conexión relativos y se tratan como nombres-vía
relativos (consulte la descripción de nombre-vía). En Windows, no
obstante, existe una sintaxis especial para un nombre de conexión y,
como consecuencia de ello, se necesitan nombres de conexión
absolutos.
La existencia de una conexión no se comprobará en el tiempo de
creación del supervisor de sucesos. Es responsabilidad de la aplicación
supervisora haber creado y abierto la conexión para lectura en el
momento en que se activa el supervisor de sucesos. Si la conexión no
está disponible en ese momento, el supervisor de sucesos se
desactivará por sí solo y anotará cronológicamente un error. (Es decir,
si se ha activado el supervisor de sucesos en el momento del inicio de
la base de datos como resultado de la opción AUTOSTART, el
supervisor de sucesos anotará un error en el registro cronológico de
errores del sistema.) Si se activa el supervisor de sucesos mediante la
sentencia SET EVENT MONITOR STATE de SQL, dicha sentencia
fallará (SQLSTATE 58030).
FILE
Indica que el destino para los datos del supervisor de sucesos es un
archivo (o conjunto de archivos). El supervisor de sucesos graba la
corriente de datos como una serie de archivos numerados de 8 caracteres,
con la extensión “evt”. (por ejemplo, 00000000.evt, 00000001.evt y
00000002.evt). Los datos deben considerarse un archivo lógico incluso
cuando se dividen los datos en fragmentos más pequeños (es decir, el
inicio de la corriente de datos es el primer byte del archivo 00000000.evt; el
final de la corriente de datos es el último byte del archivo nnnnnnnn.evt).
El tamaño máximo de cada archivo se puede definir también como el
número máximo de archivos. Un supervisor de sucesos no dividirá nunca
un solo registro de sucesos entre dos archivos. Sin embargo, el supervisor
de sucesos puede grabar registros relacionados en dos archivos distintos.
Es responsabilidad de la aplicación que utiliza estos datos realizar un
seguimiento de dicha información relacionada cuando procese los archivos
de sucesos.
nombre-vía-acceso
El nombre del directorio en el que el supervisor de sucesos debe
grabar los datos de los archivos de sucesos. La vía de acceso debe ser
conocida en el servidor; no obstante, la vía de acceso propiamente
dicha puede residir en otra partición de base de datos (por ejemplo, en
un sistema UNIX, puede ser un archivo montado NFS). Se debe
utilizar una constante de serie cuando se especifica el nombre-vía.
El directorio no tiene que existir en el momento de CREATE EVENT
MONITOR. Sin embargo, se realiza una comprobación de la existencia
de la vía de acceso de destino cuando se activa el supervisor de
sucesos. En este momento, si la vía de acceso de destino no existe, se
genera un error (SQLSTATE 428A3).
Sentencias 453
CREATE EVENT MONITOR (violaciones de umbral)
Sentencias 455
CREATE EVENT MONITOR (violaciones de umbral)
Normas
v El tipo de suceso THRESHOLD VIOLATIONS no puede combinarse con ningún
otro tipo de suceso de una definición de supervisor de sucesos concreta.
Notas
v Las definiciones del supervisor de sucesos se registran en la vista de catálogo
SYSCAT.EVENTMONITORS. Los sucesos en sí se registran en la vista de
catálogo SYSCAT.EVENTS. Los nombres de las tablas de destino se graban en la
vista de catálogo SYSCAT.EVENTTABLES.
v Si el miembro en el que se debe ejecutar el supervisor de sucesos no está activo,
la activación del supervisor de sucesos tiene lugar cuando se vuelve a activar ese
miembro.
v Una vez activado un supervisor de sucesos, este se comporta como un
supervisor de sucesos de inicio automático hasta que el supervisor de sucesos se
desactiva explícitamente o se recicla la instancia. Es decir, si un supervisor de
sucesos está activo cuando se desactiva un miembro y ese miembro se vuelve a
activar posteriormente, el supervisor de sucesos también se vuelve a activar
explícitamente.
v Supervisores de sucesos de grabación en tabla: Notas generales:
– Todas las tablas de destino se crean cuando se ejecuta la sentencia CREATE
EVENT MONITOR.
– Si la creación de una tabla no se realiza satisfactoriamente por cualquier
razón, se envía un error al programa de aplicación y la sentencia CREATE
EVENT MONITOR no se ejecuta satisfactoriamente.
– Una tabla de destino sólo puede utilizarla un supervisor de sucesos. Durante
el proceso de CREATE EVENT MONITOR, si se encuentra una tabla de
destino que ya se había definido para que la utilizara otro supervisor de
sucesos, la sentencia CREATE EVENT MONITOR no se ejecuta
satisfactoriamente y se envía un error al programa de aplicación. Una tabla se
habrá definido para que la utilice otro supervisor de sucesos si el nombre de
la tabla coincide con un valor que se encuentra en la vista de catálogo
SYSCAT.EVENTTABLES.
– Durante el proceso de CREATE EVENT MONITOR, si ya existe una tabla,
pero no se ha definido para que la utilice otro supervisor de sucesos, no se
creará ninguna tabla y el proceso continuará. Se enviará un aviso al programa
de aplicación.
– Deberán existir espacios de tablas para que pueda ejecutarse la sentencia
CREATE EVENT MONITOR. La sentencia CREATE EVENT MONITOR no
crea espacios de tablas.
– Si se han especificado, las palabras clave LOCAL y GLOBAL se pasan por
alto. Con los supervisores de sucesos WRITE TO TABLE, se inicia una hebra o
un proceso de salida del supervisor de sucesos en cada miembro de base de
datos de la instancia, y cada uno de estos procesos sólo notifica datos al
miembro en el que está ejecutándose.
– Los supervisores de sucesos de grabación en tabla no graban los tipos de
sucesos siguientes del archivo de anotaciones cronológicas plano del
supervisor o del formato de conexión:
- LOG_STREAM_HEADER
- LOG_HEADER
- DB_HEADER (Los elementos db_name y db_path no se graban. El
elemento conn_time se graba en CONTROL.)
Sentencias 457
CREATE EVENT MONITOR (violaciones de umbral)
activación)
- EVMON_START (la hora en que
se inició el supervisor de
sucesos listado en EVMONNAME)
- OVERFLOWS:n (indica que se
han descartado n registros
por desbordamiento del
almacenamiento intermedio)
- LAST_DROPPED_RECORD
(última vez en que se ha
producido un desbordamiento)
MESSAGE_TIME TIMESTAMP N Indicación de fecha y hora
– En un entorno de base de datos particionada, la primera columna de cada
tabla se denomina PARTITION_KEY, es NOT NULL y es de tipo INTEGER.
Esta columna se utiliza como clave de distribución para la tabla. El valor de
esta columna se elige de forma que cada proceso del supervisor de sucesos
inserte datos en la partición de base de datos en la que está ejecutándose el
proceso; es decir, se realizan operaciones de inserción localmente en la
partición de base de datos en la que está ejecutándose el proceso del
supervisor de sucesos. En cualquier partición de base de datos, el campo
PARTITION_KEY contendrá el mismo valor. Esto significa que si se descarta
una partición de base de datos y se realiza la redistribución de los datos,
todos los datos de la partición de base de datos que se ha descartado se
dirigirán a otra partición de base de datos en lugar de distribuirse
equitativamente. Por lo tanto, antes de eliminar una partición de base de
datos, considere la supresión de todas las filas de tabla de esa partición de
base de datos.
– En un entorno de base de datos particionada, puede definirse una columna
denominada PARTITION_NUMBER para cada tabla. Esta columna es NOT
NULL y es de tipo INTEGER. Contiene el número de la partición de base de
datos en la que se han insertado los datos. A diferencia de la columna
PARTITION_KEY, la columna PARTITION_NUMBER no es obligatoria. La
columna PARTITION_NUMBER no está permitida en un entorno de base de
datos no particionada.
Atributos de tabla:
– Se utilizan atributos de tabla por omisión. Además de la clave de distribución
(sólo bases de datos particionadas), durante la creación de las tablas no se
especifica ninguna opción adicional.
– En la tabla puede crearse índices.
– Pueden añadirse atributos de tabla adicionales (como, por ejemplo, si es
volátil, RI, activadores, restricciones, etc.), pero el proceso del supervisor de
sucesos (o la hebra) los pasará por alto.
– Si se añade "not logged initially" como atributo de tabla, se desactivará al
ejecutarse COMMIT por primera vez y no volverá a activarse.
Activación del supervisor de sucesos:
– Cuando se activa un supervisor de sucesos, todos los nombres de tabla de
destino se recuperan de la vista de catálogo SYSCAT.EVENTTABLES.
– En un entorno de base de datos particionada, el proceso de activación se
produce en cada partición de base de datos de la instancia. En una partición
de base de datos en particular, el proceso de activación determina los espacios
de tablas y los grupos de particiones de base de datos para cada tabla de
destino. El supervisor de sucesos sólo se activa en una partición de base de
datos si existe, como mínimo, una tabla de destino en esa partición de base de
datos. Además, si no se encuentra alguna tabla de destino en una partición de
Sentencias 459
CREATE EVENT MONITOR (violaciones de umbral)
base de datos, se marcará esa tabla de destino para que se descarten los datos
destinados a la misma durante el proceso de ejecución.
– Si no existe una tabla de destino al activarse el supervisor de sucesos (o, en
un entorno de base de datos particionada, si el espacio de tablas no reside en
una partición de base de datos), la activación continúa y los datos que, de
otro modo, se insertarían en esta tabla, se pasan por alto.
– El proceso de activación valida cada tabla de destino. Si la validación no se
realiza satisfactoriamente, la activación del supervisor de sucesos no tiene
lugar y se graban mensajes en el archivo de anotaciones cronológicas de
administración.
– Durante la activación en un entorno de base de datos particionada, las filas
de la tabla CONTROL de FIRST_CONNECT y de EVMON_START sólo se
insertan en la partición de base de datos de catálogo. Para ello es necesario
que el espacio de tablas de la tabla CONTROL exista en la partición de base
de datos de catálogo. Si no existe en la partición de base de datos de catálogo,
dichas inserciones no se realizan.
– En un entorno de base de datos particionada, si una partición todavía no está
activa al activarse el supervisor de sucesos de grabación en tabla, el
supervisor de sucesos se activará la próxima vez que se active la partición.
Tiempo de ejecución:
– El supervisor de sucesos se ejecuta con autorización DATAACCESS.
– Si, mientras existe un supervisor de sucesos activo, no se ejecuta
satisfactoriamente una operación de inserción en una tabla de destino:
- Los cambios no confirmados se retrotraen.
- Se graba un mensaje en el archivo de anotaciones cronológicas de
administración.
- El supervisor de sucesos se desactiva.
– Si existe un supervisor de sucesos activo, ejecuta COMMIT localmente cuando
ha terminado de procesar un almacenamiento intermedio del supervisor de
sucesos.
– En un entorno que no sea una base de datos particionada o un entorno DB2
pureScale, todos los supervisores de sucesos de grabación en tabla se
desactivarán cuando finalice la última aplicación (y la base de datos no se
haya activado de forma explícita). En un entorno DB2 pureScale, los
supervisores de sucesos de grabación en tabla se desactivan en un miembro
concreto cuando el miembro se detiene y se vuelve a activar cuando el
miembro se reinicia. En un entorno de base de datos particionada, los
supervisores de sucesos de grabación en tabla se desactivan al desactivarse la
partición de catálogo.
– La sentencia DROP EVENT MONITOR no descarta tablas de destino.
– Siempre que se active un supervisor de sucesos de grabación en tabla,
obtendrá bloqueos de tabla IN en cada tabla de destino para impedir que se
modifiquen mientras el supervisor de sucesos esté activo. Los bloqueos de
tabla se mantienen en todas las tablas mientras el supervisor de sucesos está
activo. Si en cualquiera de estas tablas de destino es necesario un acceso
exclusivo (por ejemplo, cuando se va a ejecutar un programa de utilidad),
primero desactive el supervisor de sucesos para liberar los bloqueos de tabla
antes de intentar dicho acceso.
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con las versiones anteriores de los productos
DB2 y con otros productos de base de datos. Estas alternativas no son estándar y
no deberían utilizarse.
Ejemplo
Sentencias 461
CREATE EVENT MONITOR (unidad de trabajo)
Invocación
Autorización
Sintaxis
AUTOSTART
MANUALSTART
info-tabla-sucesos-con-formato:
grupo-evm
( opciones-tabla-destino )
opciones-tabla-destino:
(1)
TABLE nombre-tabla
IN nombre-espacio-tablas
PCTDEACTIVATE 100
PCTDEACTIVATE entero
Notas:
1 Cada opción de tabla se puede especificar una vez como máximo (SQLSTATE
42613).
Descripción
nombre-supervisor-sucesos
Nombre del supervisor de sucesos. Este nombre consta de una sola parte. Se
trata de un identificador de SQL (ordinario o delimitado). El
nombre-supervisor-sucesos no debe identificar ningún supervisor de sucesos que
ya exista en el catálogo (SQLSTATE 42710).
FOR
Especifica el tipo de suceso que se debe registrar.
UNIT OF WORK
Especifica que este supervisor de sucesos pasivo registrará un suceso
siempre que se complete una unidad de trabajo (es decir, siempre que
tenga lugar una operación de confirmación o retrotracción).
La creación del supervisor de sucesos de unidad de trabajo no indica que
los datos de unidad de trabajo se recopilarán de manera inmediata. El
suceso de unidad de trabajo real de interés se controla en el nivel de carga
de trabajo.
WRITE TO
Especifica el destino para los datos.
TABLE
Indica que el destino de los datos del supervisor de sucesos es un conjunto
de tablas de base de datos. El supervisor de sucesos separa la corriente de
datos en uno o más grupos de datos lógicos e inserta cada grupo en una
tabla separada. Los datos para los grupos que tienen una tabla de destino
se conservan, mientras que los datos para los grupos que no tienen una
tabla de destino se descartan. Cada elemento del supervisor que está
contenido dentro de un grupo se correlaciona con una columna de tabla
que tiene el mismo nombre. En la tabla sólo se insertan los elementos para
los que existe una columna de tabla correspondiente. Los demás elementos
se descartan.
info-tabla-sucesos-con-formato
Define las tablas de sucesos con formato de destino para un supervisor
de sucesos. Esta cláusula debe especificarse para cada agrupación que
deba registrarse. Sin embargo, si no se especifica ninguna cláusula
grupo-evm, se registran todos los grupos del tipo de supervisor de
sucesos.
grupo-evm
Identifica un grupo de datos lógicos para el que está definiéndose
una tabla de destino. El valor depende del tipo de supervisor de
sucesos, tal como se muestra en la tabla siguiente:
Tipo de supervisor de
sucesos Valor grupo-evm
Unidad de trabajo v UOW
v UOW_METRICS
v UOW_PACKGE_LIST
v UOW_EXECUTABLE_LIST
v CONTROL
Sentencias 463
CREATE EVENT MONITOR (unidad de trabajo)
Notas
v La tabla se crea cuando la sentencia CREATE EVENT MONITOR FOR UNIT OF
WORK se ejecuta, si no existe ya.
v Durante el proceso de CREATE EVENT MONITOR FOR UNIT OF WORK, si se
encuentra una tabla que ya se había definido para que la utilizara otro
supervisor de sucesos, la sentencia CREATE EVENT MONITOR FOR UNIT OF
WORK no se ejecuta satisfactoriamente y se envía un error al programa de
aplicación. Una tabla se habrá definido para que la utilice otro supervisor de
sucesos si el nombre de la tabla coincide con un valor que se encuentra en la
vista de catálogo SYSCAT.EVENTTABLES. Si ya existe la tabla y no se ha
definido para que la utilice otro supervisor de sucesos, no se crea ninguna tabla,
se omiten los otros parámetros opciones-tabla-destino de tabla y continúa el
proceso. Se enviará un aviso al programa de aplicación.
v Al descartar el supervisor de sucesos no se descartará ninguna tabla. Las tablas
asociadas deben descartarse después de que se descarte el supervisor de sucesos.
v Los datos de suceso de bloqueo no se depurarán de forma automática desde las
tablas de sucesos sin formato o desde las tablas comunes creadas por el
supervisor de sucesos. Al utilizar el proceso
EVMON_FORMAT_UE_TO_TABLES dispondrá de una opción para depurar
datos desde las tablas UE. Para los supervisores de sucesos que graban tablas
comunes, los datos de suceso se deben depurar de forma manual.
v Los datos de sucesos de tablas de sucesos sin formato se insertan en la tabla en
una columna de datos BLOB en línea. Normalmente, los datos BLOB se
almacenan en un espacio de tablas LOB independiente y pueden experimentar
como resultado una actividad general adicional del rendimiento. Cuando los
datos BLOB se colocan en línea en la página de datos de la tabla base, no
experimentan dicha actividad general. El gestor de bases de datos DB2 colocará
automáticamente en línea la parte de datos BLOB de una tabla de sucesos sin
formato si el tamaño de los datos BLOB es inferior al tamaño de página del
espacio de tablas menos el prefijo del registro. Por lo tanto, con el fin de mejorar
la eficacia y el rendimiento de las aplicaciones, se recomienda crear el supervisor
Sentencias 465
CREATE EVENT MONITOR (unidad de trabajo)
Ejemplos
v Ejemplo 1: en este ejemplo se crea un supervisor de sucesos de unidad de trabajo
UOWEVMON que recopilará datos para los sucesos de unidad de trabajo que
tengan lugar en la base de datos de creación y grabará tablas de datos utilizando
los nombres de tabla por omisión:
CREATE EVENT MONITOR UOWEVMON
FOR UNIT OF WORK
WRITE TO TABLE
Este supervisor de sucesos graba su salida en las tablas siguientes:
UOW_UOWEVMON
UOW_METRICS_UOWEVMON
UOW_PACKAGE_LIST_UOWEVMON
UOW_EXECUTABLE_LIST_UOWEVMON
UOW_CONTROL_UOWEVMON
Sentencias 467
CREATE FUNCTION
CREATE FUNCTION
La sentencia CREATE FUNCTION se utiliza para registrar o definir una función
definida por el usuario o una plantilla de función en el servidor actual.
Existen cinco tipos diferentes de funciones que se pueden crear utilizando esta
sentencia. Cada una de ellos se describe por separado.
v Escalar externo. La función se escribe en un lenguaje de programación y
devuelve un valor escalar. El ejecutable externo se registra en la base de datos,
junto con diversos atributos de la función.
v Tabla externa. La función se escribe en un lenguaje de programación y devuelve
una tabla completa. El ejecutable externo se registra en la base de datos junto
con diversos atributos de la función.
v Tabla externa OLE DB. Una función de tabla externa OLE DB definida por el
usuario está registrada en la base de datos para acceder a los datos de un
proveedor OLE DB.
v Derivada o plantilla. Una función fuente se implanta invocando otra función
(incorporada, externa, SQL o fuente) que ya está registrada en la base de datos.
Es posible crear una función parcial, denominada función de plantilla, que define
qué tipos de valores van a devolverse, pero que no contiene código ejecutable. El
usuario la correlaciona con una función fuente de datos dentro de un sistema
federado, de esta forma se puede invocar la función fuente de datos desde una
base de datos federada. Una plantilla de función puede registrarse solamente en
un servidor de aplicaciones que esté designado como servidor federado.
v Escalar, tabla o fila de SQL. El cuerpo de la función está escrito en SQL y se
define junto con el registro en la base de datos. Devuelve un valor escalar, una
tabla o una fila individual.
Invocación
Autorización
Sintaxis
( ) ?
,
declaración-parámetro
Sentencias 469
CREATE FUNCTION (escalar externa)
RETURNS tipo2-datos
AS LOCATOR
tipo3-datos CAST FROM tipo4-datos
AS LOCATOR
lista-opciones
declaración-parámetro:
IN
nombre-parámetro
(1)
OUT
INOUT
tipo1-datos
cláusula-por-omisión AS LOCATOR
tipo-incorporado
nombre-tipo-diferenciado
nombre-tipo-estructurado
REF ( nombre-tipo )
tipo-incorporado:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(1 BYTE)
CHARACTER
CHAR BYTE FOR BIT DATA
(entero )
BYTE
VARCHAR (entero )
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1)
NCHAR
NATIONAL CHAR (entero)
CHARACTER
NVARCHAR (entero)
NCHAR VARYING
NATIONAL CHAR VARYING
CHARACTER
(1M)
NCLOB
NCHAR LARGE OBJECT (entero )
NATIONAL CHARACTER LARGE OBJECT K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
XML
SYSPROC. (2) (3)
DB2SECURITYLABEL
Sentencias 471
CREATE FUNCTION (escalar externa)
cláusula-por-omisión:
DEFAULT NULL
constante
registro-especial
variable-global
( expresión )
lista-opciones:
(4)
? LANGUAGE C ? ?
JAVA SPECIFIC nombre-específico
CLR
OLE
NOT DETERMINISTIC
? ?
PARAMETER CCSID ASCII DETERMINISTIC
UNICODE
FENCED
? ?
FENCED ? THREADSAFE RETURNS NULL ON NULL INPUT
NOT THREADSAFE CALLED ON NULL INPUT
THREADSAFE
NOT FENCED ?
NO DBINFO
? ? ?
DBINFO TRANSFORM GROUP nombre-grupo
?
PREDICATES ( especificación-predicado )
especificación-predicado:
WHEN = constante
<> EXPRESSION AS nombre-expresión
<
>
<=
>=
filtro-datos
explotación-índice
explotación-índice
filtro-datos
filtro-datos:
explotación-índice:
norma-explotación
norma-explotación:
Notas:
1 OUT e INOUT sólo son válidos si la función tiene LANGUAGE C.
2 DB2SECURITYLABEL es el tipo diferenciado incorporado que debe utilizarse
para definir la columna de etiqueta de seguridad de fila de una tabla
protegida.
3 Para una columna de tipo DB2SECURITYLABEL, NOT NULL WITH
DEFAULT está implícito 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.
4 También se da soporte a LANGUAGE SQL.
Sentencias 473
CREATE FUNCTION (escalar externa)
Descripción
OR REPLACE
Especifica que se debe sustituir la definición de la función si existe una 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 los
privilegios que se han otorgado sobre la función no se ven afectados por ello.
Esta opción sólo puede especificarla el propietario del objeto. Esta opción se
ignora si no existe una definición para la función en el servidor actual. Para
sustituir una función ya existente, el nombre específico y el nombre de función
de la nueva definición tienen que ser los mismos que el nombre específico y el
nombre de función de la antigua definición, o la signatura de la nueva
definición debe coincidir con la signatura de la antigua definición. De lo
contrario, se creará una nueva función.
Si se hace referencia a la función en la definición de un permiso de fila o una
máscara de columna, la función no se puede sustituir (SQLSTATE 42893).
nombre-función
Indica el nombre de la función que se está definiendo. Consiste en el nombre,
calificado o no calificado, que designa una función. El formato no calificado de
un nombre-función es un identificador SQL. En las sentencias de SQL dinámico,
el registro especial CURRENT SCHEMA se utiliza como calificador para un
nombre de objeto no calificado. En sentencias de SQL estático, la opción de
precompilación/vinculación QUALIFIER especifica de forma implícita el
calificador para los nombres de objeto no calificados. La forma calificada es un
nombre-esquema seguido de un punto y un identificador de SQL. El nombre
calificado no debe ser el mismo que el tipo de datos del primer parámetro, si
ese parámetro es un tipo estructurado.
El nombre, incluidos los calificadores implícitos y explícitos, junto con el
número de parámetros y el tipo de datos de cada parámetro (sin tener en
cuenta ningún atributo de longitud, precisión o escala del tipo de datos) no
debe identificar una función o método descritos en el catálogo SQLSTATE
42723). El nombre no calificado, junto con el número y el tipo de datos de los
parámetros, que por supuesto es exclusivo en su esquema, no es necesario que
lo sea en todos los esquemas.
Si se especifica un nombre de dos partes, el nombre-esquema no puede empezar
por 'SYS'. De lo contrario, se genera un error (SQLSTATE 42939).
Algunos nombres que se utilizan como palabras clave en los predicados están
reservados para que los utilice el sistema y no pueden utilizarse como
nombre-función. Los nombres son SOME, ANY, ALL, NOT, AND, OR,
BETWEEN, NULL, LIKE, EXISTS, IN, UNIQUE, OVERLAPS, SIMILAR,
MATCH y los operadores de comparación. Cualquier incumplimiento de esta
norma provocará la aparición de un error (SQLSTATE 42939).
En general, puede utilizarse el mismo nombre para más de una función si
existe alguna diferencia en la signatura de las funciones.
Aunque no hay ninguna prohibición al respecto, una función de tabla externa
definida por el usuario no debe tener el mismo nombre que una función
incorporada, a menos que sea una alteración temporal intencionada. Si se
otorga a una función que tiene un significado diferente el mismo nombre (por
ejemplo, LENGTH, VALUE, MAX), con argumentos coherentes, caso de una
función escalar incorporada o una función agregada, se corre el riesgo de
provocar errores en las sentencias del SQL dinámico o al volver a enlazar las
Sentencias 475
CREATE FUNCTION (escalar externa)
Sentencias 477
CREATE FUNCTION (escalar externa)
Sentencias 479
CREATE FUNCTION (escalar externa)
Sentencias 481
CREATE FUNCTION (escalar externa)
PARAMETER STYLE
Esta cláusula se utiliza para especificar los convenios utilizados para pasar
parámetros a funciones y devolver el valor de las mismas.
DB2GENERAL
Se utiliza para especificar los convenios para pasar parámetros a funciones
externas y para devolver los valores procedentes de esas funciones, que
están definidas como método en una clase Java. Sólo puede especificarse
cuando se utiliza LANGUAGE JAVA.
El valor DB2GENRL puede utilizarse como sinónimo de DB2GENERAL.
JAVA
Significa que la función utilizará un convenio para el envío de parámetros
que se ajusta a la especificación para el lenguaje Java y las Rutinas SQLJ.
Esto sólo puede especificarse cuando se utiliza LANGUAGE JAVA, no se
han especificado como parámetros tipos de datos estructurados y no se
han especificado tipos de datos CLOB, BLOB o DBCLOB como tipos de
retorno (SQLSTATE 429B8). Las funciones PARAMETER STYLE JAVA no
dan soporte a las cláusulas FINAL CALL, SCRATCHPAD o DBINFO.
SQL
Se utiliza para especificar los convenios para pasar parámetros y para
devolver el valor de funciones externas que cumplen con los convenios de
llamada y enlace del lenguaje C, los métodos expuestos por los objetos de
automatización OLE o los métodos estáticos públicos de un objeto .NET. Se
debe especificar cuando se utiliza LANGUAGE C, LANGUAGE CLR o
LANGUAGE OLE.
PARAMETER CCSID
Especifica el esquema de codificación que se debe utilizar para todos los datos
de serie que se pasan a la función y desde ella. Si no se especifica la cláusula
PARAMETER CCSID, el valor por omisión es PARAMETER CCSID UNICODE
para las bases de datos Unicode y PARAMETER CCSID ASCII para todas 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
PARAMETER CCSID ASCII (SQLSTATE 56031). Cuando se invoca la
función, la página de códigos de la aplicación para la función es la página
de códigos de la base de datos.
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. En cualquier caso, cuando se invoca la función,
la página de códigos de la aplicación para la función es 1208.
Si la base de datos no es una base de datos Unicode y se crea una función
con PARAMETER CCSID UNICODE, la función no puede tener ningún
tipo gráfico, tipo XML ni tipos definidos por el usuario (SQLSTATE 560C1).
Sentencias 483
CREATE FUNCTION (escalar externa)
PRECAUCIÓN:
El uso de NOT FENCED en funciones que no se han codificado, revisado ni
probado adecuadamente puede comprometer la integridad de una base de
datos DB2. Las bases de datos DB2 disponen de algunos mecanismos para
hacer frente a la mayoría de los tipos de errores involuntarios más habituales
que pueden producirse, pero no pueden garantizar la integridad completa
cuando se utilizan funciones NOT FENCED definidas por el usuario.
Para una función con LANGUAGE OLE o NOT THREADSAFE, sólo puede
especificarse FENCED (SQLSTATE 42613).
Si la función es FENCED y tiene la opción NO SQL, no puede especificarse la
cláusula AS LOCATOR (SQLSTATE 42613).
Para registrar una función definida por el usuario como NOT FENCED, se
necesita autorización SYSADM, autorización DBADM o una autorización
especial (CREATE_NOT_FENCED_ROUTINE).
No se pueden crear funciones LANGUAGE CLR definidas por el usuario al
especificar la cláusula NOT FENCED (SQLSTATE 42601).
THREADSAFE o NOT THREADSAFE
Especifica si se considera que la función es segura para ejecutarse en el mismo
proceso que otras rutinas (THREADSAFE) o no (NOT THREADSAFE).
Si la función se ha definido con un LANGUAGE distinto de OLE:
v Si la función se ha definido como THREADSAFE, el gestor de bases de datos
puede invocar la función en el mismo proceso que otras rutinas. En general,
para ser THREADSAFE, una función no debe utilizar áreas de datos globales
o estáticas. En la mayoría de los manuales de consulta de programación se
Sentencias 485
CREATE FUNCTION (escalar externa)
STATIC DISPATCH
Esta cláusula opcional indica que, durante la resolución de la función, DB2
elige una función basada en los tipos estáticos (tipos declarados) de los
parámetros de la función.
EXTERNAL ACTION o NO EXTERNAL ACTION
Especifica si la función puede realizar una acción que cambie el estado de un
objeto que el gestor de bases de datos no gestiona. Un ejemplo de una acción
externa es enviar un mensaje o grabar un registro en un archivo. El valor por
omisión es EXTERNAL ACTION.
EXTERNAL ACTION
Especifica que la función realiza una acción que cambia el estado de un
objeto que el gestor de bases de datos no gestiona.
Una función con acciones externas puede devolver resultados incorrectos si
se ejecuta por tareas paralelas. Por ejemplo, si la función envía una nota
para cada llamada inicial a esa función, se enviará una nota para cada
tarea paralela, en lugar de una nota para la función. Especifique la cláusula
DISALLOW PARALLEL en el caso de las funciones que no funcionen bien
con paralelismo.
NO EXTERNAL ACTION
Especifica que la función no realiza ninguna acción que cambie el estado
de un objeto que el gestor de bases de datos no gestiona. El gestor de
bases de datos utiliza esta información durante la optimización de las
sentencias de SQL.
NO SCRATCHPAD o SCRATCHPAD longitud
Esta cláusula opcional especifica si debe proporcionarse una memoria de
trabajo para una función externa. (Es muy recomendable que las funciones
definidas por el usuario sean reentrantes, por lo que una memoria de trabajo
proporciona un medio para que la función “guarde el estado” entre una
llamada y la siguiente.)
Si se especifica SCRATCHPAD, cuando se efectúa la primera invocación de la
función definida por el usuario, se asigna memoria para que la función externa
utilice una memoria de trabajo. Esta memoria de trabajo tiene las siguientes
características:
v longitud, si se especifica, define el tamaño en bytes de la memoria de trabajo;
este valor debe estar comprendido entre 1 y 32.767 (SQLSTATE 42820). El
tamaño por omisión es 100 bytes.
v El valor de inicialización consta sólo de ceros hexadecimales: X'00'.
v Su ámbito es la sentencia de SQL. Existe una memoria de trabajo para
referencia a la función externa en la sentencia de SQL. Por tanto, si la
función UDFX de la sentencia siguiente se define con la palabra clave
SCRATCHPAD, se asignarían tres memorias de trabajo.
SELECT A, UDFX(A) FROM TABLEB
WHERE UDFX(A) > 103 OR UDFX(A) < 19
Si se especifica ALLOW PARALLEL o se toma por omisión, el ámbito es
diferente del que se ha mostrado anteriormente. Si la función se ejecuta en
varias particiones de base de datos, se asigna una memoria de trabajo en
cada partición donde se procesa la función, para cada referencia a la función
en la sentencia de SQL. De forma similar, si la consulta se ejecuta con el
paralelismo de intrapartición habilitado, pueden asignarse más de tres
memorias de trabajo.
v Su contenido se conserva. Se conserva el contenido de una llamada de
función externa a la llamada siguiente. Los cambios hechos en la memoria
Sentencias 487
CREATE FUNCTION (escalar externa)
Los registros especiales que no pueden actualizarse como, por ejemplo, los
registros especiales de indicación de fecha y hora, reflejan una propiedad de la
sentencia que está ejecutándose actualmente y, por lo tanto, se establecen en
sus valores por omisión.
NO DBINFO o DBINFO
Esta cláusula opcional especifica si se pasará cierta información específica
conocida por DB2 a la UDF como un argumento en tiempo de una invocación
adicional (DBINFO) o no (NO DBINFO). NO DBINFO es el valor por omisión.
DBINFO no está soportada para LANGUAGE OLE (SQLSTATE 42613) ni para
PARAMETER STYLE JAVA.
Si se especifica DBINFO, entonces se pasa una estructura a la UDF que
contiene la información siguiente:
v Nombre de base de datos - el nombre de la base de datos conectada
actualmente.
v ID de aplicación - ID de aplicación exclusivo que se establece para cada
conexión con la base de datos.
v ID de autorización de aplicación - el ID de autorización de ejecución de la
aplicación, independientemente de las UDF anidadas existentes entre esta
UDF y la aplicación.
v Página de códigos - identifica la página de códigos de la base de datos.
v Nombre de esquema - si se dan las mismas condiciones que para el Nombre
de tabla, contiene el nombre del esquema; de lo contrario, está en blanco.
v Nombre de tabla - si, y sólo si, la referencia a UDF está en el lado derecho
de una cláusula SET en una sentencia UPDATE o un elemento de la lista
VALUES de una sentencia INSERT, contiene el nombre no calificado de la
tabla que se actualiza o inserta; de otro modo, está en blanco.
v Nombre de columna - exactamente bajo las mismas condiciones que para el
Nombre de tabla, contiene el nombre de la columna que se está actualizando
o insertando; de lo contrario está en blanco.
v Versión/release de base de datos - identifica la versión, release y nivel de
modificación del servidor de bases de datos que invoca la UDF.
v Plataforma - contiene el tipo de plataforma del servidor.
v Números de columna del resultado de función de la tabla - no es aplicable a
las funciones escalares externas.
TRANSFORM GROUP nombre-grupo
Indica el grupo de transformación que se debe utilizar, cuando se invoca la
función, para las transformaciones de tipo estructurado definidas por el
usuario. Es necesaria una transformación si la definición de la función incluye
un tipo estructurado definido por el usuario, ya sea como parámetro o como
tipo de datos. Si no se especifica esta cláusula, se utiliza el nombre de grupo
por omisión, DB2_FUNCTION. Si el nombre-grupo especificado (o tomado por
omisión) no está definido para un tipo estructurado referenciado, se produce
en error (SQLSTATE 42741). Si una función de transformación necesaria FROM
SQL o TO SQL no está definida para el nombre de grupo y tipo estructurado
proporcionados, se produce un error (SQLSTATE 42744).
Las funciones de transformación, FROM SQL y TO SQL, ya sea especificadas
explícita o implícitamente, deben ser funciones de SQL que realicen una
transformación adecuada entre el tipo estructurado y sus atributos de tipo
incorporados.
PREDICATES
Define el filtrado o la utilización de la extensión de índice que se lleva a cabo
Sentencias 489
CREATE FUNCTION (escalar externa)
Sentencias 491
CREATE FUNCTION (escalar externa)
Notas
v La determinación de si un tipo de datos es convertible a otro no tiene en cuenta
la longitud, precisión ni escala de los tipos de datos con parámetros, como son
CHAR y DECIMAL. Por esta razón, pueden producirse errores al utilizar una
función como resultado del intento de conversión de un valor del tipo de datos
fuente a un valor del tipo de datos de destino. Por ejemplo, VARCHAR es
convertible a DATE, pero si el tipo de fuente está realmente definido como
VARCHAR(5), al utilizar la función se producirá un error.
v Al elegir los tipos de datos para los parámetros de una función definida por el
usuario, tenga en cuenta las normas de promoción que afectarán a sus valores
de entrada (consulte el apartado “Promoción de tipos de datos”). Por ejemplo,
una constante que puede utilizarse como un valor de entrada puede tener un
tipo de datos incorporado diferente al que se espera y, lo que es más
significativo, es posible que no se promueva al tipo de datos que se espera. De
acuerdo con las normas para la promoción, suele aconsejarse la utilización de los
siguientes tipos de datos para parámetros:
– INTEGER en lugar de SMALLINT
– DOUBLE en lugar de REAL
– VARCHAR en lugar de CHAR
– VARGRAPHIC en lugar de GRAPHIC
v Para asegurar la portabilidad de las UDF de una plataforma a otra, no deben
utilizarse los tipos de datos siguientes:
– FLOAT- utilice DOUBLE o REAL en su lugar.
– NUMERIC- utilice DECIMAL en su lugar.
– LONG VARCHAR- utilice CLOB (o BLOB) en su lugar.
v Una función y un método no pueden estar en una relación de alteración
temporal (SQLSTATE 42745). Para obtener más información sobre la alteración
temporal, consulte “CREATE TYPE (estructurada)”.
v Una función no puede tener la misma signatura que un método (cuando se
compara el primer tipo-parámetro de la función con el tipo-sujeto del método)
(SQLSTATE 42723).
v La creación de una función 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.
v En un entorno de base de datos particionada, el uso de SQL en funciones o
métodos externos definidos por el usuario no recibe soporte (SQLSTATE 42997).
v Sólo las rutinas que se han definido como NO SQL pueden utilizarse para
definir una extensión de índice (SQLSTATE 428F8).
v Si la función permite SQL, el programa externo no debe intentar acceder a
ningún objeto federado (SQLSTATE 55047).
v Se invocará una rutina Java definida como NOT FENCED como si se hubiese
definido como FENCED THREADSAFE.
v Los parámetros de XML sólo están soportados en las funciones externas de
LANGUAGE JAVA si se especifica la cláusula PARAMETER STYLE
DB2GENERAL.
v Restricciones de acceso a las tablas
Si una función se ha definido como READS SQL DATA, ninguna sentencia de la
función podrá acceder a la tabla que la sentencia que ha invocado la función
está modificando (SQLSTATE 57053). Por ejemplo, supongamos que la función
definida por el usuario BONUS() se ha definido como READS SQL DATA. Si se
invoca la sentencia UPDATE EMPLOYEE SET SALARY = SALARY +
BONUS(EMPNO), no podrá leerse ninguna sentencia de SQL de la función
BONUS desde la tabla EMPLOYEE.
v Establecimiento del valor por omisión: los parámetros de una función que están
definidos con un valor por omisión se establecen en su valor por omisión
Sentencias 493
CREATE FUNCTION (escalar externa)
Ejemplos
v Ejemplo 1: Pellow registra la función CENTRE en su esquema PELLOW.
Permitiremos que las palabras clave que se tomarán por omisión se encarguen
de realizar tal acción y que el sistema proporcione un nombre específico de la
función:
CREATE FUNCTION CENTRE (INT,FLOAT)
RETURNS FLOAT
EXTERNAL NAME ’mod!middle’
LANGUAGE C
PARAMETER STYLE SQL
DETERMINISTIC
NO SQL
NO EXTERNAL ACTION
v Ejemplo 2: Ahora, McBride (que tiene la autorización DBADM) registra otra
función CENTRE en el esquema PELLOW, dándole un nombre explícito
específico para el uso posterior del lenguaje de definición de datos y
proporcionando explícitamente todos los valores de palabras clave. Observe que
esta función utiliza una memoria de trabajo y que, presumiblemente, está
acumulando datos que afectan a los resultados posteriores. Debido a que está
especificado DISALLOW PARALLEL, cualquier referencia a la función no se
paraleliza y, por lo tanto, se utiliza una sola memoria de trabajo para realizar
cierta inicialización una sola vez y guardar los resultados.
CREATE FUNCTION PELLOW.CENTRE (FLOAT, FLOAT, FLOAT)
RETURNS DECIMAL(8,4) CAST FROM FLOAT
SPECIFIC FOCUS92
EXTERNAL NAME ’effects!focalpt’
LANGUAGE C PARAMETER STYLE SQL
DETERMINISTIC FENCED NOT NULL CALL NO SQL NO EXTERNAL ACTION
SCRATCHPAD NO FINAL CALL
DISALLOW PARALLEL
v Ejemplo 3: El ejemplo siguiente es el programa de función definida por el usuario
en lenguaje C que se escribe para implementar la norma output = 2 * input -
4 que devuelve NULL si, y sólo si, la entrada es nula. Podría haberse escrito
incluso de forma más sencilla (es decir, sin comprobación de nulos) si la
sentencia CREATE FUNCTION hubiera utilizado NOT NULL CALL. La
sentencia CREATE FUNCTION:
CREATE FUNCTION ntest1 (SMALLINT)
RETURNS SMALLINT
EXTERNAL NAME ’ntest1!nudft1’
LANGUAGE C PARAMETER STYLE SQL
DETERMINISTIC NOT FENCED NULL CALL
NO SQL NO EXTERNAL ACTION
El código del programa:
#include "sqlsystm.h"
/* NUDFT1 ES UNA FUNCIÓN ESCALAR DEFINIDA POR EL USUARIO */
/* udft1 acepta como entrada argumentos smallint
y produce como salida argumentos smallint
e implanta la norma:
if (input is null)
set output = null;
else
set output = 2 * input - 4;
Sentencias 495
CREATE FUNCTION (escalar externa)
*/
void SQL_API_FN nudft1
(short *input, /* puntero al argumento de entrada */
short *output, /* puntero al resultado */
short *input_ind, /* puntero a variable de indicador de entrada */
short *output_ind, /* puntero a variable de indicador de salida */
char sqlstate[6], /* sqlstate, permite término nulo */
char fname[28], /* nombre función calificado al completo, termino nulo */
char finst[19], /* nombre específico función, término nulo */
char msgtext[71]) /* almacenamiento intermedio texto mensaje, término nulo */
{
/* comprobar primero si la entrada es nula */
if (*input_ind == -1)
{
/* si la entrada es nula, hacer nula la salida */
*output_ind = -1;
}
else
{
/* si la entrada no es nula. establecer la salida en 2*input-4 */
*output = 2 * (*input) - 4;
/* establecer el indicador de salida nula en cero */
*output_ind = 0;
}
/* marcar finalización correcta dejando sqlstate sin cambiar */
/* y salir */
return;
}
/* end of UDF: NUDFT1 */
v Ejemplo 4: El siguiente ejemplo registra una UDF Java que devuelve la posición
de la primera vocal de una serie. La UDF está escrita en Java, se debe ejecutar
como delimitada y es el método findvwl de clase javaUDFs.
CREATE FUNCTION findv ( CLOB(100K))
RETURNS INTEGER
FENCED
LANGUAGE JAVA
PARAMETER STYLE JAVA
EXTERNAL NAME ’javaUDFs.findvwl’
NO EXTERNAL ACTION
CALLED ON NULL INPUT
DETERMINISTIC
NO SQL
v Ejemplo 5: Este ejemplo describe un predicado definido por el usuario, WITHIN,
que utiliza como entrada dos parámetros, g1 y g2, de tipo SHAPE:
CREATE FUNCTION within (g1 SHAPE, g2 SHAPE)
RETURNS INTEGER
LANGUAGE C
PARAMETER STYLE SQL
DETERMINISTIC
NOT FENCED
NO SQL
NO EXTERNAL ACTION
EXTERNAL NAME ’db2sefn!SDESpatilRelations’
PREDICATES
WHEN = 1
FILTER USING mbrOverlap(g1..xmin, g1..ymin, g1..xmax, g1..max,
g2..xmin, g2..ymin, g2..xmax, g2..ymax)
SEARCH BY INDEX EXTENSION gridIndex
WHEN KEY(g1) USE withinExplRule(g2)
WHEN KEY(g2) USE withinExplRule(g1)
La descripción de la función WITHIN es similar a la de cualquier función
definida por el usuario, pero las adiciones siguientes indican que esta función se
puede utilizar en un predicado definido por el usuario.
Sentencias 497
CREATE FUNCTION (escalar externa)
Actualmente existe una restricción por la que sólo el lado derecho se trata
como una expresión; el término del lado izquierdo es la función definida por
el usuario correspondiente al predicado definido por el usuario.
– La cláusula SEARCH BY INDEX EXTENSION indica qué combinaciones de
extensión de índice y patrón de búsqueda se puede utilizar para este
predicado definido por el usuario. En el caso de la función DISTANCE, la
expresión designada como distExpr es también uno de los argumentos de
búsqueda que se pasa a la función productora de rangos (definida como parte
de la extensión de índice). El identificador de expresión se utiliza para definir
un nombre para la expresión, que se pasa como argumento a la función
productora de rangos.
Invocación
Autorización
Sintaxis
Sentencias 499
CREATE FUNCTION (tabla externa)
( ) ?
,
declaración-parámetro
lista-opciones
declaración-parámetro:
tipo1-datos
nombre-parámetro cláusula-por-omisión AS LOCATOR
tipo1-datos, tipo2-datos:
tipo-incorporado
nombre-tipo-diferenciado
nombre-tipo-estructurado
REF ( nombre-tipo )
tipo-incorporado:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(34)
DECFLOAT
(16)
(1 BYTE)
CHARACTER
CHAR BYTE FOR BIT DATA
(entero )
BYTE
VARCHAR (entero )
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1)
NCHAR
NATIONAL CHAR (entero)
CHARACTER
NVARCHAR (entero)
NCHAR VARYING
NATIONAL CHAR VARYING
CHARACTER
(1M)
NCLOB
NCHAR LARGE OBJECT (entero )
NATIONAL CHARACTER LARGE OBJECT K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
XML
SYSPROC. (1) (2)
DB2SECURITYLABEL
Sentencias 501
CREATE FUNCTION (tabla externa)
cláusula-por-omisión:
DEFAULT NULL
constante
registro-especial
variable-global
( expresión )
lista-opciones:
(3)
? LANGUAGE C ? ?
JAVA SPECIFIC nombre-específico
CLR
OLE
NOT DETERMINISTIC
? ?
PARAMETER CCSID ASCII DETERMINISTIC
UNICODE
NO FINAL CALL
?
FINAL CALL
DISALLOW PARALLEL ?
DATABASE PARTITIONS
ALLOW PARALLEL EXECUTE ON ALL RESULT TABLE DISTRIBUTED
NO DBINFO
? ? ?
DBINFO CARDINALITY entero TRANSFORM GROUP nombre-grupo
Notas:
1 DB2SECURITYLABEL es el tipo diferenciado incorporado que debe utilizarse
para definir la columna de etiqueta de seguridad de fila de una tabla
protegida.
2 Para una columna de tipo DB2SECURITYLABEL, NOT NULL WITH
DEFAULT está implícito 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.
3 Para obtener información acerca de la creación de funciones de tabla externa
LANGUAGE OLE DB, consulte “CREATE FUNCTION (Tabla externa OLE
Descripción
OR REPLACE
Especifica que se debe sustituir la definición de la función si existe una 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 los
privilegios que se han otorgado sobre la función no se ven afectados por ello.
Esta opción sólo puede especificarla el propietario del objeto. Esta opción se
ignora si no existe una definición para la función en el servidor actual. Para
sustituir una función ya existente, el nombre específico y el nombre de función
de la nueva definición tienen que ser los mismos que el nombre específico y el
nombre de función de la antigua definición, o la signatura de la nueva
definición debe coincidir con la signatura de la antigua definición. De lo
contrario, se creará una nueva función.
Si se hace referencia a la función en la definición de un permiso de fila o una
máscara de columna, la función no se puede sustituir (SQLSTATE 42893).
nombre-función
Indica el nombre de la función que se está definiendo. Consiste en el nombre,
calificado o no calificado, que designa una función. El formato no calificado de
un nombre-función es un identificador SQL. En las sentencias de SQL dinámico,
el registro especial CURRENT SCHEMA se utiliza como calificador para un
nombre de objeto no calificado. En sentencias de SQL estático, la opción de
precompilación/vinculación QUALIFIER especifica de forma implícita el
calificador para los nombres de objeto no calificados. La forma calificada es un
nombre-esquema seguido de un punto y un identificador de SQL. El nombre
calificado no debe ser el mismo que el tipo de datos del primer parámetro, si
ese parámetro es un tipo estructurado.
El nombre, incluidos los calificadores implícitos y explícitos, junto con el
número de parámetros y el tipo de datos de cada parámetro (sin tener en
cuenta ningún atributo de longitud, precisión o escala del tipo de datos) no
debe identificar una función descrita en el catálogo (SQLSTATE 42723). El
nombre no calificado, junto con el número y el tipo de datos de los
parámetros, que por supuesto es exclusivo en su esquema, no es necesario que
lo sea en todos los esquemas.
Si se especifica un nombre de dos partes, el nombre-esquema no puede empezar
por 'SYS' (SQLSTATE 42939).
Algunos nombres que se utilizan como palabras clave en los predicados están
reservados para que los utilice el sistema y no pueden utilizarse como
nombre-función (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.
Se puede utilizar el mismo nombre para más de una función si hay alguna
diferencia en la signatura de las funciones. Aunque no hay ninguna
prohibición al respecto, una función de tabla externa definida por el usuario no
debe tener el mismo nombre que una función incorporada.
(declaración-parámetro,...)
Identifica el número de parámetros de entrada de la función y especifica el tipo
de datos y el valor por omisión opcional de cada parámetro. En la lista debe
Sentencias 503
CREATE FUNCTION (tabla externa)
especificarse una entrada por cada parámetro que la función espera recibir. No
se permiten más de 90 parámetros (SQLSTATE 54023).
Existe la posibilidad de registrar una función que no tenga ningún parámetro.
En este caso, sigue siendo necesaria la codificación de los paréntesis, sin incluir
ningún tipo de datos. Por ejemplo:
CREATE FUNCTION WOOFER() ...
En un esquema, no se permite que dos funciones que se denominen igual
tengan exactamente el mismo tipo para todos los parámetros correspondientes.
Las longitudes, precisiones y escalas no se consideran en esta comparación de
tipos. Por esta razón, se considera que CHAR(8) y CHAR(35) tienen el mismo
tipo, al igual que DECIMAL(11,2) y DECIMAL (4,3). Para una base de datos
Unicode, se considera que CHAR(13) y GRAPHIC(8) son del mismo tipo. Hay
una agrupación más profunda de los tipos que hace que se traten como el
mismo tipo para esta finalidad como, por ejemplo, DECIMAL y NUMERIC.
Una signatura duplicada devuelve un error (SQLSTATE 42723).
nombre-parámetro
Especifica un nombre opcional para el parámetro de entrada. El nombre no
puede ser el mismo que el de cualquier otro nombre-parámetro de la lista de
parámetros (SQLSTATE 42734).
tipo-datos1
Especifica el tipo de datos del parámetro de entrada. El tipo de datos
puede ser un tipo de datos incorporado, un tipo diferenciado, un tipo
estructurado o un tipo de referencia. Para obtener una descripción más
completa de cada tipo de datos incorporado, consulte “CREATE TABLE”.
Algunos tipos de datos no se soportan en todos los idiomas. Para obtener
detalles sobre la correlación entre tipos de datos SQL y tipos de datos de
lenguaje principal, consulte “Tipos de datos que se correlacionan con tipos
de datos de SQL en aplicaciones SQL incorporadas”.
v Un parámetro de tipo fecha y hora se pasa como tipo de datos de tipo
carácter y los datos se pasan en formato ISO.
v DECIMAL (y NUMERIC) no son válidos con LANGUAGE C y OLE
(SQLSTATE 42815).
v XML no es válido con LANGUAGE OLE.
v Dado que el valor XML que se ve dentro de una función es una versión
serializada del valor XML que se pasa como parámetro en la llamada de
función, los parámetros del tipo XML deben declararse mediante la
sintaxis XML AS CLOB(n).
v CLR no da soporte a una escala DECIMAL mayor que 28 (SQLSTATE
42613).
v No se pueden especificar tipos array (SQLSTATE 42815).
Para un tipo diferenciado definido por el usuario, los atributos de longitud,
precisión o escala para el parámetro son los del tipo fuente del tipo
diferenciado (los especificados en CREATE TYPE). Un parámetro de tipo
diferenciado se pasa como tipo fuente del tipo diferenciado. Si el nombre
del tipo diferenciado no está calificado, el gestor de base de datos resuelve
el nombre de esquema buscando los esquemas en la vía de acceso de SQL.
Para un tipo estructurado definido por el usuario, deben existir las
funciones de transformación apropiadas en el grupo de transformación
asociado.
Para un tipo de referencia, el parámetro se puede especificar como
REF(nombre-tipo) si el parámetro no tiene ámbito.
DEFAULT
Especifica un valor por omisión para el parámetro. El valor por omisión
puede ser una constante, un registro especial, una variable global, una
expresión o la palabra clave NULL. Los registros especiales que se pueden
especificar como el valor por omisión son los mismos que se pueden
especificar para un valor por omisión de columna (véase
cláusula-por-omisión en la sentencia CREATE TABLE). Se pueden especificar
otros registros especiales como valor por omisión utilizando una expresión.
La expresión puede ser cualquier expresión del tipo que se describe en el
apartado "Expresiones". Si no se especifica un valor por omisión, el
parámetro no tendrá ningún valor por omisión y no se podrá omitir el
argumento correspondiente al invocar el procedimiento. El tamaño máximo
de la expresión es de 64 K bytes.
La expresión por omisión no debe modificar datos SQL (SQLSTATE 428FL
o SQLSTATE 429BL). La expresión debe ser compatible con asignaciones
con el tipo de datos del parámetro (SQLSTATE 42821).
No se puede especificar un valor por omisión para un parámetro del tipo
ARRAY, ROW o CURSOR (SQLSTATE 429BB).
AS LOCATOR
Especifica que se pasa un localizador para el valor del parámetro a la
función en lugar del valor real. Especifique AS LOCATOR sólo para
parámetros con un tipo de datos LOB o un tipo diferenciado basado en un
tipo de datos LOB (SQLSTATE 42601). El hecho de pasar localizadores en
lugar de valores puede hacer que se pasen menos bytes a la función,
especialmente cuando el valor del parámetro es muy grande.
La cláusula AS LOCATOR no tiene ningún efecto para determinar si los
tipos de datos se pueden promocionar, ni afecta a la signatura de función,
que se utiliza en la resolución de función.
Si la función es FENCED y tiene la opción NO SQL, no puede especificarse
la cláusula AS LOCATOR (SQLSTATE 42613).
RETURNS
Especifica la salida de la función.
TABLE
Especifica que el resultado de la función es una tabla. El paréntesis que
sigue a esta palabra clave delimita una lista de nombres y tipos de las
columnas de la tabla. El estilo de lista es parecido al estilo de una sentencia
CREATE TABLE simple que no tenga especificaciones adicionales
(restricciones, por ejemplo). No están permitidas más de 255 columnas
(SQLSTATE 54011).
nombre-columna
Especifica el nombre de esta columna. El nombre no puede estar
calificado y no se puede utilizar el mismo nombre para más de una
columna de la tabla.
tipo2-datos
Especifica el tipo de datos de la columna y puede ser cualquier tipo de
datos soportado para un parámetro de una UDF escrita en el lenguaje
determinado, excepto para tipos estructurados (SQLSTATE 42997).
AS LOCATOR
Cuando tipo-datos2 es un tipo LOB o un tipo diferenciado basado
Sentencias 505
CREATE FUNCTION (tabla externa)
Sentencias 507
CREATE FUNCTION (tabla externa)
Sentencias 509
CREATE FUNCTION (tabla externa)
idcls
Designa el identificador de clase del objeto OLE que se debe crear.
Puede utilizarse como una alternativa para especificar idprog en el
caso de que el objeto OLE no esté registrado con un idprog. El idcls
tiene el formato:
{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}
donde 'n' es un carácter alfanumérico. idcls no se interpreta por el
gestor de bases de datos, sólo se reenvía a las API OLE en el
momento de la ejecución.
id-método
Identifica el nombre del método del objeto OLE que se debe invocar.
NAME identificador
Esta cláusula identifica el nombre del código escrito por el usuario que
implanta la función que se está definiendo. El identificador especificado es
un identificador de SQL. El identificador SQL se utiliza como el id-biblioteca
en la serie. A menos que sea un identificador delimitado, se convierte a
mayúsculas. Si el identificador está calificado con un nombre de esquema,
se ignora la parte correspondiente al nombre del esquema. Este formato de
NAME sólo puede utilizarse con LANGUAGE C.
LANGUAGE
Esta cláusula obligatoria se emplea para especificar el convenio de la interfaz
de lenguaje para la que está escrito el cuerpo de la función definida por el
usuario.
C Esto significa que el gestor de bases de datos llamará a la función
definida por el usuario como si se tratase de una función en C. La
función definida por el usuario debe ajustarse al convenio de llamadas
y enlaces del lenguaje C, tal y como se define en el prototipo de C
estándar de ANSI.
JAVA Esto significa que el gestor de bases de datos llamará a la función
definida por el usuario como un método de una clase Java.
CLR Significa que el gestor de bases de datos llamará a la función definida
por el usuario como un método en una clase .NET. En estos momentos,
sólo se soporta LANGUAGE CLR en el caso de las funciones definidas
por el usuario que se ejecutan en los sistemas operativos Windows. No
se puede especificar NOT FENCED para una rutina CLR (SQLSTATE
42601).
OLE Significa que el gestor de bases de datos llamará a la función definida
por el usuario como si fuese un método expuesto por un objeto de
automatización OLE. La función definida por el usuario debe ajustarse
a los tipos de datos de automatización OLE y al mecanismo de
invocación, tal como se describe en la publicación OLE Automation
Programmer's Reference.
LANGUAGE OLE sólo recibe soporte para las funciones definidas por
el usuario que están almacenadas en DB2 para Windows de 32 bits.
Para obtener información acerca de la creación de funciones de tabla
externa LANGUAGE OLE DB, consulte “CREATE FUNCTION (Tabla
externa OLE DB)”.
PARAMETER STYLE
Esta cláusula se utiliza para especificar los convenios utilizados para pasar
parámetros a funciones y devolver el valor de las mismas.
DB2GENERAL
Se utiliza para especificar los convenios para pasar parámetros a funciones
externas y para devolver los valores procedentes de esas funciones, que
están definidas como método en una clase Java. Esto sólo puede
especificarse cuando se utiliza LANGUAGE JAVA.
SQL
Se utiliza para especificar los convenios para pasar parámetros y para
devolver el valor de funciones externas que cumplen con los convenios de
llamada y enlace del lenguaje C, los métodos expuestos por los objetos de
automatización OLE o los métodos estáticos públicos de un objeto .NET. Se
debe especificar cuando se utiliza LANGUAGE C, LANGUAGE CLR o
LANGUAGE OLE.
PARAMETER CCSID
Especifica el esquema de codificación que se debe utilizar para todos los datos
de serie que se pasan a la función y desde ella. Si no se especifica la cláusula
PARAMETER CCSID, el valor por omisión es PARAMETER CCSID UNICODE
para las bases de datos Unicode y PARAMETER CCSID ASCII para todas 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
PARAMETER CCSID ASCII (SQLSTATE 56031). Cuando se invoca la
función, la página de códigos de la aplicación para la función es la página
de códigos de la base de datos.
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. En cualquier caso, cuando se invoca la función,
la página de códigos de la aplicación para la función es 1208.
Si la base de datos no es Unicode y se crea una función con PARAMETER
CCSID UNICODE, la función no puede tener ningún tipo gráfico ni
ningún tipo definido por el usuario (SQLSTATE 560C1).
Si la base de datos no es Unicode, se pueden crear funciones de tabla con
PARAMETER CCSID UNICODE, pero se aplican las normas siguientes:
v Se debe especificar un orden de clasificación alternativo en la
configuración de la base de datos antes de crear la función de tabla
(SQLSTATE 56031). Las funciones de tabla PARAMETER CCSID
UNICODE se clasifican con el orden de clasificación alternativo
especificado en la configuración de la base de datos.
v 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).
v No se puede hacer referencia a las funciones de tabla creadas con
PARAMETER CCSID UNICODE en funciones de SQL ni en métodos de
SQL (SQLSTATE 560C0).
Sentencias 511
CREATE FUNCTION (tabla externa)
v Una sentencia de SQL que hace referencia a una función de tabla creada
con PARAMETER CCSID UNICODE no puede invocar una función de
SQL ni un método de SQL (SQLSTATE 53090).
v Los tipos gráficos, el tipo XML y los tipos definidos por el usuario no se
pueden utilizar como parámetros en las funciones de tabla PARAMETER
CCSID UNICODE (SQLSTATE 560C1).
v Las sentencias que hacen referencia a una función de tabla PARAMETER
CCSID UNICODE sólo se pueden invocar desde un cliente de DB2
Versión 8.1 o posterior (SQLSTATE 42997).
v 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.
PRECAUCIÓN:
El uso de NOT FENCED en funciones que no se han codificado, revisado ni
probado adecuadamente puede comprometer la integridad de una base de
datos DB2. Las bases de datos DB2 toman algunas precauciones para muchas
de las anomalías inadvertidas más habituales que podrían producirse, pero
no pueden asegurar la integridad completa si se emplean funciones
definidas por el usuario NOT FENCED.
Para una función con LANGUAGE OLE o NOT THREADSAFE, sólo puede
especificarse FENCED (SQLSTATE 42613).
Si la función es FENCED y tiene la opción NO SQL, no puede especificarse la
cláusula AS LOCATOR (SQLSTATE 42613).
Para registrar una función definida por el usuario como NOT FENCED, se
necesita autorización SYSADM, autorización DBADM o una autorización
especial (CREATE_NOT_FENCED_ROUTINE).
No se pueden crear funciones LANGUAGE CLR definidas por el usuario al
especificar la cláusula NOT FENCED (SQLSTATE 42601).
THREADSAFE o NOT THREADSAFE
Especifica si se considera que la función es segura para ejecutarse en el mismo
proceso que otras rutinas (THREADSAFE) o no (NOT THREADSAFE).
Si la función se ha definido con un LANGUAGE distinto de OLE:
v Si la función se ha definido como THREADSAFE, el gestor de bases de datos
puede invocar la función en el mismo proceso que otras rutinas. En general,
para ser THREADSAFE, una función no debe utilizar áreas de datos globales
o estáticas. En la mayoría de los manuales de consulta de programación se
incluye una explicación acerca de cómo se escriben las rutinas
THREADSAFE. Las funciones FENCED y NOT FENCED pueden ser
THREADSAFE.
v Si la función se ha definido como NOT THREADSAFE, el gestor de bases de
datos nunca invocará al mismo tiempo la función en el mismo proceso que
otra rutina.
Para las funciones FENCED, THREADSAFE es el valor por omisión si el
LANGUAGE es JAVA o CLR. Para todos los demás lenguajes, NOT
THREADSAFE es el valor por omisión. Si la función se ha definido con
LANGUAGE OLE, THREADSAFE no puede especificarse (SQLSTATE 42613).
Para las funciones NOT FENCED, THREADSAFE es el valor por omisión. No
puede especificarse NOT THREADSAFE (SQLSTATE 42613).
RETURNS NULL ON NULL INPUT o CALLED ON NULL INPUT
Esta cláusula opcional puede utilizarse para evitar una llamada a la función
externa si cualquiera de los argumentos es nulo. Si la función definida por el
usuario está definida para no tener ningún parámetro, entonces por supuesto,
esta condición de argumento nulo no puede surgir y no importa cómo se haya
codificado esta especificación.
Si se especifica RETURNS NULL ON NULL INPUT y, durante la apertura de
la función de tabla, cualquiera de los argumentos de la función es nulo, no se
invoca la función definida por el usuario. El resultado de la función de tabla
será una tabla vacía (una tabla sin ninguna fila).
Si se especifica CALLED ON NULL INPUT, entonces con independencia de si
los argumentos son nulos o no, se invoca la función definida por el usuario.
Puede devolver un valor nulo o un valor normal (no nulo). Pero corresponde a
la UDF comprobar si los valores de argumentos son nulos.
El valor NULL CALL puede utilizarse como sinónimo de CALLED ON NULL
INPUT para mantener la compatibilidad con versiones anteriores. De manera
similar, puede utilizarse NOT NULL CALL como sinónimo de RETURNS
NULL ON NULL INPUT.
Sentencias 513
CREATE FUNCTION (tabla externa)
Sentencias 515
CREATE FUNCTION (tabla externa)
Sentencias 517
CREATE FUNCTION (tabla externa)
Normas
v En un entorno de base de datos particionada, el uso de SQL en funciones o
métodos externos definidos por el usuario no recibe soporte (SQLSTATE 42997).
v Sólo las rutinas que se han definido como NO SQL pueden utilizarse para
definir una extensión de índice (SQLSTATE 428F8).
v Si la función permite SQL, el programa externo no debe intentar acceder a
ningún objeto federado (SQLSTATE 55047).
v Restricciones de acceso a las tablas Si una función se ha definido como READS
SQL DATA, ninguna sentencia de la función podrá acceder a la tabla que la
sentencia que ha invocado la función está modificando (SQLSTATE 57053). Por
ejemplo, supongamos que la función definida por el usuario BONUS() se ha
definido como READS SQL DATA. Si se invoca la sentencia UPDATE
EMPLOYEE SET SALARY = SALARY + BONUS(EMPNO), no podrá leerse
ninguna sentencia de SQL de la función BONUS desde la tabla EMPLOYEE.
Notas
v Al elegir los tipos de datos para los parámetros de una función definida por el
usuario, tenga en cuenta las normas para la promoción que afectarán a sus
valores de entrada. Por ejemplo, una constante que puede utilizarse como un
valor de entrada podría tener un tipo de datos incorporado distinto del que se
espera y, todavía más importante, podría no promoverse al tipo de datos que se
espera. De acuerdo con las normas para la promoción, suele aconsejarse la
utilización de los siguientes tipos de datos para parámetros:
– INTEGER en lugar de SMALLINT
– DOUBLE en lugar de REAL
– VARCHAR en lugar de CHAR
– VARGRAPHIC en lugar de GRAPHIC
v Para garantizar la portabilidad de las UDF entre distintas plataformas, se
recomienda utilizar los tipos de datos siguientes:
– DOUBLE o REAL en lugar de FLOAT
– DECIMAL en lugar de NUMERIC
– CLOB (o BLOB) en lugar de LONG VARCHAR
v La creación de una función 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.
v Se invocará una rutina Java definida como NOT FENCED como si se hubiese
definido como FENCED THREADSAFE.
v Privilegios: el definidor de una función siempre recibe el privilegio WITH
GRANT OPTION de EXECUTE sobre la función, así como el derecho de
descartarla función. Cuando la función se utiliza en una sentencia de SQL, el
usuario que define la función debe disponer de privilegio EXECUTE para
cualquiera de los paquetes que la función utiliza.
v Establecimiento del valor por omisión: los parámetros de una función que están
definidos con un valor por omisión se establecen en su valor por omisión
cuando se invoca la función, aunque sólo si no se suministra un valor para el
argumento correspondiente o se especifica como DEFAULT, cuando se invoca la
función.
Sentencias 519
CREATE FUNCTION (tabla externa)
Ejemplos
v Ejemplo 1: El ejemplo siguiente registra una función de tabla escrita para
devolver una fila que consta de una única columna de identificador de
documento para cada documento conocido en un sistema de gestión de texto. El
primer parámetro coincide con un área de temas determinada y el segundo
parámetro contiene una serie determinada.
Dentro del contexto de una sola sesión, la UDF siempre devolverá la misma
tabla y, por lo tanto, se define como DETERMINISTIC. Observe que la cláusula
RETURNS que define la salida de DOCMATCH. Debe especificarse FINAL
CALL para cada función de tabla. Además, se añade la palabra clave
DISALLOW PARALLEL porque las funciones de tabla no pueden funcionar en
paralelo. Aunque el tamaño de la salida para DOCMATCH es muy variable, el
valor CARDINALITY 20 es representativo y se especifica para ayudar al
optimizador de DB2.
CREATE FUNCTION DOCMATCH (VARCHAR(30), VARCHAR(255))
RETURNS TABLE (DOC_ID CHAR(16))
EXTERNAL NAME ’/common/docfuncs/rajiv/udfmatch’
LANGUAGE C
PARAMETER STYLE SQL
NO SQL
DETERMINISTIC
NO EXTERNAL ACTION
NOT FENCED
SCRATCHPAD
FINAL CALL
DISALLOW PARALLEL
CARDINALITY 20
v Ejemplo 2: El siguiente ejemplo registra una función de tabla OLE que se utiliza
para recuperar la información de cabecera de mensaje y el texto de mensaje
parcial de los mensajes en Microsoft Exchange.
CREATE FUNCTION MAIL()
RETURNS TABLE (TIMERECEIVED DATE,
SUBJECT VARCHAR(15),
SIZE INTEGER,
TEXT VARCHAR(30))
EXTERNAL NAME ’tfmail.header!list’
LANGUAGE OLE
PARAMETER STYLE SQL
NOT DETERMINISTIC
FENCED
CALLED ON NULL INPUT
SCRATCHPAD
FINAL CALL
NO SQL
EXTERNAL ACTION
DISALLOW PARALLEL
Invocación
Autorización
Sintaxis
CREATE FUNCTION nombre-función ( declaración-parámetro ) ?
declaración-parámetro:
tipo1-datos
nombre-parámetro cláusula-por-omisión
Sentencias 521
CREATE FUNCTION (tabla externa OLE DB)
tipo1-datos, tipo2-datos:
tipo-incorporado
nombre-tipo-diferenciado
nombre-tipo-estructurado
REF ( nombre-tipo )
tipo-incorporado:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(34)
DECFLOAT
(16)
(1 BYTE)
CHARACTER
CHAR BYTE FOR BIT DATA
(entero )
BYTE
VARCHAR (entero )
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1)
NCHAR
NATIONAL CHAR (entero)
CHARACTER
NVARCHAR (entero)
NCHAR VARYING
NATIONAL CHAR VARYING
CHARACTER
(1M)
NCLOB
NCHAR LARGE OBJECT (entero )
NATIONAL CHARACTER LARGE OBJECT K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
SYSPROC. (1) (2)
DB2SECURITYLABEL
Sentencias 523
CREATE FUNCTION (tabla externa OLE DB)
cláusula-por-omisión:
DEFAULT NULL
constante
registro-especial
variable-global
( expresión )
lista-opciones:
? LANGUAGE OLEDB ? ?
SPECIFIC nombre-específico
NOT SECURED
?
CARDINALITY entero SECURED
Notas:
1 DB2SECURITYLABEL es el tipo diferenciado incorporado que debe utilizarse
para definir la columna de etiqueta de seguridad de fila de una tabla
protegida.
2 Para una columna de tipo DB2SECURITYLABEL, NOT NULL WITH
DEFAULT está implícito 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.
Descripción
nombre-función
Indica el nombre de la función que se está definiendo. Consiste en el nombre,
calificado o no calificado, que designa una función. El formato no calificado de
un nombre-función es un identificador SQL. En las sentencias de SQL dinámico,
el registro especial CURRENT SCHEMA se utiliza como calificador para un
nombre de objeto no calificado. En sentencias de SQL estático, la opción de
precompilación/vinculación QUALIFIER especifica de forma implícita el
calificador para los nombres de objeto no calificados. La forma calificada es un
nombre-esquema seguido de un punto y un identificador de SQL.
El nombre, incluidos los calificadores implícitos y explícitos, junto con el
número de parámetros y el tipo de datos de cada parámetro (sin tener en
cuenta ningún atributo de longitud, precisión o escala del tipo de datos) no
debe identificar una función descrita en el catálogo (SQLSTATE 42723). El
nombre no calificado, junto con el número y el tipo de datos de los
parámetros, que por supuesto es exclusivo en su esquema, no es necesario que
lo sea en todos los esquemas.
Sentencias 525
CREATE FUNCTION (tabla externa OLE DB)
servidor
Identifica el nombre local de una fuente de datos como lo define “CREATE
SERVER”.
conjuntofilas
Identifica el conjunto de filas (tabla) expuesto por el proveedor OLE DB.
Deben proporcionarse nombres de tabla completamente calificados para los
proveedores OLE DB que soportan nombres de catálogo o de esquema.
serieconexión
Versión de la serie de las propiedades de inicialización necesaria para
conectarse a la fuente de datos. El formato básico de una serie de conexión
se basa en la serie de conexión ODBC. La serie contiene una serie de pares
de palabra clave/valor separados por puntos y comas. El signo igual (=)
separa cada palabra clave y su valor. Las palabras clave son las
descripciones de las propiedades de inicialización de OLE DB (conjunto de
propiedades DBPROPSET_DBINIT) o palabras clave específicas del
proveedor.
COLLATING_SEQUENCE
Especifica si la fuente de datos utiliza el mismo orden de clasificación que
DB2 Database para Linux, UNIX y Windows. Para obtener detalles,
consulte “CREATE SERVER”. Los valores válidos son los siguientes:
v Y = El mismo orden de clasificación
v N = Diferente orden de clasificación
Si no se especifica COLLATING_SEQUENCE, se da por supuesto que la
fuente de datos tiene un orden de clasificación distinto de DB2 Database
para Linux, UNIX y Windows.
Sentencias 527
CREATE FUNCTION (tabla externa OLE DB)
Notas
v FENCED, FINAL CALL, SCRATCHPAD, PARAMETER STYLE SQL, DISALLOW
PARALLEL, NO DBINFO, NOT THREADSAFE y NO SQL están implícitas en la
sentencia y pueden especificarse.
v Al elegir los tipos de datos para los parámetros de una función definida por el
usuario, tenga en cuenta las normas para la promoción que afectarán a sus
valores de entrada. Por ejemplo, una constante que puede utilizarse como un
valor de entrada podría tener un tipo de datos incorporado distinto del que se
espera y, todavía más importante, podría no promoverse al tipo de datos que se
espera. De acuerdo con las normas para la promoción, suele aconsejarse la
utilización de los siguientes tipos de datos para parámetros:
– VARCHAR en lugar de CHAR
– VARGRAPHIC en lugar de GRAPHIC
v Para garantizar la portabilidad de las UDF entre distintas plataformas, se
recomienda utilizar los tipos de datos siguientes:
– DOUBLE o REAL en lugar de FLOAT
– DECIMAL en lugar de NUMERIC
– CLOB (o BLOB) en lugar de LONG VARCHAR
v La creación de una función 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.
v Privilegios: el definidor de una función siempre recibe el privilegio WITH
GRANT OPTION de EXECUTE sobre la función, así como el derecho de
descartarla función.
v Establecimiento del valor por omisión: los parámetros de una función que están
definidos con un valor por omisión se establecen en su valor por omisión
cuando se invoca la función, aunque sólo si no se suministra un valor para el
argumento correspondiente o se especifica como DEFAULT, cuando se invoca la
función.
Sentencias 529
CREATE FUNCTION (tabla externa OLE DB)
Ejemplos
v Ejemplo 1: Registrar una función de tabla OLE DB, que recupera información de
clasificación de una base de datos de Microsoft Access. La serie de conexión se
define en el nombre externo.
CREATE FUNCTION orders ()
RETURNS TABLE (orderid INTEGER,
customerid CHAR(5),
employeeid INTEGER,
orderdate TIMESTAMP,
requireddate TIMESTAMP,
shippeddate TIMESTAMP,
shipvia INTEGER,
freight dec(19,4))
LANGUAGE OLEDB
EXTERNAL NAME ’!orders!Provider=Microsoft.Jet.OLEDB.3.51;
Data Source=c:\sqllib\samples\oledb\nwind.mdb
!COLLATING_SEQUENCE=Y’;
v Ejemplo 2: Registrar una función de tabla OLE DB, que recupera información de
cliente de una base de datos de Oracle. La serie de conexión se proporciona a
través de una definición de servidor. El nombre de tabla está completamente
SELECT *
FROM TABLE (favorites
(’ select top 3 sales.stor_id as store_id, ’ CONCAT
’ stores.stor_name as name, ’ CONCAT
’ sum(sales. qty) as sales ’ CONCAT
’ from sales, stores ’ CONCAT
’ where sales.stor_id = stores.stor_id ’ CONCAT
’ group by sales.stor_id, stores.stor_name ’ CONCAT
’ order by sum(sales.qty) desc ’)) as f;
Sentencias 531
CREATE FUNCTION (derivado o plantilla)
Invocación
Autorización
Los privilegios que posee el ID de autorización de la sentencia debe tener al menos
una de las autorizaciones siguientes:
v Autorización IMPLICIT_SCHEMA en la base de datos, si el nombre de esquema
implícito o explícito de la función no existe
v El privilegio CREATEIN para el esquema, si existe el nombre de esquema de la
función
v Autorización DBADM
Sintaxis
RETURNS tipo2-datos ? ?
SPECIFIC nombre-específico
SOURCE nombre-función ?
SPECIFIC nombre-específico PARAMETER CCSID ASCII
nombre-función ( ) UNICODE
,
tipo-datos
NOT DETERMINISTIC EXTERNAL ACTION
AS TEMPLATE ? ?
DETERMINISTIC NO EXTERNAL ACTION
declaración-parámetro:
tipo1-datos
nombre-parámetro cláusula-por-omisión
tipo1-datos, tipo2-datos:
tipo-incorporado
nombre-tipo-diferenciado
nombre-tipo-estructurado
tipo-incorporado:
Sentencias 533
CREATE FUNCTION (derivado o plantilla)
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(34)
DECFLOAT
(16)
(1 BYTE)
CHARACTER
CHAR BYTE FOR BIT DATA
(entero )
BYTE
VARCHAR (entero )
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1)
NCHAR
NATIONAL CHAR (entero)
CHARACTER
NVARCHAR (entero)
NCHAR VARYING
NATIONAL CHAR VARYING
CHARACTER
(1M)
NCLOB
NCHAR LARGE OBJECT (entero )
NATIONAL CHARACTER LARGE OBJECT K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
XML
SYSPROC. (1) (2)
DB2SECURITYLABEL
cláusula-por-omisión:
DEFAULT NULL
constante
registro-especial
variable-global
( expresión )
Notas:
1 DB2SECURITYLABEL es el tipo diferenciado incorporado que debe utilizarse
para definir la columna de etiqueta de seguridad de fila de una tabla
protegida.
2 Para una columna de tipo DB2SECURITYLABEL, NOT NULL WITH
DEFAULT está implícito 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.
Descripción
nombre-función
Identifica la función o plantilla de función que se está definiendo. Consiste en
el nombre, calificado o no calificado, que designa una función. El formato no
calificado de un nombre-función es un identificador SQL. En las sentencias de
SQL dinámico, el registro especial CURRENT SCHEMA se utiliza como
calificador para un nombre de objeto no calificado. En sentencias de SQL
estático, la opción de precompilación/vinculación QUALIFIER especifica de
forma implícita el calificador para los nombres de objeto no calificados. La
forma calificada es un nombre-esquema seguido de un punto y un identificador
de SQL.
El nombre, incluidos los calificadores implícitos y explícitos, junto con el
número de parámetros y el tipo de datos de cada parámetro (sin tener en
cuenta ningún atributo de longitud, precisión o escala del tipo de datos) no
debe identificar una función ni una plantilla de función descritos en el catálogo
(SQLSTATE 42723). El nombre no calificado, junto con el número y el tipo de
datos de los parámetros, que por supuesto es exclusivo en su esquema, no es
necesario que lo sea en todos los esquemas.
Si se especifica un nombre de dos partes, el nombre-esquema no puede empezar
por 'SYS' (SQLSTATE 42939).
Algunos nombres que se utilizan como palabras clave en los predicados están
reservados para que los utilice el sistema y no pueden utilizarse como
nombre-función (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.
Al nombrar una función definida por el usuario que tenga su fuente en una
función ya existente con el fin de dar soporte a la misma función con un tipo
diferenciado definido por el usuario, puede utilizarse el mismo nombre que el
de la función derivada. De esta forma, los usuarios pueden utilizar la misma
función con un tipo diferenciado definido por el usuario sin darse cuenta de
que era necesaria una definición adicional. En general, puede utilizarse el
mismo nombre para más de una función si existe alguna diferencia en la
signatura de las funciones.
Sentencias 535
CREATE FUNCTION (derivado o plantilla)
(declaración-parámetro,...)
Identifica el número de parámetros de entrada de la función o plantilla de
función y especifica el tipo de datos y el valor por omisión opcional de cada
parámetro. Debe especificarse una entrada de la lista para cada parámetro que
la función o plantilla de función espera recibir. No se permiten más de 90
parámetros (SQLSTATE 54023).
Existe la posibilidad de registrar una función que no tenga ningún parámetro.
En este caso, sigue siendo necesaria la codificación de los paréntesis, sin incluir
ningún tipo de datos. Por ejemplo:
CREATE FUNCTION WOOFER() ...
En un esquema, no se permite que dos funciones que se denominen igual
tengan exactamente el mismo tipo para todos los parámetros correspondientes.
Esta restricción también es aplicable a una función y una plantilla de función
con el mismo nombre en el mismo esquema. Las longitudes, precisiones y
escalas no se consideran en esta comparación de tipos. Por esta razón, se
considera que CHAR(8) y CHAR(35) tienen el mismo tipo, al igual que
DECIMAL(11,2) y DECIMAL (4,3). Para una base de datos Unicode, se
considera que CHAR(13) y GRAPHIC(8) son del mismo tipo. Hay una
agrupación más profunda de los tipos que hace que se traten como el mismo
tipo para esta finalidad como, por ejemplo, DECIMAL y NUMERIC. Una
signatura duplicada devuelve un error (SQLSTATE 42723).
nombre-parámetro
Especifica un nombre opcional para el parámetro de entrada. El nombre no
puede ser el mismo que el de cualquier otro nombre-parámetro de la lista de
parámetros (SQLSTATE 42734).
tipo-datos1
Especifica el tipo de datos del parámetro de entrada. El tipo de datos
puede ser un tipo de datos incorporado, un tipo diferenciado o un tipo
estructurado.
Se puede utilizar cualquier tipo de datos SQL válido si éste se puede
convertir en el tipo del parámetro correspondiente de la función
identificada en la cláusula SOURCE (para obtener información consulte
“Conversiones entre tipos de datos”). Sin embargo, esta comprobación no
garantiza que no se vaya a producir un error cuando se invoque la
función.
Para obtener una descripción más completa de cada tipo de datos
incorporado, consulte “CREATE TABLE”.
v Un parámetro de tipo fecha y hora se pasa como tipo de datos de tipo
carácter y los datos se pasan en formato ISO.
v No se pueden especificar tipos array (SQLSTATE 42879).
v No se puede especificar un tipo de referencia especificado como
REF(nombre-tipo) (SQLSTATE 42879).
Para un tipo diferenciado definido por el usuario, los atributos de longitud,
precisión o escala para el parámetro son los del tipo fuente del tipo
diferenciado (los especificados en CREATE TYPE). Un parámetro de tipo
diferenciado se pasa como tipo fuente del tipo diferenciado. Si el nombre
del tipo diferenciado no está calificado, el gestor de base de datos resuelve
el nombre de esquema buscando los esquemas en la vía de acceso de SQL.
Para un tipo estructurado definido por el usuario, deben existir las
funciones de transformación apropiadas en el grupo de transformación
asociado.
Sentencias 537
CREATE FUNCTION (derivado o plantilla)
Sentencias 539
CREATE FUNCTION (derivado o plantilla)
v XMLDOCUMENT
v XMLELEMENT
v XMLFOREST
v XMLNAMESPACES
v XMLPARSE
v XMLPI
v XMLQUERY
v XMLROW
v XMLSERIALIZE
v XMLTEXT
v XMLVALIDATE
v XMLXSROBJECTID
v XSLTRANSFORM
nombre-función
Identifica la función en particular que va a utilizarse como fuente y sólo es
válida si existe exactamente una función específica en el esquema con este
nombre-función para la que el ID de autorización de la sentencia dispone de
privilegio EXECUTE. Esta variante de sintaxis no es válida para una
función fuente que sea una función incorporada.
Si se proporciona un nombre no calificado, para localizar la función se
utiliza la vía de acceso de SQL actual (el valor del registro especial
CURRENT PATH). El primer esquema de la vía de acceso de SQL que
tiene una función con este nombre y para la que el ID de autorización de
la sentencia dispone de privilegio EXECUTE.
Si no existe ninguna función con este nombre en el esquema nombrado o si
el esquema no está calificado y no hay ninguna función con este nombre
en la vía de acceso a SQL, se devuelve un error (SQLSTATE 42704). Si hay
más de una instancia específica autorizada de la función en el esquema
nombrado o localizado, se devuelve un error (SQLSTATE 42725). Si existe
una función con este nombre y el ID de autorización de la sentencia no
tiene el privilegio EXECUTE en esta función, se devuelve un error
(SQLSTATE 42501).
SPECIFIC nombre-específico
Identifica una función determinada definida por el usuario que debe servir
como fuente, por el nombre-específico ya sea especificado o tomado por
omisión en el tiempo de creación de la función. Esta variante de sintaxis no
es válida para una función fuente que sea una función incorporada.
Si se proporciona un nombre no calificado, se utiliza la vía de acceso SQL
actual para localizar la función. Se selecciona el primer esquema de la vía
de acceso a SQL que tiene una función con este nombre específico para la
que el ID de autorización de la sentencia dispone de privilegio EXECUTE.
Si no existe ninguna función para este nombre-específico en el esquema
nombrado o si el nombre no está calificado y no hay ninguna función con
este nombre-específico en la vía de acceso SQL, se devuelve un error
(SQLSTATE 42704). Si existe una función con este nombre-específico y el ID
de autorización de la sentencia no dispone de privilegio EXECUTE para
esta función, se devuelve un error (SQLSTATE 42501).
nombre-función (tipo-datos,...)
Proporciona la signatura de la función, que identifica de manera exclusiva
Sentencias 541
CREATE FUNCTION (derivado o plantilla)
Normas
v Para que resulte más sencillo, en esta sección denominaremos CF a la función
que se está creando, y denominaremos FS a la función identificada en la cláusula
SOURCE, con independencia de cuál de las tres sintaxis permitidas se ha
utilizado para identificar a FS.
– El nombre no calificado de la función CF y el nombre no calificado de la SF
pueden ser distintos.
– Una función nombrada como la fuente de otra función puede, a su vez,
utilizar otra función como su fuente. Se deben extremar las precauciones al
utilizar este recurso ya que podría ser muy difícil depurar una aplicación si
una función invocada indirectamente devuelve un error.
– Si se especifican con la cláusula SOURCE, ninguna de las cláusulas siguientes
es válida (porque la CF heredará estos atributos de la SF):
- CAST FROM ...,
- EXTERNAL ...,
- LANGUAGE ...,
- PARAMETER STYLE ...,
- DETERMINISTIC / NOT DETERMINISTIC,
- FENCED / NOT FENCED,
- RETURNS NULL ON NULL INPUT / CALLED ON NULL INPUT
- EXTERNAL ACTION / NO EXTERNAL ACTION
- NO SQL / CONTAINS SQL / READS SQL DATA
- SCRATCHPAD / NO SCRATCHPAD
- FINAL CALL / NO FINAL CALL
- RETURNS TABLE (...)
- CARDINALITY ...
- ALLOW PARALLEL / DISALLOW PARALLEL
- DBINFO / NO DBINFO
- THREADSAFE / NOT THREADSAFE
- INHERIT SPECIAL REGISTERS
Si se incumplen estas normas se produce un error (SQLSTATE 42613).
v El número de parámetros de entrada en CF debe ser igual a los de SF; de lo
contrario, se devuelve un error (SQLSTATE 42624).
v La CF no tendrá que especificar necesariamente la longitud, precisión ni escala
para un tipo de datos con parámetros en los casos siguientes:
– Los parámetros de entrada de la función.
– Su parámetro RETURNS
En su lugar, se pueden especificar parámetros vacíos como parte del tipo de
datos (por ejemplo: VARCHAR() ), para mostrar que la longitud/precisión/
escala serán las mismas que las de la función fuente o las determinadas por la
conversión del tipo de datos.
No obstante, si se especifica la longitud, la precisión o la escala, el valor de la CF
se comprueba comparándolo con el valor correspondiente de la SF, tal y como se
explica en las normas restantes para los parámetros de entrada, y se devuelve un
valor.
v La especificación de los parámetros de entrada de la CF se comprueban respecto
a los de la SF. El tipo de datos de cada parámetro de CF debe ser el mismo que
Sentencias 543
CREATE FUNCTION (derivado o plantilla)
Notas
v La determinación de si un tipo de datos es convertible a otro no tiene en cuenta
la longitud, precisión ni escala de los tipos de datos con parámetros, como son
CHAR y DECIMAL. Por esta razón, pueden producirse errores al utilizar una
función como resultado del intento de conversión de un valor del tipo de datos
fuente a un valor del tipo de datos de destino. Por ejemplo, VARCHAR es
convertible a DATE, pero si el tipo de fuente está realmente definido como
VARCHAR(5), al utilizar la función se producirá un error.
v Al elegir los tipos de datos para los parámetros de una función definida por el
usuario, tenga en cuenta las normas de promoción que afectarán a sus valores
de entrada (consulte el apartado “Promoción de tipos de datos”). Por ejemplo,
una constante que puede utilizarse como un valor de entrada puede tener un
tipo de datos incorporado diferente al que se espera y, lo que es más
significativo, es posible que no se promueva al tipo de datos que se espera. De
acuerdo con las normas para la promoción, suele aconsejarse la utilización de los
siguientes tipos de datos para parámetros:
– INTEGER en lugar de SMALLINT
– DOUBLE en lugar de REAL
– VARCHAR en lugar de CHAR
– VARGRAPHIC en lugar de GRAPHIC
v La creación de una función 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.
v Para que un servidor federado reconozca una función fuente de datos, la función
debe estar correlacionada con una función complementaria en la base de datos
federada. Si la base de datos no contiene ninguna función complementaria, el
usuario debe crearla y luego definir la correlación.
La función complementaria puede ser una función (escalar o fuente) o una
plantilla de función. Si el usuario crea una función y la correlación necesaria,
entonces cada vez que se procese una consulta que especifique la función, DB2
(1) compara las estrategias para invocarla con estrategias para invocar la función
fuente de datos e (2) invoca la función que se prevé que exigirá menos recursos
adicionales.
Si el usuario crea una plantilla de función y la correlación, cada vez que se
procese una consulta que especifique la plantilla, DB2 invocará la función de
fuente de datos con la que ésta se correlaciona, siempre que exista un plan de
acceso para la invocación de esta función.
v Privilegios: el definidor de una función siempre recibe el privilegio EXECUTE
de la función, así como el derecho de descartar la función. El usuario que define
la función también recibe WITH GRANT OPTION si se aplica cualquiera de las
condiciones siguientes:
– La función fuente es una función incorporada.
– El usuario que define la función dispone de EXECUTE WITH GRANT
OPTION para la función fuente.
– La función es una plantilla.
v Funciones EXTERNAL ACTION: Si se invoca una función EXTERNAL ACTION
en otra lista que no sea la lista de selección más externa, los resultados son
imprevisibles, ya que el número de veces que se invoca la función variará en
función del plan de acceso utilizado.
v Establecimiento del valor por omisión: los parámetros de una función que están
definidos con un valor por omisión se establecen en su valor por omisión
cuando se invoca la función, aunque sólo si no se suministra un valor para el
argumento correspondiente o se especifica como DEFAULT, cuando se invoca la
función.
v CREATE FUNCTION MAPPING con funciones de tabla o fila: las
correlaciones de creación de función con funciones remotas que devuelven una
tabla o una fila no están soportadas en las bases de datos federadas.
v Herencia de los atributos SECURED o NOT SECURED de la función fuente:
la función derivada definida por el usuario hereda el atributo SECURED o NOT
SECURED de la función fuente en la que sólo se tiene en cuenta la función
definida por el usuario que ocupa la posición más alta. Si la función que ocupa
la posición más alta definida por el usuario es segura, las funciones anidadas
definidas por el usuario se consideran seguras. El gestor de bases de datos no
valida si esas funciones anidadas definidas por el usuario son seguras. Si esas
funciones anidadas pueden acceder a datos confidenciales, el usuario con
autorización SECADM tiene que garantizar que esas funciones pueden acceder a
esos datos y que se ha establecido un procedimiento de auditoría de control de
cambios para todos los cambios en esas funciones.
Ejemplos
v Ejemplo 1: Algún tiempo después de la creación de la función escalar externa
CENTRE de Pellow, otro usuario desea crear una función basada en ella, excepto
que esta función está pensada para aceptar solamente argumentos enteros.
CREATE FUNCTION MYCENTRE (INTEGER, INTEGER)
RETURNS FLOAT
SOURCE PELLOW.CENTRE (INTEGER, FLOAT)
v Ejemplo 2: Se ha creado un tipo diferenciado, HATSIZE, basándose en el tipo de
datos INTEGER incorporado. Sería útil tener una función AVG para calcular el
tamaño medio (hatsize) de los distintos departamentos. Esto se lleva a cabo
fácilmente de la manera siguiente:
CREATE FUNCTION AVG (HATSIZE) RETURNS HATSIZE
SOURCE SYSIBM.AVG (INTEGER)
Sentencias 545
CREATE FUNCTION (derivado o plantilla)
Una función escalar devuelve un solo valor cada vez que se invoca y en general es
válida cuando una expresión SQL es válida. Se puede utilizar una función de tabla
en una cláusula FROM y devuelve una tabla. Se puede utilizar una función de fila
como función de transformación y devuelve una fila.
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 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
Sintaxis
CREATE FUNCTION nombre-función
OR REPLACE
Sentencias 547
CREATE FUNCTION (tabla, fila o escalar de SQL)
( ) ?
,
declaración-parámetro
cuerpo-función-SQL
declaración-parámetro:
IN
nombre-parámetro tipo1-datos
(1) cláusula-por-omisión
OUT
INOUT
tipo1-datos, tipo2-datos:
tipo-incorporado
tipo-datos-anclados
nombre-tipo-matriz
nombre-tipo-cursor
nombre-tipo-diferenciado
REF ( nombre-tipo )
nombre-tipo-fila
nombre-tipo-estructurado
tipo-incorporado:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(34)
DECFLOAT
(16)
(1 BYTE)
CHARACTER
CHAR BYTE FOR BIT DATA
(entero )
BYTE
VARCHAR (entero )
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1)
NCHAR
NATIONAL CHAR (entero)
CHARACTER
NVARCHAR (entero)
NCHAR VARYING
NATIONAL CHAR VARYING
CHARACTER
(1M)
NCLOB
NCHAR LARGE OBJECT (entero )
NATIONAL CHARACTER LARGE OBJECT K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
XML
BOOLEAN
CURSOR
SYSPROC. (2)
DB2SECURITYLABEL
Sentencias 549
CREATE FUNCTION (tabla, fila o escalar de SQL)
tipo-datos-anclados:
DATA TYPE TO
ANCHOR nombre-variable1
nombre-tabla.nombre-columna
OF
ROW nombre-tabla
nombre-vista
nombre-variable-cursor
cláusula-por-omisión:
DEFAULT NULL
constante
registro-especial
variable-global
( expresión )
lista-columnas:
( nombre-columna tipo3-datos )
tipo3-datos:
tipo incorporado
nombre-tipo-diferenciado
REF ( nombre-tipo )
nombre-tipo-estructurado
lista-opciones:
LANGUAGE SQL
? ? ?
PARAMETER CCSID ASCII
UNICODE
NOT DETERMINISTIC
? ?
SPECIFIC nombre-específico DETERMINISTIC
(4)
PREDICATES ( especificación-predicado )
cuerpo-función-SQL:
RETURN
(5)
SQL compuesto (compilado)
SQL compuesto (en línea)
Notas:
1 OUT e INOUT sólo son válidos si RETURNS especifica un resultado escalar y
cuerpo-función-SQL es una sentencia de SQL compuesto (compilado).
2 DB2SECURITYLABEL es el tipo diferenciado incorporado que debe utilizarse
para definir la columna de etiqueta de seguridad de fila de una tabla
protegida.
3 Válido si RETURNS especifica una tabla (es decir, TABLE lista-columna).
También es válido si RETURNS especifica un resultado escalar y
cuerpo-función-SQL es una sentencia de SQL compuesto (compilado). En este
caso, la función resultante sólo puede utilizarse como el único elemento de la
parte derecha de una sentencia de asignación que se encuentra dentro de una
sentencia de SQL compuesto (compilado).
4 Sólo es válido si RETURNS especifica un resultado escalar (tipo-datos2)
5 La sentencia de SQL compuesto (compilado) sólo recibe soporte para un
cuerpo-función-SQL en una definición de función escalar de SQL. No recibe
soporte para las funciones de función de tabla de SQL. En un entorno de base
de datos particionada, a una función definida mediante la utilización de una
sentencia de SQL compuesto (compilado) sólo puede hacerse referencia en la
parte derecha de una sentencia de asignación, y la referencia de función no
puede formar parte de una expresión. Una sentencia de asignación de este
tipo no puede aparecer en una sentencia de SQL compuesto (en línea).
Descripción
OR REPLACE
Especifica que se debe sustituir la definición de la función si existe una 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 los
privilegios que se han otorgado sobre la función no se ven afectados por ello.
Esta opción sólo puede especificarla el propietario del objeto. Esta opción se
ignora si no existe una definición para la función en el servidor actual. Para
sustituir una función ya existente, el nombre específico y el nombre de función
de la nueva definición tienen que ser los mismos que el nombre específico y el
nombre de función de la antigua definición, o la signatura de la nueva
definición debe coincidir con la signatura de la antigua definición. De lo
contrario, se creará una nueva función.
Sentencias 551
CREATE FUNCTION (tabla, fila o escalar de SQL)
Sentencias 553
CREATE FUNCTION (tabla, fila o escalar de SQL)
REF (nombre-tipo)
Especifica un tipo de referencia sin ámbito. El nombre-tipo especificado
debe identificar un tipo estructurado definido por el usuario
(SQLSTATE 428DP). El sistema no intenta deducir el ámbito del
parámetro o resultado. Dentro del cuerpo de la función, se puede
utilizar un tipo de referencia en una operación de eliminación de
referencia sólo si primero se convierte para que tenga un ámbito.
Similarmente, una referencia devuelta por una función SQL se puede
utilizar en una operación de eliminación de referencia sólo si primero
se convierte para que tenga un ámbito. Si se especifica un nombre de
tipo sin un nombre de esquema, el nombre-tipo se resuelve buscando los
esquemas en la vía de acceso de SQL.
nombre-tipo-fila
Especifica el nombre de un tipo de fila definido por el usuario. Los
campos de cada parámetro son los campos del tipo de fila. Si se
especifica el nombre-tipo-fila sin un nombre de esquema, el tipo de fila
se resuelve buscando en los esquemas de la vía de acceso de SQL.
nombre-tipo-estructurado
Especifica el nombre de un tipo estructurado definido por el usuario.
Si se especifica el nombre-tipo-estructurado sin un nombre de esquema, el
tipo estructurado se resuelve buscando en los esquemas de la vía de
acceso de SQL.
DEFAULT
Especifica un valor por omisión para el parámetro. El valor por omisión
puede ser una constante, un registro especial, una variable global, una
expresión o la palabra clave NULL. Los registros especiales que se pueden
especificar como el valor por omisión son los mismos que se pueden
especificar para un valor por omisión de columna (véase
cláusula-por-omisión en la sentencia CREATE TABLE). Se pueden especificar
otros registros especiales como valor por omisión utilizando una expresión.
La expresión puede ser cualquier expresión del tipo que se describe en el
apartado "Expresiones". Si no se especifica un valor por omisión, el
parámetro no tendrá ningún valor por omisión y no se podrá omitir el
argumento correspondiente al invocar el procedimiento. El tamaño máximo
de la expresión es de 64 K bytes.
La expresión por omisión no debe modificar datos SQL (SQLSTATE 428FL
o SQLSTATE 429BL). La expresión debe ser compatible con asignaciones
con el tipo de datos del parámetro (SQLSTATE 42821).
No se puede especificar un valor por omisión en las situaciones siguientes:
v Para parámetros INOUT o OUT (SQLSTATE 42601)
v Para un parámetro del tipo ARRAY, ROW o CURSOR (SQLSTATE
429BB)
v Para un parámetro de una definición de función donde también se ha
especificado una cláusula RETURNS ROW o una cláusula PREDICATES
(SQLSTATE 42613)
RETURNS
Esta cláusula obligatoria identifica el tipo de salida de la función.
Si el tipo de datos de la salida de la función es un tipo de datos booleano, tipo
de matriz, tipo de cursor o tipo de fila, el cuerpo de la función de SQL debe
ser una sentencia de SQL compuesto (compilado) (SQLSTATE 428H2). Si el tipo
Sentencias 555
CREATE FUNCTION (tabla, fila o escalar de SQL)
LANGUAGE SQL
Especifica que la función está escrita en SQL.
PARAMETER CCSID
Especifica el esquema de codificación que se debe utilizar para todos los datos
de serie que se pasan a la función y desde ella. Si no se especifica la cláusula
PARAMETER CCSID, el valor por omisión es PARAMETER CCSID UNICODE
para las bases de datos Unicode y PARAMETER CCSID ASCII para todas 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
PARAMETER CCSID ASCII (SQLSTATE 56031).
UNICODE
Especifica que los datos de caracteres están en UTF-8, y que los datos
gráficos están en UCS-2. Si la base de datos no es Unicode, no se puede
especificar PARAMETER CCSID UNICODE (SQLSTATE 56031).
DETERMINISTIC o NOT DETERMINISTIC
Esta cláusula opcional especifica si la función siempre devuelve los mismos
resultados para unos valores argumento determinados (DETERMINISTIC) o si
la función depende de ciertos valores de estado que afectan a los resultados
(NOT DETERMINISTIC). Es decir, una función DETERMINISTIC siempre debe
devolver la misma tabla ante invocaciones sucesivas con entradas idénticas.
Con la especificación de NOT DETERMINISTIC, se evitan las optimizaciones
que aprovechan el hecho de que las entradas idénticas siempre producen los
mismos resultados.
EXTERNAL ACTION o NO EXTERNAL ACTION
Especifica si la función puede realizar una acción que cambie el estado de un
objeto que el gestor de bases de datos no gestiona. Un ejemplo de una acción
externa es enviar un mensaje o grabar un registro en un archivo. El valor por
omisión es EXTERNAL ACTION.
EXTERNAL ACTION
Especifica que la función realiza una acción que cambia el estado de un
objeto que el gestor de bases de datos no gestiona.
NO EXTERNAL ACTION
Especifica que la función no realiza ninguna acción que cambie el estado
de un objeto que el gestor de bases de datos no gestiona. El gestor de
bases de datos utiliza esta información durante la optimización de las
sentencias de SQL.
CONTAINS SQL, READS SQL DATA o MODIFIES SQL DATA
Indica qué tipo de sentencias de SQL se pueden ejecutar.
CONTAINS SQL
Indica que la función puede ejecutar sentencias de SQL que no lean ni
modifiquen datos SQL (SQLSTATE 42985).
READS SQL DATA
Indica que la función puede ejecutar sentencias de SQL que no modifiquen
datos SQL (SQLSTATE 42985).
MODIFIES SQL DATA
Indica que la función puede ejecutar todas las sentencias de SQL
soportadas en el cuerpo-función-SQL.
Sentencias 557
CREATE FUNCTION (tabla, fila o escalar de SQL)
STATIC DISPATCH
Esta cláusula opcional indica que, durante la resolución de la función, DB2
elige una función basada en los tipos estáticos (tipos declarados) de los
parámetros de la función.
CALLED ON NULL INPUT
Esta cláusula indica que se invoca la función con independencia de si
cualquiera de sus argumentos es nulo. Puede devolver un valor nulo o un
valor no nulo. En este caso, la función definida por el usuario debe comprobar
si los valores de los argumentos son nulos.
Puede especificarse NULL CALL en lugar de CALLED ON NULL INPUT.
INHERIT SPECIAL REGISTERS
Esta cláusula opcional indica que los registros especiales que pueden
actualizarse de la función heredarán sus valores iniciales del entorno de la
sentencia que realiza la invocación. Para una función que se invoca en la
sentencia-select de un cursor, los valores iniciales se heredan del entorno
cuando se abre el cursor. Para una rutina que se invoca en un objeto anidado
(por ejemplo, un activador o una vista), los valores iniciales se heredan del
entorno de ejecución (no de la definición del objeto).
Al proceso que llama a la función no se le devolverá ninguno de los cambios
que se han realizado en los registros especiales.
Algunos registros especiales, como los registros especiales de hora y
fecha,reflejan una propiedad de la sentencia que se está ejecutando y, por
consiguiente, nunca se heredan de quien llama.
PREDICATES
Para los predicados que hacen uso de esta función, esta cláusula indica quiénes
pueden explotar las extensiones de índice y pueden utilizar la cláusula
opcional SELECTIVITY para la condición de búsqueda del predicado. Si se
especifica la cláusula PREDICATES, la función debe definirse como
DETERMINISTIC con NO EXTERNAL ACTION (SQLSTATE 42613). Si se
especifica la cláusula PREDICATES y la base de datos no es Unicode, no se
debe especificar PARAMETER CCSID UNICODE (SQLSTATE 42613). No se
puede especificar PREDICATES si el cuerpo-función-SQL es una sentencia de
SQL compuesto (compilado) (SQLSTATE 42613).
especificación-predicado
Para obtener información detallada acerca de la especificación del
predicado, consulte “CREATE FUNCTION (escalar externa)”.
INHERIT ISOLATION LEVEL WITHOUT LOCK REQUEST o INHERIT ISOLATION LEVEL WITH
LOCK REQUEST
Especifica si una petición de bloqueo puede asociarse o no a la cláusula de
aislamiento de la sentencia cuando la función hereda el nivel de aislamiento de
la sentencia que invoca la función. El valor por omisión es INHERIT
ISOLATION LEVEL WITHOUT LOCK REQUEST.
INHERIT ISOLATION LEVEL WITHOUT LOCK REQUEST
Especifica que, como la función hereda el nivel de aislamiento de la
sentencia que invoca, no se puede invocar en el contexto de una sentencia
de SQL que incluya una cláusula de petición de bloqueo como parte de la
cláusula de aislamiento especificada (SQLSTATE 42601).
INHERIT ISOLATION LEVEL WITH LOCK REQUEST
Especifica que, como la función hereda el nivel de aislamiento de la
sentencia que invoca, también hereda la cláusula de petición de bloqueo
especificada.
cuerpo-función-SQL
Especifica el cuerpo de la función. En el cuerpo-función-SQL se puede hacer
referencia a nombres de parámetros. Los nombres de parámetros pueden
calificarse con el nombre de función para evitar referencias ambiguas.
Para más información sobre la secuencia RETURN, consulte la sección
Sentencia RETURN.
Para SQL compuesto (compilado), consulte: Sentencia de SQL compuesto
(compilado).
Para SQL compuesto (en línea), consulte: Sentencia de SQL compuesto (en línea).
NOT SECURED o SECURED
Especifica si la función se considera segura para el control de acceso a filas y
columnas. El valor por omisión es NOT SECURED.
NOT SECURED
Indica que la función no se considera segura. Cuando se invoca la función,
los argumentos de la función no deben hacer referencia a una columna
para la que haya habilitada una máscara de columna y el control de acceso
de nivel de columna esté activado para su tabla (SQLSTATE 428HA). Esta
norma se aplica a las funciones definidas por el usuario no seguras que se
invocan en algún punto de la sentencia.
SECURED
Indica que la función se considera segura. La función debe ser segura
cuando se hace referencia a ella en un permiso de fila o una máscara de
columna (SQLSTATE 428H8).
Normas
v Utilización de tipos de datos anclados: Un tipo de datos anclado no puede
hacer referencia a (SQLSTATE 428HS): un apodo, una tabla con tipo, una vista
con tipo, 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.
v Uso de tipos de fila y de cursor: una función que utiliza un tipo de cursor o un
tipo de fila para un parámetro o que devuelve un tipo de cursor o un tipo de
fila sólo puede invocarse desde una sentencia de SQL compuesto (compilado)
(SQLSTATE 428H2).
v Restricciones de acceso a las tablas: si se define una función como READS SQL
DATA, ninguna sentencia de la función podrá acceder a una tabla que la
sentencia que invocó la función esté modificando (SQLSTATE 57053). Por
ejemplo, supongamos que la función definida por el usuario BONUS() se ha
definido como READS SQL DATA. Si se invoca la sentencia UPDATE
EMPLOYEE SET SALARY = SALARY + BONUS(EMPNO), no podrá leerse
ninguna sentencia de SQL de la función BONUS desde la tabla EMPLOYEE.
Si una función definida con MODIFIES SQL DATA contiene sentencias CALL
anidadas, no se permite el acceso de lectura a las tablas que la función está
modificando (por la definición de función o la sentencia que ha invocado la
función) (SQLSTATE 57053).
Notas
v La resolución de las llamadas de función dentro del cuerpo de la función se
realiza de acuerdo con la vía de acceso de SQL que está vigente para la
sentencia CREATE FUNCTION y no cambia una vez creada la función.
Sentencias 559
CREATE FUNCTION (tabla, fila o escalar de SQL)
Ejemplos
v Ejemplo 1: Defina una función escalar que devuelve la tangente de un valor
utilizando las funciones de seno y coseno existentes.
CREATE FUNCTION TAN (X DOUBLE)
RETURNS DOUBLE
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
RETURN SIN(X)/COS(X)
v Ejemplo 2: Defina una función de transformación para el tipo estructurado
PERSON.
Sentencias 561
CREATE FUNCTION (tabla, fila o escalar de SQL)
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
RETURN VALUES (P..NAME, P..FIRSTNAME)
v Ejemplo 3: Defina una tabla de función que muestra los empleados que trabajan
en un número de departamento especificado.
Sentencias 563
CREATE FUNCTION MAPPING
Invocación
Autorización
Sintaxis
nombre-función ( )
tipo-datos
SPECIFIC nombre-específico
SERVER nombre-servidor
SERVER TYPE tipo-servidor
VERSION versión-servidor
WRAPPER nombre-derivador
opciones-función WITH INFIX
versión-servidor:
versión
. release
. mod
constante-serie-versión
opciones-función:
Descripción
nombre-correlación-funciones
Nombra la correlación de funciones. El nombre no debe identificar ninguna
correlación de funciones que ya esté descrita en el catálogo (SQLSTATE 42710).
Si se omite nombre-correlación-funciones, se asigna un nombre exclusivo
generado por el sistema.
nombre-función
Especifica el nombre calificado o no calificado de la función o de la plantilla de
función de base de datos federada desde la cual se debe realizar la correlación.
tipo-datos
Para una función o una plantilla de función que tiene parámetros de entrada,
tipo-datos especifica el tipo de datos de cada parámetro. El tipo de datos no
puede ser un tipo XML ni un tipo definido por el usuario.
Se pueden utilizar paréntesis vacíos en lugar de especificar la longitud, la
precisión o la escala para tipos de datos con parámetros. Se recomienda utilizar
los paréntesis vacíos para tipos de datos con parámetros; por ejemplo, CHAR().
Un tipo de datos con parámetros es cualquiera de los tipos de datos que se
puede definir con una longitud, una escala o una precisión específica. Los tipos
de datos con parámetros son los tipos de datos de serie y los tipos de datos
decimales. Si especifica la longitud, la precisión o la escala, deben ser las
mismas que las de la plantilla de función. Si se omiten los paréntesis, se
utilizará la longitud por omisión para el tipo de datos (consulte la descripción
de la sentencia CREATE TABLE).
SPECIFIC nombre-específico
Identifica la función o la plantilla de función desde la cual se debe realizar la
correlación. Especifique nombre-específico para crear un nombre de función
conveniente.
SERVER nombre-servidor
Nombra la fuente de datos que contiene la función que se está correlacionando.
SERVER TYPE tipo-servidor
Identifica el tipo de fuente de datos que contiene la función que se está
correlacionando.
VERSION
Identifica la versión de la fuente de datos indicada por tipo-servidor.
versión
Especifica el número de versión. El valor debe ser un entero.
release
Especifica el número del release de la versión indicada por versión. El valor
debe ser un entero.
mod
Especifica el número de la modificación del release indicado por release. El
valor debe ser un entero.
Sentencias 565
CREATE FUNCTION MAPPING
constante-serie-versión
Especifica la designación completa de la versión. La constante-serie-versión
puede ser un solo valor (por ejemplo, ‘8i’) o puede estar formada por los
valores concatenados de versión, release y, si se aplica, mod (por ejemplo,
‘8.0.3’).
WRAPPER nombre-derivador
Especifica el nombre del derivador que el servidor federado utiliza para
interactuar con las fuentes de datos del tipo y versión indicados por
tipo-servidor y versión-servidor.
OPTIONS
Indica las opciones de correlación de funciones que se deben habilitar.
nombre-opción-función
Nombra una opción de correlación de funciones que se aplica a la
correlación de funciones o a la función de fuente de datos incluida en la
correlación.
constante-serie
Especifica el valor para nombre-opción-función como una constante de serie
de caracteres.
WITH INFIX
Especifica que la función de fuente de datos se debe generar en formato infijo.
El sistema de base de datos federado convierte la notación de prefijo en la
notación infijo que utiliza la fuente de datos remota.
Notas
v Una función o plantilla de función de base de datos federada puede
correlacionarse con una función de fuente de datos si:
– La función o plantilla de la base de datos federada tiene el mismo número de
parámetros de entrada que la función de fuente de datos.
– Los tipos de datos que se definen para la función o la plantilla federadas son
compatibles con los tipos de datos correspondientes definidos para la función
de la fuente de datos.
v Si una petición distribuida hace referencia a una función de DB2 que se
correlaciona con una función de fuente de datos, el optimizador desarrolla
estrategias para invocar cualquiera de las dos funciones cuando se procesa la
petición. Se invoca la función DB2 si para ello se necesita menos actividad
general que para invocar la función de fuente de datos. De lo contrario, si la
invocación de la función DB2 requiere más actividad general, se invocará a la
función de fuente de datos.
v Si una petición distribuida hace referencia a una plantilla de función DB2 que se
correlaciona con una función de fuente de datos, sólo se puede invocar la
función de fuente de datos cuando se procesa la petición. La plantilla no puede
invocarse porque no tiene ningún código ejecutable.
v Las correlaciones de funciones por omisión pueden pasar a ser no operativas
inhabilitándolas (no se pueden descartar). Para inhabilitar una correlación de
funciones por omisión, codifique la sentencia CREATE FUNCTION MAPPING
de modo que especifique el nombre de la función de DB2 en la correlación y
establezca la opción DISABLE en ‘Y’.
v Las funciones del esquema SYSIBM no tienen ningún nombre específico. Para
alterar temporalmente la correlación de funciones por omisión para una función
del esquema SYSIBM, especifique nombre-función utilizando el calificador
explícito SYSIBM; por ejemplo, SYSIBM.LENGTH().
Ejemplos
v Ejemplo 1: Correlacione una plantilla de función con una UDF a la que pueden
acceder todas las fuentes de datos Oracle. La plantilla se llama STATS y
pertenece a un esquema llamado NOVA. La UDF de Oracle se llama
STATISTICS y pertenece a un esquema llamado STAR.
CREATE FUNCTION MAPPING MY_ORACLE_FUN1
FOR NOVA.STATS (DOUBLE, DOUBLE)
SERVER TYPE ORACLE
OPTIONS (REMOTE_NAME ’STAR.STATISTICS’)
v Ejemplo 2: Correlacione una plantilla de función llamado BONUS con una UDF,
que también se llama BONUS y que se utiliza en una fuente de datos Oracle
llamada ORACLE1.
CREATE FUNCTION MAPPING MY_ORACLE_FUN2
FOR BONUS()
SERVER ORACLE1
OPTIONS (REMOTE_NAME ’BONUS’)
v Ejemplo 3: Suponga que existe una correlación de funciones por omisión entre la
función del sistema WEEK que está definida en la base de datos federada y una
función similar que está definida en las fuentes de datos Oracle. Cuando se
procesa una consulta que pide datos Oracle y que hace referencia a WEEK, se
invocará WEEK o su equivalente de Oracle, dependiendo de cuál estime el
optimizador que necesita menos actividad general. El DBA desea averiguar
cómo afectaría al rendimiento si sólo se invocase WEEK para dichas consultas.
Para asegurarse de que se invoca WEEK cada vez, el DBA debe inhabilitar la
correlación.
Sentencias 567
CREATE FUNCTION MAPPING
Invocación
Autorización
Cuando se define una tabla utilizando LIKE o una selección completa, los
privilegios del ID de autorización de la sentencia también deben incluir, como
mínimo, uno de los siguientes para cada tabla o vista identificada:
v Privilegio SELECT para la tabla o vista
v Privilegio CONTROL sobre la tabla o vista
v Autorización DATAACCESS
Sintaxis
( definición-columna )
LIKE nombre1-tabla
nombre-vista opciones-copia
AS ( selección completa ) DEFINITION ONLY
opciones-copia
Sentencias 569
CREATE GLOBAL TEMPORARY TABLE
? ?
cláusula-distribución
definición-columna:
nombre-columna tipo-datos
opciones-columna
tipo-datos:
tipo-incorporado
nombre-tipo-diferenciado
tipo-incorporado:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(34)
DECFLOAT
(16)
(1 BYTE)
CHARACTER
CHAR BYTE (1)
(entero ) FOR BIT DATA
BYTE
VARCHAR (entero )
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1)
NCHAR
NATIONAL CHAR (entero)
CHARACTER
NVARCHAR (entero)
NCHAR VARYING
NATIONAL CHAR VARYING
CHARACTER
(1M)
NCLOB
NCHAR LARGE OBJECT (entero )
NATIONAL CHARACTER LARGE OBJECT K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
opciones-columna:
? ?
NOT NULL
Sentencias 571
CREATE GLOBAL TEMPORARY TABLE
?
cláusula-por-omisión
GENERATED ALWAYS AS IDENTITY
BY DEFAULT opciones-identidad
cláusula-por-omisión:
WITH
DEFAULT
valores-omisión
valores-omisión:
constante
registro-especial-fecha-hora
registro-especial-usuario
CURRENT SCHEMA
NULL
función-conversión ( constante )
registro-especial-fecha-hora
registro-especial-usuario
CURRENT SCHEMA
EMPTY_CLOB()
EMPTY_DBCLOB()
EMPTY_NCLOB()
EMPTY_BLOB()
opciones-copia:
? ?
COLUMN
INCLUDING DEFAULTS
EXCLUDING
COLUMN ATTRIBUTES
EXCLUDING IDENTITY
?
COLUMN ATTRIBUTES
INCLUDING IDENTITY
cláusula-distribución:
,
HASH
DISTRIBUTE BY ( nombre-columna )
Notas:
1 La cláusula FOR BIT DATA se puede especificar en cualquier orden con las
restricciones de columna siguientes.
Descripción
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. Si se especifica un nombre compuesto de dos partes, el nombre de
esquema no puede empezar por 'SYS' (SQLSTATE 42939).
definición-columna
Define los atributos de una columna de la tabla temporal.
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 puede tener las características siguientes:
v Un tamaño de página de 4K con un máximo de 500 columnas, donde el
número total de bytes de las columnas no debe ser superior a 4.005.
v Un tamaño de página de 8K con un máximo de 1.012 columnas, donde
el número total de bytes de las columnas no debe ser superior a 8.101.
v Un tamaño de página de 16K con un máximo de 1.012 columnas, donde
el número total de bytes de las columnas no debe ser superior a 16.293.
v Un tamaño de página de 32K con un máximo de 1.012 columnas, donde
el número total de bytes de las columnas no debe ser superior a 32.677.
Una tabla temporal creada no puede tener una columna de inicio de fila,
una columna de fin de fila o una columna de ID de inicio de transacción.
Para ver más detalles, consulte el apartado “Tamaño de fila” en “CREATE
TABLE”.
tipo-datos
Especifica el tipo de datos de la columna.
tipo-incorporado
Especifica un tipo de datos incorporado. Consulte “CREATE TABLE”
para obtener una descripción de tipo-incorporado.
No se puede especificar un tipo de datos XML y
SYSPROC.DB2SECURITYLABEL para una tabla temporal creada.
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, respectivamente, la longitud y la escala del tipo de
fuente del tipo diferenciado.
opciones-columna
Define otras opciones relacionadas con las columnas de la tabla.
Sentencias 573
CREATE GLOBAL TEMPORARY TABLE
NOT NULL
Evita que la columna contenga valores nulos. Para obtener información
acerca de la especificación de valores nulos, consulte NOT NULL en
“CREATE TABLE”.
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 en el caso de que no se suministre
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”.
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:
v representar un valor que pueda asignarse a la columna de
acuerdo con las normas de asignación
v no ser una constante de coma flotante a menos que la columna
esté definida con un tipo de datos de coma flotante
v 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.
v 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)).
v 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. Tenga en cuenta que se puede especificar
USER en lugar de SESSION_USER y CURRENT_USER 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.
NULL
Especifica NULL como valor por omisión para la columna. Si se ha
especificado NOT NULL, puede especificarse DEFAULT NULL en
la misma definición de columna, pero se producirá un error si se
intenta establecer la columna en el valor por omisión.
función-conversión
Esta forma de valor por omisión sólo puede utilizarse 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, a excepción de 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,
Sentencias 575
CREATE GLOBAL TEMPORARY TABLE
Sentencias 577
CREATE GLOBAL TEMPORARY TABLE
ON COMMIT
Especifica la acción que se realiza sobre la tabla temporal creada cuando se
ejecuta una operación COMMIT. El valor por omisión es DELETE ROWS.
DELETE ROWS
Se suprimen todas las filas de la tabla si no hay ningún cursor abierto en la
tabla que esté definido con WITH HOLD.
PRESERVE ROWS
Las filas de la tabla se conservan.
LOGGED o NOT LOGGED
Especifica si se anotan cronológicamente las operaciones para la tabla. El valor
por omisión es NOT LOGGED ON ROLLBACK DELETE ROWS.
NOT LOGGED
Especifica que las operaciones de inserción, actualización o supresión
efectuadas en la tabla no deben anotarse cronológicamente, pero que la
creación o descarte de la tabla sí debe anotarse cronológicamente. Durante
una operación ROLLBACK (o ROLLBACK TO SAVEPOINT):
v Si la tabla se había creado dentro de una unidad de trabajo (o punto de
salvaguarda), la tabla se descarta
v Si la tabla se había descartado dentro de una unidad de trabajo (o punto
de salvaguarda), la tabla vuelve a crearse, pero sin datos
ON ROLLBACK
Especifica la acción que va a tener lugar en la tabla temporal creada sin
anotaciones cronológicas cuando se realice una operación ROLLBACK (o
ROLLBACK TO SAVEPOINT). El valor por omisión es DELETE ROWS.
DELETE ROWS
Si se han cambiado los datos de la tabla, se suprimirán todas las filas.
PRESERVE ROWS
Las filas de la tabla se conservan.
LOGGED
Especifica que las operaciones de inserción, actualización o supresión
efectuadas en la tabla, así como la creación o descarte de la tabla, deben
anotarse cronológicamente.
IN nombre-espacio-tablas
Identifica el espacio de tablas en el que se creará una instancia de la tabla
temporal creada. El espacio de tablas debe existir y estar definido como USER
TEMPORARY (SQLSTATE 42838), para el cual el ID de autorización de la
sentencia tiene el privilegio USE (SQLSTATE 42501). Si no se especifica esta
cláusula, se elige el espacio de tablas USER TEMPORARY con el tamaño de
página menor posible para el cual el ID de autorización de la sentencia tenga
el privilegio USE. Cuando existe más de un espacio de tablas que puede
elegirse, se establece una prioridad basada en quién recibió el privilegio USE:
1. El ID de autorización
2. Un grupo al que pertenezca el ID de autorización
3. 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. Cuando no hay ningún espacio de tablas
USER TEMPORARY elegible, se produce un error (SQLSTATE 42727).
La determinación del espacio de tablas puede cambiar cuando:
v Se descartan o crean espacios de tablas
Sentencias 579
CREATE GLOBAL TEMPORARY TABLE
Notas
v Debe existir un espacio de tablas temporal de usuario antes de crear una tabla
temporal creada (SQLSTATE 42727).
v Creación de instancias y terminación: en la explicación siguiente, P representa
una sesión y T es una tabla temporal creada de la sesión P:
– Se crea una instancia vacía de T como resultado de la primera referencia a T
que se ejecuta en P.
– Cualquier sentencia de SQL en P puede hacer referencia a T, y cualquier
referencia a T en P es una referencia a la misma instancia de T.
– Si se ha especificado, implícita o explícitamente, la cláusula ON COMMIT
DELETE ROWS, cuando una operación de confirmación finaliza una unidad
de trabajo en P, y no existe ningún cursor abierto en P que esté definido con
WITH HOLD y dependa de T, la confirmación incluye la operación DELETE
FROM T.
– Cuando una operación de retrotracción finaliza una unidad de trabajo o un
punto de salvaguarda en P, y esa unidad de trabajo o punto de salvaguarda
incluye una modificación de T:
- Si se especificó NOT LOGGED, se suprimen todas las filas desde T salvo
que se hubiera especificado también ON ROLLBACK PRESERVE ROWS.
Ejemplos
v Ejemplo 1: Crear una tabla temporal, CURRENTMAP. Asignar un nombre a dos
columnas, CODE y MEANING, ninguna de las cuales puede contener nulos.
CODE contiene datos numéricos y MEANING tiene datos de caracteres.
CREATE GLOBAL TEMPORARY TABLE CURRENTMAP
(CODE INTEGER NOT NULL,
MEANING VARCHAR (254) NOT NULL)
v Ejemplo 2: Crear una tabla temporal, TMPDEPT.
CREATE GLOBAL TEMPORARY TABLE TMPDEPT
(TMPDEPTNO CHAR(3) NOT NULL,
TMPDEPTNAME VARCHAR(36) NOT NULL,
TMPMGRNO CHAR(6),
TMPLOCATION CHAR(16) )
Sentencias 581
CREATE HISTOGRAM TEMPLATE
Invocación
Autorización
Sintaxis
CREATE HISTOGRAM TEMPLATE nombre-plantilla
Descripción
nombre-plantilla
Da nombre a la plantilla del histograma. Este nombre consta de una sola parte.
Se trata de un identificador de SQL (ordinario o delimitado). El nombre no
debe identificar una plantilla de histograma existente en el servidor actual
(SQLSTATE 42710). El nombre no debe empezar por los caracteres 'SYS'
(SQLSTATE 42939).
HIGH BIN VALUE constante-bigint
Especifica el valor superior desde el segundo binario hasta el último (el último
binario tiene un valor superior no vinculado). Las unidades dependen del
modo en que se utiliza el histograma. El valor máximo es 268 435 456.
Normas
v Una sentencia de SQL exclusiva de gestión de carga de trabajo (WLM) debe ir
después de una sentencia COMMIT o ROLLBACK (SQLSTATE 5U021). Las
sentencias de SQL exclusivas de WLM son:
– CREATE HISTOGRAM TEMPLATE, ALTER HISTOGRAM TEMPLATE o
DROP (HISTOGRAM TEMPLATE)
– CREATE SERVICE CLASS, ALTER SERVICE CLASS o DROP (SERVICE
CLASS)
– CREATE THRESHOLD, ALTER THRESHOLD o DROP (THRESHOLD)
– CREATE WORK ACTION SET, ALTER WORK ACTION SET o DROP (WORK
ACTION SET)
– CREATE WORK CLASS SET, ALTER WORK CLASS SET o DROP (WORK
CLASS SET)
– CREATE WORKLOAD, ALTER WORKLOAD o DROP (WORKLOAD)
– GRANT (privilegios de carga de trabajo) o REVOKE (privilegios de carga de
trabajo)
Notas
v Sólo se permite una sentencia de SQL exclusiva de WLM no confirmada a la vez
entre todas las particiones. Si se ejecuta una sentencia de SQL exclusiva de WLM
sin confirmar, las siguientes sentencias de SQL exclusivas de WLM esperarán
hasta que se confirme o retrotraiga la sentencia de SQL exclusiva de XML actual.
v Los cambios se graban en el catálogo del sistema, pero no surten efecto hasta
que se confirmen, incluso para la conexión que emite la sentencia.
Ejemplo
Sentencias 583
CREATE INDEX
CREATE INDEX
La sentencia CREATE INDEX se utiliza para definir un índice en una tabla DB2.
Un índice puede definirse en datos XML o en datos relacionales. La sentencia
CREATE INDEX también se utiliza para crear una especificación de índice
(metadatos que indican al optimizador que una tabla de fuente de datos tiene un
índice).
Invocación
Autorización
Sintaxis
,
(1) ASC
ON nombre-tabla ( nombre-columna )
(2) DESC
apodo (3)
BUSINESS_TIME WITHOUT OVERLAPS
? ?
PARTITIONED (4)
NOT PARTITIONED IN nombre-espacio-tablas
? ?
SPECIFICATION ONLY ,
(5)
INCLUDE ( nombre-columna )
?
(6)
especificación-índice-xml
CLUSTER
EXTEND USING nombre-extensión-índice
,
( expresión-constante )
PCTFREE 10
? ?
PCTFREE entero LEVEL2 PCTFREE entero
?
COLLECT STATISTICS COMPRESS NO
SAMPLED YES
DETAILED
UNSAMPLED
Notas:
1 En un sistema federado, nombre-tabla debe identificar una tabla en la base de
datos federada. No puede identificar una tabla de fuente de datos.
2 Si se especifica apodo, la sentencia CREATE INDEX crea una especificación de
índice. En este caso, no se pueden especificar INCLUDE,
especificación-índice-xml, CLUSTER, EXTEND USING, PCTFREE,
MINPCTUSED, DISALLOW REVERSE SCANS, ALLOW REVERSE SCANS,
PAGE SPLIT o COLLECT STATISTICS.
3 La cláusula BUSINESS_TIME WITHOUT OVERLAPS solamente se puede
especificar si se especifica UNIQUE.
4 La cláusula IN nombre-espacio-tablas solamente se puede especificar para un
índice no particionado en una tabla particionada.
5 La cláusula INCLUDE solamente se puede especificar si se especifica
UNIQUE.
6 Si se especifica especificación-índice-xml, no se puede especificar nombre-columna
DESC, INCLUDE o CLUSTER.
especificación-índice-xml:
(1)
GENERATE KEY USING XMLPATTERN cláusula-patrón-xml
Sentencias 585
CREATE INDEX
cláusula-tipo-xml
Notas:
1 Puede utilizarse la sintaxis alternativa GENERATE KEYS USING
XMLPATTERN.
cláusula-patrón-xml:
declaración-espacio-nombres:
expresión-patrón:
/ eje-avance prueba-nombre-xml
// prueba-tipo-xml
eje-avance:
child::
@
attribute::
descendant::
self::
descendant-or-self::
prueba-nombre-xml:
nombre-calificado-xml
comodín-xml
comodín-xml:
*
prefijo-ns-xml:*
*:nombre-nc-xml
prueba-tipo-xml:
node()
text()
comment()
processing instruction()
paso-función:
fn:upper-case ( )
, nombre-entorno-local
fn:exists ( prueba-nombre-xml )
cláusula-tipo-xml:
tipo-datos:
tipo-datos-sql
tipo-datos-sql:
(1)
SQL VARCHAR ( entero )
HASHED
DOUBLE
INTEGER
INT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
DATE
TIMESTAMP
Notas:
1 Si especifica un nombre de función, como fn:upper-case, al final del patrón
XML, los tipos de datos de índice soportados pueden ser un subconjunto de
los tipos de datos de índice que se muestran aquí. Puede comprobar si hay
tipos de datos de índice válidos en la descripción de cláusula-patrón-xml.
Descripción
UNIQUE
Si se especifica ON nombre-tabla, UNIQUE evita que la tabla contenga dos o
más filas con el mismo valor de la clave de índice. La unicidad de valores se
aplica al final de la sentencia de SQL que actualiza filas o inserta nuevas filas.
Sentencias 587
CREATE INDEX
Sentencias 589
CREATE INDEX
Si un índice tiene sólo una columna y los datos de dicha columna son de tipo
XML, y también se especifica la cláusula GENERATE KEY USING
XMLPATTERN, el índice es un índice sobre datos XML. Una columna con
datos de tipo XML sólo puede especificarse si también se especifica la cláusula
GENERATE KEY USING XMLPATTERN (SQLSTATE 42962). Si se especifica la
cláusula GENERATE KEY USING XMLPATTERN, sólo se puede especificar
una columna y el tipo de la columna debe ser XML.
ASC
Especifica que las entradas de índice se deben mantener en el orden
ascendente de los valores de columna; este es el valor por omisión. ASC no
se puede especificar para índices que están definidos con EXTEND USING
(SQLSTATE 42601).
DESC
Especifica que las entradas de índice se deben mantener en el orden
descendente de los valores de columna. DESC no se puede especificar para
índices que están definidos con EXTEND USING o si el índice es un índice
sobre datos XML (SQLSTATE 42601).
BUSINESS_TIME WITHOUT OVERLAPS
BUSINESS_TIME WITHOUT OVERLAPS sólo se pueden especificar para un
índice definido como UNIQUE (SQLSTATE 428HW) a fin de indicar que, para
el resto de las claves especificadas, los valores son exclusivos con respecto de
cualquier período de tiempo. BUSINESS_TIME WITHOUT OVERLAPS sólo se
puede especificar como último elemento de la lista. Cuando se especifica
BUSINESS_TIME WITHOUT OVERLAPS, la columna final y la columna inicial
del período BUSINESS_TIME se añaden automáticamente a la clave de índice
en orden ascendente e impone que no haya solapamientos en el tiempo.
Cuando se especifica BUSINESS_TIME WITHOUT OVERLAPS, las columnas
del período BUSINESS_TIME no deben especificarse como columnas de clave,
como columnas en la clave de particionamiento ni como columnas en la clave
de distribución (SQLSTATE 428HW).
PARTITIONED
Indica que debe crearse un índice particionado. El nombre-tabla debe identificar
una tabla definida con las particiones de datos (SQLSTATE 42601).
Si la tabla está particionada y no se especifica ni PARTITIONED ni NOT
PARTITIONED, el índice se crea como particionado (con algunas excepciones).
Se crea un índice no particionado en lugar de un índice particionado si se
aplican alguna de las situaciones siguientes:
v Se especifique UNIQUE y la clave de índice no incluya todas las columnas
de clave de particionamiento de tabla.
v Se crea un índice espacial.
v El índice se define sobre datos XML.
Un índice particionado con una definición que duplique la definición de un
índice no particionado no se considera un índice duplicado. Para obtener más
información, consulte el apartado “Normas” en la página 602 de este tema.
La palabra clave PARTITIONED no puede especificarse para los índices
siguientes:
v Un índice en una tabla no particionada (SQLSTATE 42601)
v Un índice definido sobre datos XML (SQLSTATE 42613)
v Un índice único donde la clave de índice no incluya todas las columnas de
clave de particionamiento de la tabla (SQLSTATE 42990)
v Un índice espacial (SQLSTATE 42997)
Sentencias 591
CREATE INDEX
especificación-índice-xml
Especifica cómo se generan las claves de índice a partir de documentos XML
que están almacenados en una columna XML. No se puede especificar
especificación-índice-xml si hay más de una columna de índice o si la columna no
tiene el tipo de datos XML.
Esta cláusula sólo se aplica a columnas XML (SQLSTATE 429BS).
GENERATE KEY USING XMLPATTERN cláusula-patrón-xml
Especifica las partes de un documento XML que deben indexarse. Los
valores de patrón XML son los valores indexados generados por la
cláusula-patrón-xml. El índice no soporta los nodos de tipo de datos de lista.
Si un nodo es calificado por la cláusula-patrón-xml y existe un esquema
XML que especifica que el nodo es de tipo de datos de lista, el nodo de
tipo de datos de lista no se puede indexar (SQLSTATE 23526 para
sentencias CREATE INDEX o SQLSTATE 23525 para sentencias INSERT y
UPDATE).
cláusula-patrón-xml
Contiene una expresión de patrón que identifica los nodos que deben
indexarse. Consta de una declaración-espacio-nombres opcional y de una
expresión-patrón necesaria.
declaración-espacio-nombres
Si la expresión de patrón contiene nombres calificados, debe
especificarse una declaración-espacio-nombres para definir prefijos de
espacios de nombres. Puede definirse un espacio de nombres por
omisión para nombres sin calificar.
DECLARE NAMESPACE prefijo-espacio-nombres=uri-espacio-
nombres
Correlaciona el prefijo-espacio-nombres, que es un nombreNC,
con el uri-espacio-nombres, que es un literal de cadena. La
declaración-espacio-nombres puede contener varias correlaciones
prefijo-espacio-nombres-a-uri-espacio-nombres. El
prefijo-espacio-nombres debe ser exclusivo dentro de la lista de
declaración-espacio-nombres (SQLSTATE 10503).
DECLARE DEFAULT ELEMENT NAMESPACE uri-espacio-nombres
Declara el URI de espacio de nombres por omisión para los
tipos o los nombres de elemento sin calificar. Si no se ha
declarado ningún espacio de nombres por omisión, los tipos y
los nombres de elemento sin calificar no se encuentran en
ningún espacio de nombres. Sólo se puede declarar un espacio
de nombres por omisión (SQLSTATE 10502).
expresión-patrón
Especifica los nodos de un documento XML que están indexados.
La expresión-patrón puede contener caracteres comodín (*). Es
similar a una expresión de vía de acceso en XQuery, pero admite
un subconjunto de lenguaje XQuery que DB2 también admite.
/ (barra inclinada)
Separa los pasos de la expresión de vía de acceso.
// (dos barras inclinadas)
Es la sintaxis abreviada para /descendant-or-self::node()/. Si se
especifica UNIQUE, no se puede utilizar // (dos barras
inclinadas).
eje-avance
Sentencias 593
CREATE INDEX
child::
Especifica los hijos del nodo de contexto. Es el valor por
omisión, si no se especifica ningún otro eje de avance.
@ Especifica los atributos del nodo de contexto. Ésta es la
sintaxis abreviada del atributo::.
attribute::
Especifica los atributos del nodo de contexto.
descendant::
Especifica los descendientes del nodo de contexto. No se
puede utilizar descendant:: si también se especifica
UNIQUE.
self::
Especifica el nodo de contexto propiamente dicho.
descendant-or-self::
Especifica el nodo de contexto y los descendientes del
nodo de contexto. No se puede utilizar descendant-or-self::
si también se especifica UNIQUE.
prueba-nombre-xml
Especifica el nombre del nodo para el paso en la vía utilizando
un nombre XML calificado (nombre-xml-c) o un comodín
(comodín-xml).
nombre-nc-xml
Nombre XML según define XML 1.0. No puede incluir el
carácter de dos puntos.
nombre-xml-c
Especifica un nombre XML calificado (conocido por
QName) que puede tener dos formas posibles:
v prefijo-ns-xml:nombre-nc-xml, donde prefijo-ns-xml es
un nombre-nc-xml que identifica un espacio de nombres
del ámbito.
v nombre-nc-xml, que indica que el espacio de nombres
por omisión debe aplicarse como prefijo-ns-xml
implícito.
comodín-xml
Especifica un nombre-xml-c como un comodín que puede
tener tres formas posibles:
v * (un único carácter de asterisco) indica cualquier
nombre-xml-calificado
v prefijo-ns-xml:* indica cualquier nombre-nc-xml dentro
del espacio de nombres especificado
v *:nombre-nc-xml indica un nombre XML específico dentro
de cualquier espacio de nombres del ámbito
No se puede utilizar comodín-xml en el paso de contexto de
una expresión de patrón si también se especifica UNIQUE.
prueba-tipo-xml
Utilice estas opciones para especificar con qué tipos de nodo
coincide el patrón. Las opciones disponibles son:
node()
Coincide con cualquier nodo. No se puede utilizar node() si
también se especifica UNIQUE.
text()
Coincide con cualquier nodo de texto.
comment()
Coincide con cualquier nodo de comentario.
processing-instruction()
Coincide con cualquier nodo de instrucción de proceso. No
se puede utilizar processing-instruction() si también se
especifica UNIQUE.
paso-función
Utilice estas llamadas de función para especificar índices con
propiedades especiales, como que no se tiene en cuenta las
mayúsculas y minúsculas. Sólo se permite un paso de función
por cada cláusula XMLPATTERN. Los pasos de función sólo se
pueden aplicar en elementos o atributos. No se puede colocar
ninguna opción prueba-tipo-xml justo antes del paso de función.
La función no se puede utilizar en medio del XMLPATTERN y
debe aparecer sólo en el paso final. Actualmente, sólo se da
soporte a las funciones fn:upper-case y fn:exists.
Tenga en cuenta que, en lugar de especificar el prefijo fn: para
el nombre de función, puede especificar otro espacio de
nombres válido o puede completamente fn:.
fn:upper-case
Hace que los valores de índice se almacenen en formato de
mayúsculas. El primer parámetro de fn:upper-case es
obligatorio y debe ser una expresión de elemento de
contexto (' . '); el segundo parámetro es opcional y es el
entorno local. Si fn:upper-case aparece en el patrón,
VARCHAR y VARCHAR HASHED son los únicos tipos de
índice soportados.
fn:exists
Comprueba si existe un elemento o un elemento de
atributo en el documento XML. Si el elemento existe, este
predicado devuelve true. El parámetro de fn:exists es
obligatorio y debe ser un elemento o un atributo. Si esta
función se utiliza en la vía de acceso de índice, el tipo de
índice debe definirse como VARCHAR(1).
cláusula-tipo-xml
AS tipo-datos
Especifica el tipo de datos a los que se convierten los valores
indexados antes de almacenarlos. Los valores se convierten al tipo
de datos de índice XML que corresponde al tipo de datos de índice
SQL especificado.
Tabla 17. Tipos de datos de índice correspondientes
Tipo de datos de índice XML Tipo de datos de índice SQL
xs:string VARCHAR(entero), VARCHAR HASHED
xs:double DOUBLE
Sentencias 595
CREATE INDEX
Sentencias 597
CREATE INDEX
Sentencias 599
CREATE INDEX
Sentencias 601
CREATE INDEX
YES
Especifica que la compresión de índice está habilitada. Las operaciones de
inserción y actualización del índice estarán sujetas a compresión.
NO Especifica que la compresión de índice está inhabilitada.
Normas
v La sentencia CREATE INDEX fallará (SQLSTATE 01550) cuando se intenta crear
un índice que coincida con un índice ya existente.
Los factores siguientes se utilizan para determinar si dos índices coinciden. Estos
factores se combinan de varias maneras diferentes en las normas que determinan
si dos índices coinciden. Los factores siguientes se utilizan para determinar si
dos índices coinciden:
1. Los conjuntos de columnas de índice, incluida cualquier columna INCLUDE,
son iguales en ambos índices.
2. El orden de las columnas de claves de índice, incluida cualquier columna
INCLUDE, es el mismo en ambos índices.
3. Las columnas de claves del nuevo índice son las mismas o un superconjunto
de las columnas de claves en el índice existente.
4. El orden de los atributos de las columnas es el mismo en ambos índices.
5. El índice existente es exclusivo.
6. Ambos índices no son únicos.
Las combinaciones siguientes de estos factores forman las normas que
determinan cuando dos índices se consideran duplicados:
– 1+2+4+5
– 1+2+4+6
– 1+2+3+5
Excepciones:
– Si uno de los índices comparados está particionado y el otro no está
particionado, los índices no se consideran duplicados si tienen nombres
distintos, aunque se cumplan otras condiciones de índices coincidentes.
– Para los índices de datos XML, dos descripciones de índice no se consideran
duplicadas si los nombres del índice son distintos, aun cuando la columna
XML indexada, los patrones XML y los tipos de datos, incluidas sus opciones,
sean idénticos.
v Los índices exclusivos de las MQT mantenidas por el sistema no reciben soporte
(SQLSTATE 42809).
v Las opciones COLLECT STATISTICS no reciben soporte si se ha especificado un
apodo (SQLSTATE 42601).
Notas
v El acceso de lectura/grabación simultáneo durante la creación de índices y el
comportamiento de creación de índices por omisión es distinto para los índices
de tablas no particionadas, los índices no particionados, los índices particionados
y los índices de un entorno DB2 pureScale:
– En el caso de índices no particionados, se permite el acceso de
lectura/grabación simultáneo a la tabla mientras se está creando un índice,
salvo cuando se especifica una cláusula EXTEND USING. Una vez creado el
índice, los cambios que se han realizado en la tabla durante la creación del
índice se reenvían e incorporan al nuevo índice. El acceso de grabación a la
Sentencias 603
CREATE INDEX
– GBPCACHE
– PIECESIZE
– TYPE 2
– utilizando-bloque
La sintaxis siguiente se acepta como comportamiento por omisión:
– COPY NO
– DEFER NO
Ejemplos
v Ejemplo 1: Cree un índice denominado UNIQUE_NAM en la tabla PROJECT. La
finalidad de este índice consiste en garantizar que en la misma tabla no habrá
dos entradas que tengan el mismo valor para el nombre del proyecto
(PROJNAME). Las entradas de índice deben estar en orden ascendente.
CREATE UNIQUE INDEX UNIQUE_NAM
ON PROJECT(PROJNAME)
v Ejemplo 2: Cree un índice denominado JOB_BY_DPT en la tabla EMPLOYEE.
Disponga las entradas de índice en orden ascendente por el título de los trabajos
(JOB) dentro de cada departamento.
CREATE INDEX JOB_BY_DPT
ON EMPLOYEE (WORKDEPT, JOB)
v Ejemplo 3: El apodo EMPLOYEE hace referencia a una tabla de fuente de datos
denominada CURRENT_EMP. Tras la creación de este apodo, se ha definido un
índice en CURRENT_EMP. Las columnas escogidas para la clave de índice
fueron WORKDEBT y JOB. Cree una especificación de índice que describa a este
índice. Mediante esta especificación, el optimizador sabrá que el índice existe y
cuál es su clave. Con esta información, el optimizador puede mejorar su
estrategia de acceso a la tabla.
CREATE UNIQUE INDEX JOB_BY_DEPT
ON EMPLOYEE (WORKDEPT, JOB)
SPECIFICATION ONLY
v Ejemplo 4: Cree un tipo de índice ampliado denominado SPATIAL_INDEX en
una ubicación de columna de tipo estructurado. La descripción de la extensión
de índice GRID_EXTENSION se utiliza para mantener SPATIAL_INDEX. El
literal se proporciona a GRID_EXTENSION para crear el tamaño de cuadrícula
de índice.
CREATE INDEX SPATIAL_INDEX ON CUSTOMER (LOCATION)
EXTEND USING (GRID_EXTENSION (x’000100100010001000400010’))
v Ejemplo 5: Cree un índice denominado IDX1 en una tabla denominada TAB1 y
recopile estadísticas de índice básicas en el índice IDX1.
CREATE INDEX IDX1 ON TAB1 (col1) COLLECT STATISTICS
v Ejemplo 6: Cree un índice denominado IDX2 en una tabla denominada TAB1 y
recopile estadísticas de índice detalladas en el índice IDX2.
CREATE INDEX IDX2 ON TAB1 (col2) COLLECT DETAILED STATISTICS
v Ejemplo 7: Cree un índice denominado IDX3 en una tabla denominada TAB1 y
recopile estadísticas de índice detalladas en el índice IDX3 utilizando el
muestreo.
CREATE INDEX IDX3 ON TAB1 (col3) COLLECT SAMPLED DETAILED STATISTICS
v Ejemplo 8: Crea un índice exclusivo denominado A_IDX en una tabla
particionada denominada MYNUMBERDATA en el espacio de tablas IDX_TBSP.
CREATE UNIQUE INDEX A_IDX ON MYNUMBERDATA (A) IN IDX_TBSP
v Ejemplo 9: Cree un índice no exclusivo denominado B_IDX en una tabla
particionada denominada MYNUMBERDATA en el espacio de tablas IDX_TBSP.
Sentencias 605
SCREATE INDEX EXTENSION
Invocación
Autorización
Sintaxis
CREATE INDEX EXTENSION nombre-extensión-índice
,
( nombre1-parámetro tipo1-datos )
mantenimiento-índice búsqueda-índice
mantenimiento-índices:
búsqueda-índice:
definición-método-búsqueda:
FILTER USING invocación-función-filtrado-índice
expresión-mayúsculas-minúsculas
Descripción
nombre-extensión-índice
Designa la extensión de índice. El nombre (incluido el calificador implícito o
explícito) no debe designar una extensión de índice descrita en el catálogo. Si
se especifica un nombre-extensión-índice compuesto de dos partes, el nombre de
esquema no puede empezar por 'SYS'; de lo contrario se devuelve un error
(SQLSTATE 42939).
nombre-parámetro1
Identifica un parámetro que se pasa a la extensión de índice, al ejecutar
CREATE INDEX, para definir el comportamiento de la extensión de índice.
El parámetro que se pasa a la extensión de índice se llama parámetro de
instancia, pues ese valor define una nueva instancia de una extensión de
índice.
nombre-parámetro1 debe ser exclusivo dentro de la definición de la extensión
de índice. No se permiten más de 90 parámetros. Si se excede este límite,
se produce un error (SQLSTATE 54023).
tipo1-datos
Especifica el tipo de datos de cada parámetro. Debe especificarse una
entrada de la lista para cada parámetro que la extensión de índice espera
recibir. Los únicos tipos de datos SQL que se pueden especificar son los
que se pueden utilizar como constantes, tales como VARCHAR, INTEGER,
DECIMAL, DOUBLE o VARGRAPHIC (SQLSTATE 429B5). No se puede
especificar el tipo de datos de coma flotante decimal (SQLSTATE 429B5). El
valor de parámetro que la extensión de índice recibe al ejecutarse CREATE
INDEX debe coincidir exactamente con tipo-datos1, incluida la longitud,
precisión y escala (SQLSTATE 428E0).
mantenimiento-índices
Especifica cómo se realiza el mantenimiento de las claves de índice de una
columna de tipo estructurado o de tipo diferenciado. El mantenimiento de
índices es el proceso de transformar la columna fuente en una clave destino. El
proceso de transformación se define utilizando una función de tabla que
previamente se ha definido en la base de datos.
FROM SOURCE KEY (nombre2-parámetro tipo2-datos)
Especifica un tipo de datos estructurado o tipo diferenciado para la
columna de la clave fuente que está soportada por esta extensión de índice.
nombre-parámetro2
Identifica el parámetro que está asociado a la columna de la clave
Sentencias 607
SCREATE INDEX EXTENSION
búsqueda-índice
Especifica cómo se realiza la búsqueda proporcionando una correlación de los
argumentos de búsqueda con rangos de búsqueda.
WITH TARGET KEY
Especifica los parámetros de clave destino que son la salida de la función
generadora de índices especificada en la cláusula GENERATE KEY USING.
nombre3-parámetro
Identifica el parámetro asociado a una clave destino determinada.
nombre-parámetro3 corresponde a las columnas de la tabla RETURNS tal
como está especificado en la función de tabla de la cláusula GENERATE
KEY USING. El número de parámetros especificados debe coincidir con el
número de columnas devueltas por esa función de tabla (SQLSTATE
428E2).
tipo-datos3
Especifica el tipo de datos para cada nombre-parámetro3 correspondiente.
tipo3-datos debe coincidir exactamente con el tipo de datos de las columnas
de salida correspondientes de la tabla RETURNS, tal como está
especificado en la función de tabla de la cláusula GENERATE KEY USING
(SQLSTATE 428E2), incluida la longitud, precisión y tipo.
SEARCH METHODS
Presenta los métodos de búsqueda que están definidos para el índice.
definición-método-búsqueda
Especifica las características del método de la búsqueda por índice. Consta de
un nombre de método, los argumentos de búsqueda, una función productora
de rangos y una función opcional de filtrado de índice.
WHEN nombre-método
Es el nombre de un método de búsqueda. Es un identificador de SQL que
está asociado con el nombre de método especificado en la norma de
explotación de índice (situada en la cláusula PREDICATES de una función
definida por el usuario). El nombre-método-búsqueda puede estar
referenciado por una sola cláusula WHEN en la definición del método de
búsqueda (SQLSTATE 42713).
nombre4-parámetro
Identifica el parámetro de un argumento de búsqueda. Estos nombres se
utilizan en las cláusulas RANGE THROUGH y FILTER USING.
tipo4-datos
Es el tipo de datos asociado a un parámetro de búsqueda.
RANGE THROUGH invocación-función-productora-rangos
Especifica una función de tabla externa que produce rangos de búsqueda.
Esta función utiliza nombre-parámetro1, nombre-parámetro4 o una constante
como argumentos y devuelve un conjunto de rangos de búsqueda.
La función de tabla que se utiliza en invocación-función-producción-rango
debe cumplir estas condiciones:
v Su resolución debe producir una función de tabla (SQLSTATE 428E4)
v No debe incluir una subconsulta (SQLSTATE 428E3) ni una función SQL
(SQLSTATE 428E4) en sus argumentos
v No debe incluir una expresión XMLQUERY o XMLEXISTS en sus
argumentos (SQLSTATE 428E3)
v No debe estar definida con PARAMETER CCSID UNICODE si esta base
de datos no es Unicode (SQLSTATE 428E4)
Sentencias 609
SCREATE INDEX EXTENSION
Notas
v La creación de una extensión de índice 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.
Ejemplo
Sentencias 611
SCREATE INDEX EXTENSION
CREATE MASK
La sentencia CREATE MASK crea una máscara de columna en el servidor actual.
Una máscara de columna especifica el valor que ha de devolverse para una
columna especificada.
Invocación
Autorización
Sintaxis
CREATE MASK nombre-máscara ON nombre-tabla
OR REPLACE
AS
nombre-correlación
DISABLE
FOR COLUMN nombre-columna RETURN expresión-case
ENABLE
Descripción
OR REPLACE
Especifica que se debe sustituir la máscara de columna si existe una en el
servidor actual. La definición existente se descarta de forma efectiva antes de
que se sustituya la nueva definición en el catálogo.
nombre-máscara
Asigna un nombre a la máscara de columna. El nombre, incluyendo el
calificador implícito o explícito, no debe identificar una máscara de columna o
un permiso de fila que ya existe en el servidor actual (SQLSTATE 42710).
nombre-tabla
Identifica la tabla en la que se crea la máscara de columna. El nombre debe
identificar una tabla existente en el servidor actual (SQLSTATE 42704). No debe
identificar apodos, tablas temporales creadas o declaradas, vistas, sinónimos,
tablas con tipo, alias (SQLSTATE 42809) o tablas de catálogo (SQLSTATE
42832).
Sentencias 613
CREATE MASK
nombre-correlación
Especifica un nombre de correlación que se puede utilizar dentro de la
expresión-case para designar la tabla.
FOR COLUMN nombre-columna
Identifica la columna a la que se aplica la máscara. nombre-columna debe ser un
nombre no calificado que identifica una columna de la tabla (SQLSTATE
42703). No debe existir ya una máscara para la columna (SQLSTATE 428HC).
La columna no debe ser ninguna de las columnas siguientes:
v Una columna LOB o una columna de tipo diferenciado que se base en un
LOB (SQLSTATE 42962).
v Una columna XML (SQLSTATE 42962).
v Una columna a la que se haga referencia en una expresión que define una
columna generada (SQLSTATE 428HB).
RETURN expresión-case
Especifica una expresión CASE que se evaluará para determinar el valor que se
devolverá a la columna (SQLSTATE 42601). El resultado de la expresión CASE
se devuelve en lugar del valor de columna en una fila. El tipo de datos de
resultado, el atributo nulo y el atributo de longitud de la expresión CASE
deben ser idénticos a los de nombre-columna (SQLSTATE 428HB). Si el tipo de
datos de nombre-columna es un tipo de datos definido por el usuario, el tipo de
datos de resultado de la expresión CASE debe ser el mismo tipo de datos
definido por el usuario. La expresión CASE no debe hacer referencia a ninguno
de los objetos o elementos siguientes (SQLSTATE 428HB):
v Una tabla temporal global creada o una tabla temporal global declarada.
v Un apodo.
v Una función de tabla.
v Un método.
v Un marcador de parámetro (SQLSTATE 42601).
v Una función definida por el usuario que no se define como segura.
v Una función o expresión (como una expresión de cambio de fila o una
expresión de secuencia) que no es determinante o que tiene una acción
externa.
v Una función escalar XMLQUERY.
v Un predicado XMLEXISTS.
v Una especificación OLAP.
v Un * o name.* en una cláusula SELECT.
v Una pseudocolumna.
v Una función agregada sin especificar la cláusula SELECT.
v Una vista que incluya alguna de las restricciones incluidas anteriormente en
su definición.
Si la expresión CASE hace referencia a tablas para las cuales el control de
acceso de fila o columna está actualmente activado, el control de acceso de las
tablas en cuestión no será en cascada. Consulte la sección Notas para obtener
información detallada.
ENABLE o DISABLE
Especifica que la máscara de columna se debe habilitar o inhabilitar para el
control de acceso a columnas. El valor por omisión es DISABLE.
DISABLE
Especifica que la máscara de columna se debe inhabilitar para el control de
Sentencias 615
CREATE MASK
Notas
v Máscaras de columna que se han creado antes de activar el control de acceso a
columnas para una tabla: la sentencia CREATE MASK es una sentencia
independiente que se puede utilizar para crear una máscara de control de acceso
a columnas antes de activar el control de acceso a columnas para una tabla. El
único requisito será que la tabla y las columnas existan antes de crear la
máscara. Se pueden crear varias máscaras de columna para una tabla, pero una
columna sólo puede tener una máscara.
La definición de una máscara se almacena en el catálogo de DB2. Se registrará la
dependencia de la tabla para la cual se está creando la máscara y las
dependencias de otros objetos a los que se hace referencia en la definición. No se
invalidará ningún paquete o sentencia en memoria caché dinámicas. Se puede
crear una máscara de columna como habilitada o inhabilitada para el control de
acceso a columnas. Una máscara de columna habilitada no entra en vigor hasta
que se utiliza la sentencia ALTER TABLE con la cláusula ACTIVATE COLUMN
ACCESS CONTROL para activar el control de acceso a columnas para la tabla.
Se necesita la autorización SECADM para emitir una sentencia ALTER TABLE.
Una máscara de columna inhabilitada sigue sin ser efectiva incluso cuando el
control de acceso a columnas está activado para la tabla. Se puede utilizar la
sentencia ALTER MASK para alternar entre ENABLE y DISABLE.
Ejemplos
v Ejemplo 1: después de activar el control de acceso a columnas para la tabla
EMPLOYEE, Paul, del departamento de contabilidad, podrá ver el número de la
seguridad social del empleado cuyo número de empleado es 123456. Mary,
gerente, podrá ver únicamente los cuatro últimos caracteres del número de la
seguridad social. Peter, que no tiene ningún rol, no podrá ver el número de la
seguridad social.
Sentencias 617
CREATE MASK
END
ENABLE;
CREATE MASK BONUS_MASK ON EMPLOYEE
FOR COLUMN BONUS RETURN
CASE WHEN (BONUS > 5000) THEN NULL
ELSE BONUS
END
ENABLE;
ALTER TABLE EMPLOYEE ACTIVATE COLUMN ACCESS CONTROL;
SELECT SALARY FROM EMPLOYEE WHERE EMPNO = 123456;
Sentencias 619
CREATE METHOD
CREATE METHOD
La sentencia CREATE METHOD se utiliza para asociar un cuerpo de método a una
especificación de método que ya forma parte de la definición de un tipo
estructurado definido por el usuario.
Invocación
Autorización
Sintaxis
? EXTERNAL ? ?
NAME 'serie' TRANSFORM GROUP nombre-grupo
identificador
INHERIT ISOLATION LEVEL WITHOUT LOCK REQUEST
cuerpo-método-SQL
INHERIT ISOLATION LEVEL WITH LOCK REQUEST
signatura-método:
nombre-método ( )
,
tipo1-datos
nombre-parámetro AS LOCATOR
RETURNS tipo2-datos
AS LOCATOR
tipo3-datos CAST FROM tipo4-datos
AS LOCATOR
cuerpo-método-SQL:
RETURN
(1)
SQL compuesto (en línea)
Notas:
1 La sentencia de SQL compuesto (en línea) sólo se soporta para un
cuerpo-método-SQL de una definición de método de SQL de una base de
datos no particionada.
Descripción
METHOD
Identifica una especificación de método existente que está asociada a un tipo
estructurado definido por el usuario. La especificación-método se puede
identificar de varias maneras:
nombre-método
Designa la especificación de método para la que se define un cuerpo de
método. El esquema implícito es el esquema del tipo indicado (nombre-tipo).
Debe existir una sola especificación de método para nombre-tipo que tenga
este nombre-método (SQLSTATE 42725).
signatura-método
Proporciona la signatura del método, que identifica de manera exclusiva el
método que se debe definir. La signatura de método debe coincidir con la
especificación proporcionada en la sentencia CREATE TYPE o ALTER
TYPE (SQLSTATE 42883).
nombre-método
Designa la especificación de método para la que se define un cuerpo
de método. El esquema implícito es el esquema del tipo indicado
(nombre-tipo).
nombre-parámetro
Designa el nombre del parámetro. Si la signatura de método
proporciona nombres de parámetros, deben coincidir exactamente
Sentencias 621
CREATE METHOD
Sentencias 623
CREATE METHOD
cuerpo-método-SQL
El cuerpo-método-SQL define cómo se implementa el método si la
especificación de método en CREATE TYPE es LANGUAGE SQL.
El cuerpo-método-SQL debe adaptarse a las siguientes partes de la
especificación de método:
v DETERMINISTIC o NOT DETERMINISTIC (SQLSTATE 428C2)
v EXTERNAL ACTION o NO EXTERNAL ACTION (SQLSTATE 428C2)
v CONTAINS SQL o READS SQL DATA (SQLSTATE 42985)
En el cuerpo-método-SQL se puede hacer referencia a nombres de parámetros.
El sujeto del método se pasa a la implementación de método como un primer
parámetro implícito llamado SELF.
Para obtener más información, consulte la “Sentencia de SQL compuesto (en
línea)” y la “Sentencia RETURN”.
Normas
v Para poder utilizar CREATE METHOD, se debe definir previamente la
especificación de método utilizando la sentencia CREATE TYPE o ALTER TYPE
(SQLSTATE 42723).
v Si el método que está creándose es un método de alteración temporal, se
invalidan los paquetes que dependen de los métodos siguientes:
– El método original
– Otros métodos de alteración temporal cuyo sujeto es un supertipo del método
que está creándose
v El tipo de datos XML no se puede utilizar en un método.
Notas
v Si el método permite SQL, el programa externo no debe intentar acceder a
ningún objeto federado (SQLSTATE 55047).
v Privilegios: el definidor de un método siempre recibe el privilegio EXECUTE
sobre el método, así como el derecho de descartar el método.
Si se crea un método EXTERNAL, el usuario que define el método siempre
recibe el privilegio EXECUTE y WITH GRANT OPTION.
Si se crea un método de SQL, el usuario que define el método sólo recibirá el
privilegio EXECUTE y WITH GRANT OPTION para el método cuando dicho
usuario disponga de WITH GRANT OPTION para todos los privilegios
necesarios para definir el método o si dicho usuario dispone de autorización
SYSADM o DBADM. El usuario que define un método de SQL sólo adquiere
privilegios si, en el momento de crearse el método, existen los privilegios de los
que estos privilegios se obtienen. El usuario que define el método debe disponer
de estos privilegios directamente o bien porque PUBLIC tiene los privilegios. Los
privilegios que tienen los grupos de los que es miembro el usuario que define el
método no se consideran. Cuando se utiliza el método, el ID de autorización del
usuario conectado debe disponer de privilegios válidos para la tabla o vista a la
que hace referencia el apodo en la fuente de datos.
v Restricciones de acceso a las tablas: si un método se ha definido como READS
SQL DATA, ninguna sentencia del método podrá acceder a una tabla que la
sentencia que ha invocado el método está modificando (SQLSTATE 57053).
Ejemplos
v Ejemplo 1:
Sentencias 625
CREATE MODULE
CREATE MODULE
La sentencia CREATE MODULE crea un módulo en el servidor de aplicaciones.
Invocación
Autorización
Sintaxis
CREATE MODULE module-name
OR REPLACE
Descripción
OR REPLACE
Especifica que se debe sustituir la definición del módulo si existe una en el
servidor actual. La definición de módulo existente se descarta de forma
efectiva, incluidos todos los objetos del módulo, antes de que la nueva
definición se sustituya en el catálogo, con la excepción de que los privilegios
que se han otorgado sobre el módulo no se ven afectados por ello. Esta opción
se ignora si no existe una definición para el módulo en el servidor actual. Esta
opción sólo puede especificarla el propietario del objeto.
module-name
Da nombre al módulo. El nombre (incluido el calificador de esquema implícito
o explícito) no debe identificar un módulo existente en el servidor actual. El
nombre de módulo y el nombre de esquema no deben comenzar por los
caracteres ‘SYS’ (SQLSTATE 42939) y no se recomienda utilizar SESSION.
Notas
v Un módulo debe ser una recopilación de otros objetos de base de datos. Una vez
creado un módulo, los objetos contenidos en él se gestionan mediante la
sentencia ALTER MODULE. Un módulo puede incluir funciones,
procedimientos, tipos, variables globales y condiciones. Los objetos de un
módulo se pueden publicar para que estén disponibles de forma que se pueda
hacer referencia a ellos desde el exterior del módulo. Si un objeto no está
publicado, sólo se puede hacer referencia a él desde dentro del módulo. Se
considera que un módulo consta de dos partes:
– La especificación del módulo está formada por todos los objetos publicados,
excluidos los cuerpos de rutinas.
– El cuerpo del módulo está formado por todos los objetos que no están
publicados y por los cuerpos de cualquier rutina publicada.
Las acciones de gestión de módulos son las siguientes:
– ADD para agregar un objeto al módulo sin publicarlo o para sustituir un
prototipo de rutina por la definición de rutina implementada.
– PUBLISH para añadir un objeto al módulo y publicarlo.
– COMMENT para comentar objetos del módulo.
– DROP para descartar un objeto del módulo o para descartar el cuerpo del
módulo.
Debe existir un objeto publicado como mínimo en un módulo para que se pueda
hacer referencia al módulo.
Ejemplo
Sentencias 627
CREATE NICKNAME
CREATE NICKNAME
La sentencia CREATE NICKNAME define un apodo para un objeto de fuente de
datos.
Invocación
Autorización
Para las fuentes de datos que requieren una correlación de usuarios, los privilegios
contenidos en el ID de autorización en la fuente de datos deben incluir el
privilegio para seleccionar datos del objeto que el apodo representa.
Sintaxis
CREATE NICKNAME apodo
OR REPLACE
FOR nombre-objeto-remoto
definición-datos-no-relacionales
,
definición-datos-no-relacionales:
lista-columna-apodo:
( definición-columna-apodo )
restricción-unicidad
restricción-referencia
restricción-comprobación
definición-columna-apodo:
tipo-datos-locales:
tipo-incorporado
nombre-tipo-diferenciado
tipo-incorporado:
Sentencias 629
CREATE NICKNAME
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(1)
CHARACTER
CHAR (entero) (1)
VARCHAR (entero) FOR BIT DATA
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
XML
opciones-columna-apodo:
NOT NULL
PRIMARY KEY atributos-restricción
CONSTRAINT nombre-restricción UNIQUE
cláusula-referencias
CHECK ( condición-comprobación ) atributos-restricción
opciones-columna-federada
opciones-columna-federada:
restricción-unicidad:
UNIQUE
CONSTRAINT nombre-restricción PRIMARY KEY
( nombre-columna ) atributos-restricción
restricción-referencia:
cláusula-referencias
cláusula-referencias:
REFERENCES nombre-tabla
apodo ,
( nombre-columna )
atributos-restricción
restricción-comprobación:
CHECK ( nombre-comprobación )
CONSTRAINT nombre-restricción
atributos-restricción
condición-error:
condición-búsqueda
dependencia-funcional
dependencia-funcional:
( nombre-columna ) ( nombre-columna )
atributos-restricción:
Sentencias 631
CREATE NICKNAME
Notas:
1 La cláusula FOR BIT DATA se puede especificar en cualquier orden con las
restricciones de columna siguientes.
2 No se da soporte a DISABLE QUERY OPTIMIZATION para una restricción
de clave primaria o exclusiva.
Descripción
OR REPLACE
Especifica que se debe sustituir la definición del apodo 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 los
privilegios que se han otorgado sobre el apodo no se ven afectados por ello.
Esta opción se ignora si no existe una definición para el apodo en el servidor
actual. Esta opción sólo puede especificarla el propietario del objeto.
apodo
Especifica un apodo, el identificador utilizado por el servidor federado para el
objeto de fuente de datos. El apodo, 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 empezar por 'SYS' (SQLSTATE 42939).
FOR nombre-objeto-remoto
Especifica un identificador. Para fuentes de datos que dan soporte a nombres
de esquema, se trata de un identificador compuesto de tres partes con el
formato nombre-fuente-datos.nombre-esquema-remoto.nombre-tabla-remota. Para las
fuentes de datos que no dan soporte a nombres de esquema, se trata de un
identificador compuesto de dos partes con el formato nombre-fuente-
datos.nombre-tabla-remota.
nombre-fuente-datos
Nombra la fuente de datos que contiene la tabla o la vista para la cual se
está creando el apodo. El nombre-fuente-datos es el mismo nombre que se ha
asignado al nombre-servidor en la sentencia CREATE SERVER.
nombre-esquema-remoto
Nombra el esquema al que pertenece la tabla o la vista. Si el nombre de
esquema remoto contiene caracteres especiales o caracteres en minúsculas,
debe especificarse entre comillas dobles.
nombre-tabla-remota
Especifica el nombre del objeto de fuente de datos específico (como, por
ejemplo, una tabla o una vista) para el que se crea el apodo. La tabla no
puede ser una tabla temporal declarada (SQLSTATE 42995). Si el nombre
de tabla remota contiene caracteres especiales o caracteres en minúsculas,
debe especificarse entre comillas dobles. En el caso de DB2 Database para
Linux, UNIX y Windows, también puede especificar el alias de una tabla,
una vista o un apodo. Para DB2 para z/OS o DB2 para i, puede especificar
el alias de una tabla o una vista.
definición-datos-no-relacionales
Define los datos a los que se debe acceder a través de un derivador no
relacional.
definición-columna-apodo
Define los atributos locales de la columna para el apodo. Algunos
derivadores necesitan que se especifiquen estos atributos, mientras que
otros derivadores admiten que los atributos se determinen a partir de la
fuente de datos.
nombre-columna
Especifica el nombre local de la columna. El nombre puede ser
diferente del de la columna correspondiente del nombre-objeto-remoto.
tipo-datos-locales
Especifica el tipo de datos locales para la columna. Algunos
derivadores sólo dan soporte a un subconjunto de tipos de datos SQL.
Para ver descripciones de tipos de datos específicos, consulte “CREATE
TABLE” .
opciones-columna-apodo
Especifica opciones adicionales relacionadas con columnas del apodo.
NOT NULL
Especifica que la columna no admite valores nulos.
CONSTRAINT nombre-restricción
Indica el nombre de la restricción. Un nombre-restricción no debe
identificar una restricción que ya se haya especificado en la misma
sentencia CREATE NICKNAME (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 el apodo. (El identificador se
compone de la palabra 'SQL' seguida de 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 una
especificación de índice que se crea para dar soporte a la
restricción.
PRIMARY KEY
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.
Consulte PRIMARY KEY en la descripción de restricción-unicidad.
UNIQUE
Proporciona un método abreviado de definir una clave de unicidad
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.
Consulte UNIQUE en la descripción de restricción-unicidad.
cláusula-referencias
Proporciona un método abreviado de definir una clave externa
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
Sentencias 633
CREATE NICKNAME
Sentencias 635
CREATE NICKNAME
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 realmente a la
restricción. Es la opción por omisión.
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
Se supone que la restricción es verdadera y se puede utilizar para
la optimización de la consulta bajo las circunstancias adecuadas.
DISABLE QUERY OPTIMIZATION
No se puede utilizar la restricción para la optimización de
consulta.
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 que define una
dependencia funcional 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-comprobación debe ser
verdadera o desconocida para cada fila del apodo.
condición-búsqueda
La condición-búsqueda tiene las restricciones siguientes:
v Una referencia a columna debe ser a una columna del apodo que se
crea.
v La condición-búsqueda no puede contener un predicado TYPE.
v No puede contener ninguno de los elementos siguientes (SQLSTATE
42621):
– Subconsultas
– 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 definidas para que exista una acción externa
Sentencias 637
CREATE NICKNAME
Notas
v Las tablas y las vistas son ejemplos de objetos de fuente de datos relacionales.
Los ejemplos de objetos de fuente de datos relacionales son: los objetos de
Documentum o tablas registradas, los archivos de texto (.txt) y los archivos
Microsoft Excel (.xls).
Sentencias 639
CREATE NICKNAME
fuente de datos está protegido, DISALLOW CACHING está en vigor para el apodo. La
opción DISALLOW CACHING garantiza que cada vez que se utiliza el apodo se
devuelven los datos del ID de autorización apropiados desde la fuente de datos
en el momento de la ejecución de la consulta. Esto se realiza limitando el uso del
apodo en la definición de una tabla de consulta materializada en el servidor
federado, que podría utilizarse para guardar en la antememoria los datos de
apodo. La sentencia ALTER NICKNAME puede utilizarse para cambiar entre
ALLOW CACHING y DISALLOW CACHING.
v Alternativas de sintaxis: se soporta la sintaxis siguiente para mantener la
compatibilidad con versiones anteriores de DB2:
– ADD puede especificarse antes de nombre-opción-apodo constante-serie.
– ADD se puede especificar antes de nombre-opción-columna constante-serie.
Ejemplos
v Ejemplo 1:Cree un apodo para una vista, DEPARTMENT, que esté en un esquema
llamado HEDGES. Esta vista se almacena en una fuente de datos DB2 para z/OS
denominada OS390A.
CREATE NICKNAME DEPT
FOR OS390A.HEDGES.DEPARTMENT
v Ejemplo 2: seleccione todos los registros de la vista para la cual se ha creado un
apodo en el Ejemplo 1. Se debe hacer referencia a la vista mediante su apodo. Se
puede hacer referencia a la vista remota utilizando el nombre por el cual se
conoce en la fuente de datos únicamente en sesiones de paso a través.
La sentencia siguiente es válida después de que se haya creado el apodo DEPT:
SELECT * FROM DEPT
La sentencia siguiente no es válida:
SELECT * FROM OS390A.HEDGES.DEPARTMENT
v Ejemplo 3: Cree un apodo para la tabla remota JAPAN que está en un esquema
denominado salesdata. Puesto que el nombre de esquema y el nombre de tabla
de la fuente de datos se almacenan en minúsculas, especifique el nombre de
esquema remoto y el nombre de tabla entre comillas dobles:
CREATE NICKNAME JPSALES
FOR asia."salesdata"."japón"
v Ejemplo 4: Cree un apodo para el archivo estructurado de tabla
DRUGDATA1.TXT. Incluya las opciones de apodo FILE_PATH, COLUMN
DELIMITER, KEY_COLUMN y VALIDATE_DATA_FILE en la sentencia.
CREATE NICKNAME DRUGDATA1
(Dcode INTEGER,
DRUG CHAR(20),
MANUFACTURER CHAR(20))
FOR SERVER biochem_lab
OPTIONS
(FILE_PATH ’/usr/pat/DRUGDATA1.TXT’,
COLUMN_DELIMITER ’,’,
KEY_COLUMN ’DCODE’,
SORTED ’Y’,
VALIDATE_DATA_FILE ’Y’)
v Ejemplo 5: Cree el apodo padre CUSTOMERS en múltiples archivos XML bajo la
vía de acceso de directorio especificada /home/db2user. Incluya las opciones
siguientes:
– Opciones de columna:
- La opción de columna XPATH para la columna VARCHAR(5) denominada
ID, que indica el elemento o el atributo de los archivos XML del que se
extraen los datos de la columna
Sentencias 641
CREATE PERMISSION
CREATE PERMISSION
La sentencia CREATE PERMISSION crea un permiso de fila en el servidor actual.
Invocación
Autorización
Sintaxis
CREATE PERMISSION nombre-permiso ON nombre-tabla
OR REPLACE
AS
nombre-correlación
DISABLE
FOR ROWS WHERE condición-búsqueda ENFORCED FOR ALL ACCESS
ENABLE
Descripción
OR REPLACE
Especifica que se debe sustituir la definición del permiso de fila si existe una
en el servidor actual. La definición existente se descarta de forma efectiva antes
de que se sustituya la nueva definición en el catálogo.
nombre-permiso
Asigna un nombre al permiso de fila. El nombre, incluyendo el calificador
implícito o explícito, no debe identificar un permiso de fila o una máscara de
columna que ya exista en el servidor actual (SQLSTATE 42710).
nombre-tabla
Identifica la tabla en la que se crea el permiso de fila. El nombre debe
identificar una tabla existente en el servidor actual (SQLSTATE 42704). No debe
identificar apodos, tablas temporales creadas o declaradas, vistas, alias,
sinónimos o tablas con tipo (SQLSTATE 42809). Tampoco debe identificar tablas
de catálogo (SQLSTATE 42832).
nombre-correlación
Especifica un nombre de correlación que se puede utilizar dentro de la
expresión-case para designar la tabla.
Sentencias 643
CREATE PERMISSION
ENABLE
Especifica que se debe habilitar el permiso de fila para el control de acceso
a filas. Si el control de acceso a filas no está activado actualmente para la
tabla, el permiso de fila no será efectivo cuando se active el control de
acceso a filas de la tabla. Si el control de acceso a filas está activado
actualmente para la tabla, el permiso de fila será efectivo inmediatamente
y todos los paquetes y las sentencias colocadas dinámicamente en
antememoria que hacen referencia a la tabla se invalidarán.
Notas
v Permisos de fila que se han creado antes de activar el control de acceso a filas
para una tabla: la sentencia CREATE PERMISSION es una sentencia
independiente que se puede utilizar para crear un permiso de fila antes de
activar el control de acceso a filas para una tabla. El único requisito será que la
tabla y las columnas existan antes de crear el permiso. Se pueden crear varios
permisos de fila para una tabla.
La definición del permiso de fila se almacena en el catálogo de DB2. Se
registrará la dependencia de la tabla para la cual se está creando el permiso y las
dependencias de otros objetos a los que se hace referencia en la definición. No se
invalidará ningún paquete o sentencia en memoria caché dinámicas. Se puede
crear un permiso de fila como habilitado o inhabilitado para el control de acceso
a filas. Un permiso de fila habilitado no entra en vigor hasta que se utiliza la
sentencia ALTER TABLE para activar el control de acceso a filas para la tabla.
Un permiso de fila inhabilitado sigue sin ser efectivo incluso cuando el control
de acceso a filas está activado para la tabla. Se puede utilizar la sentencia ALTER
PERMISSION para alternar entre ENABLE y DISABLE.
Después de activar el control de acceso a filas para una tabla, cuando se haga
referencia a la tabla en una sentencia de manipulación de datos, la base de datos
DB2 aplicará de forma implícita todos los permisos de fila habilitados que se
hayan definido para la tabla a fin de controlar el acceso a esta.
La creación de permisos de fila antes de activar el control de acceso a filas para
una tabla es la secuencia recomendada para evitar invalidaciones múltiples de
paquetes y de sentencias en memoria caché dinámicas que hacen referencia a la
tabla.
v Permisos de fila que se han creado después de activar el control de acceso a
filas para una tabla: un permiso de fila habilitado entra en vigor cuando se
confirma. Todos los paquetes y las sentencias en memoria caché dinámicas que
hacen referencia a la tabla se invalidan. En adelante, cuando se haga referencia a
la tabla en una sentencia de manipulación de datos, se aplicarán de forma
implícita a la sentencia todos los permisos de fila habilitados. Los permisos de
fila inhabilitados siguen sin ser efectivos incluso cuando el control de acceso a
filas está activado para la tabla.
v No hay efecto cascada cuando se hace referencia a tablas aplicadas de control
de acceso a filas o columnas en las definiciones de permiso de fila: una
definición de permiso de fila podría hacer referencia a tablas y columnas
actualmente aplicadas por el control de acceso a filas o columnas. El control de
acceso de estas tablas se ignora cuando se hace referencia a la tabla para la cual
se está creando el permiso de fila en una sentencia de manipulación de datos.
v Consideración sobre los límites de DB2: Si en la sentencia de manipulación de
datos ya se consideran algunos de los límites de DB2 en la sentencia, cuantos
Ejemplo
Los responsables de caja en una entidad financiera sólo pueden acceder a los
clientes de su oficina. Todos los responsables de caja son miembros del rol
TELLER. Los representantes del servicio de atención al cliente pueden acceder a
todos los clientes de la entidad financiera. Todos los representantes del servicio de
atención al cliente son miembros del rol CSR. Un usuario con la autorización
SECADM crea un permiso de fila de acuerdo a ella para cada grupo de personal
de la entidad financiera. Después de activar el acceso de control de acceso de nivel
de fila para una tabla CUSTOMER, en la sentencia SELECT las condiciones de
búsqueda de ambos permisos de fila se fusionarán en la sentencia y se combinarán
con el operador lógico OR para controlar el conjunto de filas al que puede acceder
cada grupo.
CREATE PERMISSION TELLER_ROW_ACCESS ON CUSTOMER
FOR ROWS WHERE VERIFY_ROLE_FOR_USER
(SESSION_USER,’TELLER’) = 1 AND
BRANCH = (SELECT HOME_BRANCH FROM INTERNAL_INFO
WHERE EMP_ID = SESSION_USER)
ENFORCED FOR ALL ACCESS
ENABLE;
Sentencias 645
CREATE PROCEDURE
CREATE PROCEDURE
La sentencia CREATE PROCEDURE define un procedimiento en el servidor actual.
Invocación
Autorización
Sintaxis
( )
,
IN
tipo-datos
OUT nombre-parámetro cláusula-por-omisión
INOUT
lista-opciones
tipo-datos:
tipo-incorporado
nombre-tipo-matriz
Sentencias 647
CREATE PROCEDURE (externo)
tipo-incorporado:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(1)
CHARACTER
CHAR (entero) FOR BIT DATA
VARCHAR (entero)
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
TIMESTAMP
XML
SYSPROC. (1) (2)
DB2SECURITYLABEL
cláusula-por-omisión:
DEFAULT NULL
constante
registro-especial
variable-global
( expresión )
lista-opciones:
? LANGUAGE C ? ?
JAVA SPECIFIC nombre-específico
COBOL
CLR
OLE
NO DBINFO
? ? ?
PROGRAM TYPE SUB DBINFO
MAIN
Sentencias 649
CREATE PROCEDURE (externo)
Notas:
1 DB2SECURITYLABEL es el tipo diferenciado incorporado que debe utilizarse
para definir la columna de etiqueta de seguridad de fila de una tabla
protegida.
2 Para una columna de tipo DB2SECURITYLABEL, NOT NULL WITH
DEFAULT está implícito 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.
Descripción
OR REPLACE
Especifica que se debe sustituir la definición del procedimiento 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 los
privilegios que se han otorgado sobre el procedimiento no se ven afectados por
ello. Esta opción sólo puede especificarla el propietario del objeto. Esta opción
se ignora si no existe una definición para el procedimiento en el servidor
actual. Para sustituir un procedimiento ya existente, el nombre específico y el
nombre de procedimiento de la nueva definición tienen que ser los mismos
que el nombre específico y el nombre de procedimiento de la antigua
definición, o la signatura de la nueva definición debe coincidir con la signatura
de la antigua definición. De lo contrario, se creará un nuevo procedimiento.
nombre-procedimiento
Indica el nombre del procedimiento que se está definiendo. Es un nombre
calificado o no calificado que designa un procedimiento. El formato no
calificado de un nombre-procedimiento es un identificador SQL. En las sentencias
de SQL dinámico, el registro especial CURRENT SCHEMA se utiliza como
calificador para un nombre de objeto no calificado. En sentencias de SQL
estático, la opción de precompilación/vinculación QUALIFIER especifica de
forma implícita el calificador para los nombres de objeto no calificados. La
forma calificada es un nombre-esquema seguido de un punto y un identificador
de SQL.
El nombre, incluidos los calificadores implícitos o explícitos, junto con el
número de parámetros no debe designar un procedimiento descrito en el
catálogo (SQLSTATE 42723). No es necesario que el nombre no calificado, junto
con el número de parámetros, sea exclusivo en los esquemas.
Si se especifica un nombre de dos partes, el nombre-esquema no puede empezar
por 'SYS' (SQLSTATE 42939).
(IN | OUT | INOUT nombre-parámetro tipo-datos cláusula-por-omisión,...)
Identifica los parámetros del procedimiento y especifica el modo, nombre de
parámetro opcional, tipo de datos y valor por omisión opcional de cada
parámetro. Debe especificarse una entrada de la lista para cada parámetro que
el procedimiento va a esperar.
En un esquema, no se permite que dos procedimientos que se denominen igual
tengan exactamente el mismo número de parámetros. Una signatura duplicada
devuelve un error de SQL (SQLSTATE 42723).
Por ejemplo, si se emiten estas sentencias:
CREATE PROCEDURE PART (IN NUMBER INT, OUT PART_NAME CHAR(35)) ...
CREATE PROCEDURE PART (IN COST DECIMAL(5,3), OUT COUNT INT) ...
Sentencias 651
CREATE PROCEDURE (externo)
Sentencias 653
CREATE PROCEDURE (externo)
Sentencias 655
CREATE PROCEDURE (externo)
id-clase
Identifica el identificador de clase del objeto Java. Si la clase forma
parte de un paquete, la parte del identificador de clase debe incluir
el prefijo de paquete completo, por ejemplo, 'misPaqs.StoredProcs'.
La máquina virtual Java buscará en el directorio
'../myPacks/StoredProcs/' las clases. En los sistemas operativos
Windows, la máquina virtual Java buscará en el directorio
'..\myPacks\StoredProcs\'.
id-método
Identifica el nombre de método de la clase Java que se invoca.
v Para LANGUAGE CLR:
La serie especificada representa el ensamblaje .NET (biblioteca o
ejecutable), la clase de ese ensamblaje y el método dentro de la clase que
el gestor de bases de datos invoca para ejecutar el procedimiento que se
está creando. No es necesario que existan el módulo, la clase y el
método cuando se ejecute la sentencia CREATE PROCEDURE. Sin
embargo, cuando se llama al procedimiento, el módulo, la clase y el
método deben existir y poderse acceder desde la máquina de servidor
de bases de datos, de lo contrario se devuelve un error (SQLSTATE
42284).
Las rutinas C++ que se compilan con la opción de compilador '/clr' para
indicar que incluyen extensiones de código gestionado deben estar
catalogadas como 'LANGUAGE CLR' y no como 'LANGUAGE C'. DB2
debe saber que se utiliza la infraestructura .NET en un procedimiento,
para tomar las decisiones necesarias en tiempo de ejecución. Todos los
procedimientos que utilicen la infraestructura .NET deben estar
catalogados como 'LANGUAGE CLR'.
Sentencias 657
CREATE PROCEDURE (externo)
PRECAUCIÓN:
La utilización de NOT FENCED para los procedimientos que no se han
comprobado de forma adecuada puede comprometer la integridad de una
base de datos DB2. Las bases de datos DB2 toman algunas precauciones ante
varios de los tipos comunes de anomalías inadvertidas que podrían
producirse, pero no pueden garantizar la integridad completa si se utilizan
métodos NOT FENCED.
Necesita la autorización SYSADM, la autorización DBADM o una autorización
especial (CREATE_NOT_FENCED) para registrar un procedimiento como NOT
FENCED. Sólo puede especificarse FENCED para un procedimiento con
LANGUAGE OLE o NOT THREADSAFE.
No podrán crearse procedimientos LANGUAGE CLR cuando se especifique la
cláusula NOT FENCED (SQLSTATE 42601).
THREADSAFE o NOT THREADSAFE
Especifica si se considera que el procedimiento es seguro para ejecutarse en el
mismo proceso que otras rutinas (THREADSAFE) o no (NOT THREADSAFE).
Si se procedimiento se ha definido con un LANGUAGE distinto de OLE:
v Si el procedimiento se ha definido como THREADSAFE, el gestor de bases
de datos puede invocar el procedimiento en el mismo proceso que otras
rutinas. En general, para ser THREADSAFE, un procedimiento no debe
utilizar áreas de datos globales o estáticas. En la mayoría de los manuales de
consulta de programación se incluye una explicación acerca de cómo se
escriben las rutinas THREADSAFE. Los procedimientos FENCED y NOT
FENCED pueden ser THREADSAFE.
v Si el procedimiento se ha definido como NOT THREADSAFE, el gestor de
bases de datos nunca invocará el procedimiento en el mismo proceso que
otra rutina.
Para los procedimientos FENCED, THREADSAFE es el valor por omisión si el
LANGUAGE es JAVA o CLR. Para todos los demás lenguajes, NOT
THREADSAFE es el valor por omisión. Si el procedimiento se ha definido con
LANGUAGE OLE, THREADSAFE no puede especificarse (SQLSTATE 42613).
Para los procedimientos NOT FENCED, THREADSAFE es el valor por
omisión. No puede especificarse NOT THREADSAFE (SQLSTATE 42613).
COMMIT ON RETURN
Indica si debe efectuarse una confirmación cuando el procedimiento vuelve. El
valor por omisión es NO.
Sentencias 659
CREATE PROCEDURE (externo)
GENERAL
Significa que el procedimiento utilizará un mecanismo de pase de
parámetros por medio del cual el procedimiento recibirá los parámetros
especificados en la sentencia CALL. Los parámetros se envían
directamente, tal como espera el lenguaje; la estructura de la SQLDA no se
utiliza. Esto sólo se puede especificar cuando se utiliza LANGUAGE C,
COBOL o CLR.
Los indicadores nulos no se envían directamente al programa.
GENERAL WITH NULLS
Además de los parámetros de la sentencia CALL que ha especificado bajo
GENERAL, se pasa otro argumento al procedimiento. Este argumento
adicional es un vector de indicadores nulos, uno para cada parámetro de la
sentencia CALL. En C, sería una matriz de enteros cortos. Esto sólo se
puede especificar cuando se utiliza LANGUAGE C, COBOL o CLR.
JAVA
Significa que el procedimiento utilizará un convenio para el envío de
parámetros que se ajusta a la especificación para el lenguaje Java y las
Rutinas SQLJ. Los parámetros IN/OUT y OUT se pasarán como matrices
de entrada para facilitar los valores de retorno. Esto sólo puede
especificarse cuando se utiliza LANGUAGE JAVA.
Los procedimientos PARAMETER STYLE JAVA no soportan las cláusulas
DBINFO o PROGRAM TYPE.
SQL
Además de los parámetros existentes en la sentencia CALL, se pasan los
argumentos siguientes al procedimiento:
v Un indicador nulo para cada parámetro de la sentencia CALL
v El SQLSTATE que debe devolverse a DB2
v El nombre calificado del procedimiento
v El nombre específico del procedimiento
v La serie de caracteres de diagnóstico de SQL que debe devolverse a DB2
Esto sólo se puede especificar cuando se utiliza LANGUAGE C, COBOL,
CLR o OLE.
PARAMETER CCSID
Especifica el esquema de codificación que se debe utilizar para todos los datos
de serie pasados al procedimiento y desde él. Si no se especifica la cláusula
PARAMETER CCSID, el valor por omisión es PARAMETER CCSID UNICODE
para las bases de datos Unicode y PARAMETER CCSID ASCII para todas 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
PARAMETER CCSID ASCII (SQLSTATE 56031). Cuando se invoca el
procedimiento, la página de códigos de la aplicación para el procedimiento
es la página de códigos de la base de datos.
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
Sentencias 661
CREATE PROCEDURE (externo)
Normas
v Restricciones de la rutina autónoma: las rutinas autónomas no pueden devolver
conjuntos de resultados y no admiten los siguientes tipos de datos de
parámetros (SQLSTATE 428H2):
– Tipos de cursor
– Tipos estructurados
– XML
No se puede hacer referencia a variables globales de tipos de cursor dentro del
ámbito autónomo.
Notas
v La creación de un procedimiento con un nombre de esquema que todavía no
existe dará como resultado la creación implícita de este 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.
v Se invocará una rutina Java definida como NOT FENCED como si se hubiese
definido como FENCED THREADSAFE.
v Un procedimiento que se llama desde una sentencia de SQL compuesto (en
línea) se ejecutará como si se hubiera creado especificando NEW SAVEPOINT
LEVEL, aunque se haya especificado OLD SAVEPOINT LEVEL o se haya
tomado por omisión al crearse el procedimiento.
v Los parámetros de XML sólo están soportados en los procedimientos externos de
LANGUAGE JAVA si se especifica la cláusula PARAMETER STYLE
DB2GENERAL.
v Establecimiento del valor por omisión: los parámetros de un procedimiento que
se definen con un valor por omisión se establecen en su valor por omisión
cuando se invoca el procedimiento, aunque sólo si no se suministra un valor
para el argumento correspondiente o se especifica como DEFAULT, cuando se
invoca el procedimiento.
v Privilegios: el definidor de un procedimiento siempre recibe el privilegio WITH
GRANT OPTION de EXECUTE en el procedimiento, así como el derecho de
descartar el procedimiento. Cuando el procedimiento se utiliza en una sentencia
de SQL, el usuario que define el procedimiento debe disponer del privilegio
EXECUTE para cualquiera de los paquetes que el procedimiento utiliza.
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con las versiones anteriores de los productos
DB2 y con otros productos de base de datos. Estas alternativas no son estándar y
no deberían utilizarse.
– RESULT SETS puede especificarse en lugar de DYNAMIC RESULT SETS.
– NULL CALL puede especificarse en lugar de CALLED ON NULL INPUT.
– DB2GENRL puede especificarse en lugar de DB2GENERAL.
– SIMPLE CALL puede especificarse en lugar de GENERAL.
– SIMPLE CALL WITH NULLS puede especificarse en lugar de GENERAL
WITH NULLS.
Ejemplos
v Ejemplo 1: Cree la definición de procedimiento para un procedimiento, grabado
en Java, al que se pasa un número de pieza y que devuelve el coste de la pieza
y la cantidad disponible actualmente.
CREATE PROCEDURE PARTS_ON_HAND (IN PARTNUM INTEGER,
OUT COST DECIMAL(7,2),
OUT QUANTITY INTEGER)
EXTERNAL NAME ’parts.onhand’
LANGUAGE JAVA PARAMETER STYLE JAVA
v Ejemplo 2: Cree la definición de procedimiento para un procedimiento, escrito en
C, al que se pasa un número de ensamblaje y que devuelve el número de piezas
que componen el ensamblaje, el coste total de las piezas y un conjunto de
resultados en el que se listan los números de pieza, la cantidad y el coste
unitario de cada pieza.
CREATE PROCEDURE ASSEMBLY_PARTS (IN ASSEMBLY_NUM INTEGER,
OUT NUM_PARTS INTEGER,
OUT COST DOUBLE)
EXTERNAL NAME ’parts!assembly’
DYNAMIC RESULT SETS 1 NOT FENCED
LANGUAGE C PARAMETER STYLE GENERAL
Sentencias 663
CREATE PROCEDURE (derivado)
Invocación
Autorización
Para los orígenes de datos que requieren una correlación de usuarios, los
privilegios contenidos en el ID de autorización en la fuente de datos deben incluir
el privilegio para seleccionar datos de las tablas del catálogo remoto.
Sintaxis
CREATE PROCEDURE nombre-procedimiento
OR REPLACE
cláusula-procedimiento-fuente lista-opciones
cláusula-procedimiento-fuente:
SOURCE nombre-objeto-fuente
( )
NUMBER OF PARAMETERS entero
nombre-objeto-fuente:
nombre-esquema-fuente .
nombre-paquete-fuente .
nombre-procedimiento-fuente
lista-opciones:
? ?
SPECIFIC nombre-específico
? ? ?
NO SQL NOT DETERMINISTIC EXTERNAL ACTION
CONTAINS SQL DETERMINISTIC NO EXTERNAL ACTION
MODIFIES SQL DATA
READS SQL DATA
Descripción
OR REPLACE
Especifica que se debe sustituir la definición del procedimiento 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 los
privilegios que se han otorgado sobre el procedimiento no se ven afectados por
ello. Esta opción sólo puede especificarla el propietario del objeto. Esta opción
se ignora si no existe una definición para el procedimiento en el servidor
actual. Para sustituir un procedimiento ya existente, el nombre específico y el
nombre de procedimiento de la nueva definición tienen que ser los mismos
que el nombre específico y el nombre de procedimiento de la antigua
definición, o la signatura de la nueva definición debe coincidir con la signatura
de la antigua definición. De lo contrario, se creará un nuevo procedimiento.
nombre-procedimiento
Los nombres del procedimiento derivado que se está definiendo. Es un nombre
calificado o no calificado que designa un procedimiento. El formato no
calificado de un nombre-procedimiento es un identificador SQL. En las sentencias
de SQL dinámico, el registro especial CURRENT SCHEMA se utiliza como
calificador para un nombre de objeto no calificado. En las sentencias de SQL
estático, la opción de precompilación o de vinculación QUALIFIER especifica
implícitamente el calificador para nombres de objeto no calificados. La forma
calificada es un nombre-esquema seguido de un punto y un identificador de
SQL.
El nombre, incluidos los calificadores implícitos o explícitos, junto con el
número de parámetros, no deben identificar un procedimiento que se haya
descrito en el catálogo (SQLSTATE 42723). No es necesario que el nombre no
calificado, junto con el número de parámetros, sea exclusivo en los esquemas.
Si se especifica un nombre de dos partes, el nombre-esquema no puede empezar
por 'SYS' (SQLSTATE 42939).
En un sistema federado, un nombre-procedimiento es el nombre del
procedimiento del servidor federado.
SOURCE nombre-objeto-fuente
Especifica el procedimiento fuente que utiliza el procedimiento que se está
Sentencias 665
CREATE PROCEDURE (derivado)
Sentencias 667
CREATE PROCEDURE (derivado)
Normas
v Si nombre-objeto-fuente, junto con las cláusulas NUMBER OF PARAMETERS y
UNIQUE ID no identifican un procedimiento en una fuente de datos, se
devuelve un error (SQLSTATE 42883). Si se identifica más de un procedimiento,
se devuelve un error (SQLSTATE 42725).
v Si se especifica la cláusula UNIQUE ID y la fuente de datos no da soporte a los
ID exclusivos, se devuelve un error (SQLSTATE 42883).
Notas
v Para poder registrar un procedimiento federado para 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,
la definición del servidor para el servidor para la fuente de datos y la creación
de las correlaciones de usuarios entre el servidor federado y el servidor fuente
de datos para los orígenes de datos que requieren correlaciones de usuarios.
v Creación de procedimientos que no son válidos inicialmente: si un objeto al que
se hace referencia en el cuerpo del procedimiento no existe o se ha marcado
como no válido o el definidor no tiene temporalmente los privilegios para
acceder al objeto y, si el parámetro de configuración de la base de datos
Ejemplos
v Ejemplo 1: Crear un procedimiento federado cuyo nombre es FEDEMPLOYEE
para un procedimiento Oracle cuyo nombre es EMPLOYEE, utilizando el
nombre de esquema remoto USER1, el nombre de paquete remoto P1 en el
servidor federado S1, y devolviendo el conjunto de resultados al cliente.
CREATE PROCEDURE FEDEMPLOYEE SOURCE USER1.P1.EMPLOYEE
FOR SERVER S1 WITH RETURN TO CLIENT ALL
v Ejemplo 2: Crear un procedimiento federado denominado FEDSALARYSTAT para
un procedimiento Oracle cuyo nombre es SALARYSTAT, utilizando el nombre de
esquema remoto USER1, el nombre de paquete remoto P1 en el servidor
federado S1, y devolviendo el primer y el tercer conjunto de resultados al
cliente, y el resto de conjuntos de resultados al emisor.
CREATE OR REPLACE PROCEDURE FEDSALARYSTAT SOURCE USER1.P1.SALARYSTAT
FOR SERVER S1 WITH RETURN TO CLIENT(1,3)
Sentencias 669
CREATE PROCEDURE (SQL)
Invocación
Autorización
Sintaxis
( )
,
IN
nombre-parámetro tipo-datos
OUT cláusula-por-omisión
INOUT
lista-opciones cuerpo-procedimiento-SQL
tipo-datos:
tipo-incorporado
tipo-datos-variable-anclados
nombre-tipo-matriz
nombre-tipo-cursor
nombre-tipo-diferenciado
nombre-tipo-fila
tipo-incorporado:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(34)
DECFLOAT
(16)
(1)
CHARACTER
CHAR (entero) FOR BIT DATA
VARCHAR (entero)
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
XML
BOOLEAN
CURSOR
Sentencias 671
CREATE PROCEDURE (SQL)
tipo-datos-anclados:
DATA TYPE TO
ANCHOR nombre-variable
nombre-tabla.nombre-columna
OF
ROW nombre-tabla
nombre-vista
nombre-variable-cursor
cláusula-por-omisión:
DEFAULT NULL
constante
registro-especial
variable-global
( expresión )
lista-opciones:
LANGUAGE SQL
? ? ?
SPECIFIC nombre-específico
?
PARAMETER CCSID ASCII
UNICODE
cuerpo-procedimiento-SQL:
sentencia-procedimiento-SQL
Descripción
OR REPLACE
Especifica que se debe sustituir la definición del procedimiento 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 los
Sentencias 673
CREATE PROCEDURE (SQL)
Sentencias 675
CREATE PROCEDURE (SQL)
Sentencias 677
CREATE PROCEDURE (SQL)
Normas
v Restricciones de la rutina autónoma: Las rutinas autónomas no pueden devolver
conjuntos de resultados y no dan soporte a los tipos de datos siguientes
(SQLSTATE 428H2):
– Tipos de cursor definidos por el usuario
– Tipos estructurados definidos por el usuario
– XML como parámetros IN, OUT e INOUT
No se puede hacer referencia a variables de sesión de tipos de cursor dentro del
ámbito autónomo.
v Utilización de tipos de datos anclados: Un tipo de datos anclado no puede
hacer referencia a (SQLSTATE 428HS): un apodo, una tabla con tipo, una vista
con tipo, 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.
v Uso de tipos de fila y cursor: un procedimiento que utiliza un tipo de cursor o
un tipo de fila para un parámetro solamente se puede invocar desde dentro de
una sentencia de SQL compuesto (compilado) (SQLSTATE 428H2), excepto
JDBC, que puede invocar un procedimiento con parámetros OUT que tienen un
tipo de cursor.
Notas
v La creación de un procedimiento 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.
v Un procedimiento que se llama desde una sentencia de SQL compuesto (en
línea) se ejecutará como si se hubiera creado especificando NEW SAVEPOINT
Ejemplo
SET medianSalary = 0;
SELECT COUNT(*) INTO v_numRecords
FROM STAFF;
Sentencias 679
CREATE PROCEDURE (SQL)
OPEN c1;
WHILE v_counter < (v_numRecords / 2 + 1)
DO
FETCH c1 INTO medianSalary;
SET v_counter = v_counter + 1;
END WHILE;
CLOSE c1;
OPEN c2;
END
CREATE ROLE
La sentencia CREATE ROLE define un rol en el servidor actual.
Invocación
Autorización
Sintaxis
CREATE ROLE nombre-rol
Descripción
nombre-rol
Da nombre al rol. Este nombre consta de una sola parte. Se trata de un
identificador de SQL (ordinario o delimitado). El nombre no debe identificar
un rol existente en el servidor actual (SQLSTATE 42710). El nombre no debe
empezar por los caracteres 'SYS' y no debe ser 'ACCESSCTRL',
'DATAACCESS', 'DBADM', ‘NONE', 'NULL', 'PUBLIC', 'SECADM', 'SQLADM'
o 'WLMADM' (SQLSTATE 42939).
Ejemplo
Sentencias 681
CREATE SCHEMA
CREATE SCHEMA
La sentencia CREATE SCHEMA define un esquema. También es posible crear
algunos objetos y otorgar privilegios en los objetos dentro de la sentencia.
Invocación
Autorización
Sintaxis
CREATE SCHEMA nombre-esquema
AUTHORIZATION nombre-autorización
nombre-esquema AUTHORIZATION nombre-autorización
DATA CAPTURE NONE
CHANGES
sentencia-SQL-esquema
Descripción
nombre-esquema
Indica el nombre del esquema. El nombre no debe identificar un esquema que
ya esté descrito en el catálogo (SQLSTATE 42710). El nombre no puede
empezar por 'SYS' (SQLSTATE 42939). El propietario del esquema es el ID de
autorización que ha emitido la sentencia.
AUTHORIZATION nombre-autorización
Identifica el usuario que es el propietario del esquema. El valor de
nombre-autorización también se utiliza para denominar el esquema. El
nombre-autorización no debe identificar un esquema que ya esté descrito en el
catálogo (SQLSTATE 42710).
nombre-esquemaAUTHORIZATIONnombre-autorización
Identifica un esquema denominado nombre-esquema, cuyo propietario es
Notas
v El propietario del esquema se determina de la manera siguiente:
– Si se especifica la cláusula AUTHORIZATION, el nombre-autorización
especificado es el propietario del esquema
– Si no se especifica la cláusula AUTHORIZATION, el ID de autorización que
emite la sentencia CREATE SCHEMA es el propietario del esquema.
v Se supone que el propietario del esquema es un usuario (no un grupo).
v Cuando se crea explícitamente el esquema con la sentencia CREATE SCHEMA,
se otorgan al propietario del esquema los privilegios CREATEIN, DROPIN y
ALTERIN para el esquema con la posibilidad de otorgar estos privilegios a otros
usuarios.
v La persona que define cualquier objeto creado como parte de la sentencia
CREATE SCHEMA es el propietario del esquema. El propietario del esquema es
el otorgante de cualquier privilegio que se otorga como parte de la sentencia
CREATE SCHEMA.
v Los nombres de objeto no calificados en ninguna sentencia de SQL dentro de la
sentencia CREATE SCHEMA se califican implícitamente por el nombre del
esquema creado.
v Si la sentencia CREATE contiene un nombre calificado para el objeto que se está
creando, el nombre de esquema especificado en el nombre calificado debe ser el
mismo que el nombre del esquema que se está creando (SQLSTATE 42875).
Cualquier otro objeto que se haga referencia en las sentencias pueden calificarse
con un nombre de esquema válido.
Sentencias 683
CREATE SCHEMA
Ejemplos
v Ejemplo 1: Como usuario con autorización DBADM, cree un esquema llamado
RICK con el usuario RICK como el propietario.
CREATE SCHEMA RICK AUTHORIZATION RICK
v Ejemplo 2: Cree un esquema que tenga una tabla de piezas del inventario y un
índice de los números de piezas. Otorgue la autorización sobre la tabla al
usuario JONES.
CREATE SCHEMA INVENTRY
Invocación
Autorización
Sintaxis
cláusula-matriz:
ARRAY [ constante-serie ]
cláusula-conjunto:
SET { constante-serie }
cláusula-árbol:
Descripción
nombre-componente
Asigna un nombre al componente de etiqueta de seguridad. Este nombre
consta de una sola parte. El nombre no debe identificar un componente de
etiqueta de seguridad existente en el servidor actual (SQLSTATE 42710).
ARRAY
Especifica un conjunto ordenado de elementos.
constante-serie,...
Uno o más valores de constante de tipo serie que forman el conjunto de
valores válidos para este componente de etiqueta de seguridad. Es
importante el orden en que aparecen los elementos de la matriz. El primer
Sentencias 685
CREATE SECURITY LABEL COMPONENT
Normas
Estas normas se aplican a los tres tipos de componentes (ARRAY, SET y TREE):
v Los nombres de elementos no pueden contener ninguno de estos caracteres:
– Paréntesis de apertura - (
– Paréntesis de cierre - )
– Coma - ,
– Dos puntos - :
v Un nombre de elemento no puede tener más de 32 bytes (SQLSTATE 42622).
v Si un componente de etiqueta de seguridad es un conjunto o un árbol, no
podrán formar parte de este componente más de 64 elementos.
v Una sentencia CREATE SECURITY LABEL COMPONENT puede especificar
como máximo 65.535 para un componente de etiqueta de seguridad de tipo de
matriz.
v Ningún nombre de elemento se puede utilizar más de una vez en el mismo
componente (SQLSTATE 42713).
Ejemplos
v Ejemplo 1: Crear un componente de etiqueta de seguridad del tipo ARRAY
llamado LEVEL. El componente tiene los cuatro elementos siguientes,
enumerados en orden de clasificación decreciente: Top Secret, Secret, Classified y
Unclassified.
CREATE SECURITY LABEL COMPONENT LEVEL
ARRAY [’Top Secret’, ’Secret’, ’Classified’, ’Unclassified’]
v Ejemplo 2: Crear un componente de etiqueta de seguridad del tipo SET llamado
COMPARTMENTS. El componente tiene los tres elementos siguientes: Research,
Analysis y Collection.
Sentencias 687
CREATE SECURITY LABEL
Invocación
Autorización
Sintaxis
CREATE SECURITY LABEL nombre-etiqueta-seguridad
,
,
Descripción
nombre-etiqueta-seguridad
Asigna un nombre a la etiqueta de seguridad. El nombre debe calificarse con
una política de seguridad (SQLSTATE 42704) y no debe identificar una etiqueta
de seguridad existente para esta política de seguridad (SQLSTATE 42710).
COMPONENT nombre-componente
Especifica el nombre de un componente de etiqueta de seguridad. Si el
componente no forma parte de la política de seguridad nombre-política-
seguridad, se devuelve un error (SQLSTATE 4274G). Si un componente se
especifica dos veces en la misma sentencia, se devuelve un error (SQLSTATE
42713).
constante-serie,...
Especifica un elemento válido para el componente de seguridad. Un elemento
válido es el que se especificó cuando se creó el componente de seguridad. Si el
elemento no es válido, se devuelve un error (SQLSTATE 4274F).
Ejemplos
v Ejemplo 1: Crear una etiqueta de seguridad llamada EMPLOYEESECLABEL que
forme parte de la política de seguridad DATA_ACCESS y que tenga el elemento
Top Secret para el componente LEVEL, así como los elementos Research y
Analysis para el componente COMPARTMENTS.
CREATE SECURITY LABEL DATA_ACCESS.EMPLOYEESECLABEL
COMPONENT LEVEL ’Top Secret’,
COMPONENT COMPARTMENTS ’Research’, ’Analysis’
Sentencias 689
CREATE SECURITY POLICY
Invocación
Autorización
Sintaxis
CREATE SECURITY POLICY nombre-política-seguridad
Descripción
nombre-política-seguridad
Asigna un nombre a la política de seguridad. Este nombre consta de una sola
parte. El nombre no debe identificar una política de seguridad existente en el
servidor actual (SQLSTATE 42710).
COMPONENTS nombre-componente,...
Identifica un componente de etiqueta de seguridad. El nombre debe identificar
un componente de etiqueta de seguridad que ya existe en el servidor actual
(SQLSTATE 42704). No se debe especificar el mismo componente de seguridad
más de una vez para la política de seguridad (SQLSTATE 42713). No se
pueden especificar más de 16 componentes de etiqueta de seguridad para una
política de seguridad (SQLSTATE 54062).
WITH DB2LBACRULES
Indica qué conjunto de normas se utilizará al comparar las etiquetas de
seguridad que forman parte de esta política de seguridad. Actualmente sólo
hay un conjunto de normas: DB2LBACRULES.
OVERRIDE NOT AUTHORIZED WRITE SECURITY LABEL o RESTRICT NOT AUTHORIZED
WRITE SECURITY LABEL
Especifica la acción que se llevará a cabo cuando un usuario no tenga
autorización para grabar la etiqueta de seguridad especificada explícitamente
que se proporciona en la sentencia INSERT o UPDATE emitida sobre una tabla
que está protegida con esta política de seguridad. Una etiqueta de seguridad
del usuario y las credenciales de exención determinan la autorización del
Notas
v Conjunto de normas DB2LBACRULES: DB2LBACRULES es un conjunto de
normas predefinido que incluye las siguientes normas: DB2LBACREADARRAY,
DB2LBACREADSET, DB2LBACREADTREE, DB2LBACWRITEARRAY,
DB2LBACWRITESET, DB2LBACWRITETREE.
v Las autorizaciones de rol y de grupo no se tienen en cuenta por omisión cuando
se crea una política de seguridad. Utilice la sentencia ALTER SECURITY POLICY
para cambiar este comportamiento y tenerlas en cuenta.
Ejemplos
v Ejemplo 1: Crear una política de seguridad llamada DATA_ACCESS que utilice el
conjunto de normas DB2LBACRULES y que tenga dos componentes: LEVEL y
COMPARTMENTS, en este orden. Suponer que los dos componentes ya existen.
CREATE SECURITY POLICY DATA_ACCESS
COMPONENTS LEVEL, COMPARTMENTS
WITH DB2LBACRULES
v Ejemplo 2: Crear una política de seguridad llamada CONTRIBUTIONS que tenga
los componentes MEMBER y BADGE, que se supone que ya existen.
CREATE SECURITY POLICY CONTRIBUTIONS
COMPONENTS MEMBER, BADGE
WITH DB2LBACRULES
Sentencias 691
CREATE SEQUENCE
CREATE SEQUENCE
La sentencia CREATE SEQUENCE define una secuencia en el servidor de
aplicaciones.
Invocación
Autorización
Sintaxis
CREATE SEQUENCE nombre-secuencia ?
OR REPLACE
AS INTEGER
? ?
AS tipo-datos START WITH constante-numérica
INCREMENT BY 1 NO MINVALUE
? ?
INCREMENT BY constante-numérica MINVALUE constante-numérica
NO MAXVALUE NO CYCLE
? ?
MAXVALUE constante-numérica CYCLE
CACHE 20 NO ORDER
? ?
CACHE constante-entera ORDER
NO CACHE
tipo-datos:
tipo-incorporado
nombre-tipo-diferenciado
tipo-incorporado:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
Descripción
OR REPLACE
Especifica que se debe sustituir la definición por la secuencia si existe una 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 los
privilegios que se han otorgado sobre la secuencia no se ven afectados por ello.
No se tiene en cuenta esta opción si no existe una definición para la secuencia
en el servidor actual. Esta opción sólo puede especificarla el propietario del
objeto.
nombre-secuencia
Indica el nombre de la secuencia. La combinación del nombre y del nombre de
esquema implícito o explícito no debe identificar una secuencia existen en el
servidor actual (SQLSTATE 42710).
El formato no calificado de un nombre-secuencia es un identificador SQL. El
formato calificado es un calificador seguido de un punto y un identificador
SQL. El calificador es un nombre de esquema.
Si el nombre de secuencia se califica explícitamente con un nombre de
esquema, el nombre de esquema no puede empezar con 'SYS' o se producirá
un error (SQLSTATE 42939).
AS tipo-datos
Especifica el tipo de datos que se debe utilizar para el valor de secuencia. El
tipo de datos puede ser cualquier tipo numérico exacto (SMALLINT,
INTEGER, BIGINT o DECIMAL) con una escala de cero o un tipo diferenciado
o tipo de referencia definido por el usuario para el cual el tipo de fuente sea
un tipo numérico exacto con una escala de cero (SQLSTATE 42815). El valor
por omisión es INTEGER.
START WITH constante-numérica
Especifica el primer valor de la secuencia. Este valor puede ser cualquier valor
positivo o negativo que pueda asignarse a una columna del tipo de datos
asociado a la secuencia (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 secuencias ascendentes y MAXVALUE para secuencias
descendentes.
Este valor no es necesariamente el valor en el que una secuencia realizaría un
ciclo después de alcanzar el valor máximo o mínimo de la secuencia. Se puede
utilizar la cláusula START WITH para iniciar una secuencia fuera del rango
que se usa para los ciclos. El rango utilizado para los ciclos se define mediante
MINVALUE y MAXVALUE.
INCREMENT BY constante-numérica
Especifica el intervalo entre valores consecutivos de la secuencia. Este valor
Sentencias 693
CREATE SEQUENCE
puede ser cualquier valor positivo o negativo que pueda asignarse a una
columna del tipo de datos asociado a la secuencia (SQLSTATE 42815). El valor
no debe superar el valor de una constante de enteros grande (SQLSTATE
42820) ni contener dígitos que no sean 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.
MINVALUE o NO MINVALUE
Especifica el valor mínimo en el que una secuencia descendente pasa por un
ciclo o deja de generar valores o en el que una secuencia ascendente pasa por
un ciclo después de alcanzar el valor máximo.
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 una columna
del tipo de datos asociado a la secuencia (SQLSTATE 42815), sin dígitos
distintos de cero a la derecha de la coma decimal (SQLSTATE 428FA), pero
el valor debe ser inferior o igual al valor máximo (SQLSTATE 42815).
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 asociado con la secuencia. Es el
valor por omisión.
MAXVALUE o NO MAXVALUE
Especifica el valor máximo en el que una secuencia ascendente pasa por un
ciclo o deja de generar valores o en el que una secuencia descendente pasa por
un ciclo después de alcanzar el valor mínimo.
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 una columna
del tipo de datos asociado a la secuencia (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 MAXVALUE
Para una secuencia ascendente, el valor es el valor máximo del tipo de
datos asociado con la secuencia. Para una secuencia descendente, el valor
es el valor START WITH o bien -1 si no se ha especificado START WITH.
CYCLE o NO CYCLE
Especifica si la secuencia debe continuar generando valores después de
alcanzar el valor máximo o el valor mínimo. El límite de la secuencia puede
alcanzarse con el siguiente valor que coincide exactamente con la condición de
límite o excediendo el valor.
CYCLE
Especifica que se continúan generando valores para esta secuencia después
de haber alcanzado el valor máximo o mínimo. Si se utiliza esta opción,
cuando una secuencia ascendente haya alcanzado su valor máximo,
generará su valor mínimo o cuando una secuencia descendente haya
alcanzado su valor mínimo, generará su valor máximo. Los valores
máximo y mínimo para la secuencia determinan el rango que se utiliza
para el ciclo.
Cuando CYCLE está en vigor, se pueden generar valores duplicados para
la secuencia.
NO CYCLE
Especifica que no se generarán valores para la secuencia una vez que se
haya alcanzado el valor máximo o mínimo para la secuencia. Es el valor
por omisión.
CACHE o NO CACHE
Especifica si se deben mantener algunos valores preasignados en memoria para
obtener un acceso más rápido. Esta opción se utiliza para el rendimiento y el
ajuste.
CACHE constante-entera
Especifica el número máximo de valores de secuencia que se preasignan y
se mantienen en memoria. La preasignación y el almacenamiento de
valores en la antememoria reducen la E/S síncrona en las anotaciones
cronológicas cuando se generan valores para la secuencia.
En el caso de producirse una anomalía del sistema, todos los valores de
secuencia almacenados en antememoria que no se han utilizando en
sentencias confirmadas se pierden (es decir, no se utilizarán nunca). El
valor especificado para la opción CACHE es el número máximo de valores
de secuencia que puede perderse en caso de anomalía del sistema.
El valor mínimo es 2 (SQLSTATE 42815). El valor por omisión es CACHE
20.
En un entorno DB2 pureScale o de varias particiones, utilice las opciones
CACHE y NO ORDER para que varios miembros de DB2 puedan poner en
antememoria valores de secuencia de forma simultánea.
En un entorno DB2 pureScale, si se especifican tanto CACHE como
ORDER, la especificación de ORDER altera temporalmente la especificación
de CACHE y, en su lugar, NO CACHE entrará en vigor.
NO CACHE
Especifica que los valores de la secuencia no se deben preasignar. Asegura
que no haya ninguna pérdida de valores en el caso de producirse una
anomalía del sistema, un cierre o una desactivación de la base de datos.
Cuando se especifica esta opción, los valores de la secuencia no se
almacenan en la antememoria. En este caso, cada petición de un valor
nuevo para la secuencia produce E/S síncrona en las anotaciones
cronológicas.
NO ORDER o ORDER
Especifica si los números de secuencia deben generarse según el orden de
petición.
ORDER
Especifica que los números de secuencia se generan según el orden de
petición.
NO ORDER
Especifica que los números de secuencia no necesitan generarse según el
orden de petición. Es el valor por omisión.
Notas
v Es posible definir una secuencia constante, es decir, una que devuelva siempre
un valor constante. Esto puede hacerse especificando un valor cero para
INCREMENT y un valor para START WITH que no exceda el valor de
MAXVALUE o bien especificando el mismo valor para START WITH,
MINVALUE y MAXVALUE. Para una secuencia constante, cada vez que se
invoque NEXT VALUE para la secuencia, se devolverá el mismo valor. Una
Sentencias 695
CREATE SEQUENCE
Ejemplo
Crear una secuencia denominada ORG_SEQ que empiece por el 1, que se ejecute
en incrementos de 1, que no ejecute un ciclo y que coloque en antememoria 24
valores al mismo tiempo:
CREATE SEQUENCE ORG_SEQ
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO CYCLE
CACHE 24
Sentencias 697
CREATE SERVICE CLASS
Invocación
Autorización
Sintaxis
UNDER nombre-superclase-servicio
(3) ENABLE
cláusula-plantilla-histograma
DISABLE
cláusula-recopilar-datos-actividad:
MEMBER
ON COORDINATOR
MEMBERS
ON ALL
WITHOUT DETAILS
,
(4)
WITH DETAILS
SECTION AND VALUES
INCLUDE ACTUALS BASE
cláusula-plantilla-histograma:
Sentencias 699
CREATE SERVICE CLASS
Notas:
1 Todas las cláusulas COLLECT excepto COLLECT REQUEST METRICS sólo
son válidas para una subclase de servicio.
2 La cláusula COLLECT REQUEST METRICS sólo es válida para una
superclase de servicio.
3 Las cláusulas HISTOGRAM TEMPLATE sólo son válidas para una subclase
de servicio.
4 La palabra clave DETAILS es la información mínima que debe especificarse,
seguida de la opción separada por una coma.
Descripción
nombre-clase-servicio
Indica el nombre de la clase de servicio. Este nombre consta de una sola parte.
Se trata de un identificador de SQL (ordinario o delimitado). Si la clase de
servicio es una superclase de servicio, el nombre-clase-servicio no debe identificar
ninguna superclase de servicio que ya exista en el catálogo (SQLSTATE 42710).
Si la clase de servicio es una subclase de servicio, el nombre-clase-servicio no
debe identificar ninguna subclase de servicio que ya exista bajo la superclase
de servicio (SQLSTATE 42710). Si la clase de servicio es una subclase de
servicio, el nombre-clase-servicio no debe ser el mismo que su superclase de
servicio (SQLSTATE 42710). El nombre no debe empezar por los caracteres
'SYS' (SQLSTATE 42939).
UNDER nombre-superclase-servicio
Especifica que la clase de servicio es una subclase de la superclase de servicio
nombre-superclase-servicio. Si no se especifica UNDER, la clase de servicio es una
superclase de servicio. El nombre-superclase-servicio debe identificar una
superclase de servicio que exista para la base de datos (SQLSTATE 42704). La
superclase de servicio no puede ser una clase de servicio por omisión
(SQLSTATE 5U029).
HARD CPU SHARES 1000 o HARD CPU SHARES constante-entera o SOFT CPU SHARES
constante-entera
Especifica el número de cuotas de recursos de CPU que el asignador de WLM
asigna a esta clase de servicio cuando el trabajo se ejecuta dentro de esta clase
de servicio. Los valores válidos de la constante-entera son enteros entre 1 y
65535. El valor por omisión es HARD CPU SHARES 1000, que asigna 1000 cuotas
fijas a esta clase de servicio. Calificar CPU SHARES con la palabra clave HARD o
especificar CPU SHARES sin calificarlo con la palabra clave HARD o SOFT indica
que se asignarán cuotas de CPU fijas a esta clase de servicio. Especificar la
palabra clave SOFT indica que se asignarán cuotas de CPU flexibles a esta clase
de servicio. Para utilizar cuotas de CPU fijas y flexibles con el asignador del
gestor de carga de trabajo de DB2, debe habilitar el parámetro de configuración
del gestor de bases de datos wlm_disp_cpu_shares.
CPU LIMIT constante-entero o CPU LIMIT NONE
Especifica el porcentaje máximo de los recursos de CPU que el asignador de
WLM puede asignar a esta clase de servicio. Los valores válidos de la
constante-entera son enteros entre 1 y 100. Puede especificar también CPU LIMIT
NONE para indicar que no hay ningún límite de CPU.
AGENT PRIORITY DEFAULT o AGENT PRIORITY constante-entero
Especifica la prioridad del sistema operativo (delta) relativa de los agentes que
se ejecutan en la clase de servicio o la prioridad normal de las hebras que se
ejecutan en DB2. El valor por omisión es DEFAULT.
Sentencias 701
CREATE SERVICE CLASS
relativa más alta para los agentes en una clase de servicio utilizando AGENT
PRIORITY. Para otorgar estas posibilidades, inicie la sesión como root y ejecute
el mandato siguiente:
chuser capabilities=CAP_NUMA_ATTACH,CAP_PROPAGATE
En Solaris 10 o posterior, el propietario de instancia debe tener el privilegio
proc_priocntl para establecer una prioridad relativa más alta para los agentes
en una clase de servicio con AGENT PRIORITY. Para otorgar este privilegio,
inicie la sesión como root y ejecute el siguiente mandato:
usermod -K defaultpriv=basic,proc_priocntl db2user
Sentencias 703
CREATE SERVICE CLASS
Sentencias 705
CREATE SERVICE CLASS
Sentencias 707
CREATE SERVICE CLASS
ENABLE
Las conexiones y actividades pueden correlacionarse con la clase de
servicio.
DISABLE
Las conexiones y actividades no pueden correlacionarse con la clase de
servicio. Las conexiones o actividades correlacionadas a una clase de
servicio inhabilitada se rechazarán (SQLSTATE 5U028). Cuando se
inhabilita una superclase de servicio, también se inhabilitarán sus subclases
de servicio. Cuando vuelve a habilitarse la superclase de servicio, sus
subclases de servicio vuelven a los estados definidos en el catálogo del
sistema. Una clase de servicio por omisión no puede inhabilitarse
(SQLSTATE 5U032).
Normas
v El número máximo de subclases de servicio que pueden crearse bajo una
superclase de servicio es 61 (SQLSTATE 5U027).
v El número máximo de superclases de servicio que pueden crearse para una base
de datos es 64 (SQLSTATE 5U027).
v Una sentencia de SQL exclusiva de gestión de carga de trabajo (WLM) debe ir
después de una sentencia COMMIT o ROLLBACK (SQLSTATE 5U027). Las
sentencias de SQL exclusivas de WLM son:
– CREATE HISTOGRAM TEMPLATE, ALTER HISTOGRAM TEMPLATE o
DROP (plantilla de histograma)
– CREATE SERVICE CLASS, ALTER SERVICE CLASS o DROP (clase de
servicio)
– CREATE THRESHOLD, ALTER THRESHOLD o DROP (umbral)
– CREATE WORK ACTION SET, ALTER WORK ACTION SET o DROP
(conjunto de acciones de trabajo)
– CREATE WORK CLASS SET, ALTER WORK CLASS SET o DROP (conjunto
de clases de trabajo)
– CREATE WORKLOAD, ALTER WORKLOAD o DROP (carga de trabajo)
– GRANT (privilegios de carga de trabajo) o REVOKE (privilegios de carga de
trabajo)
v Una sentencia de SQL exclusiva de WLM no puede emitirse en una transacción
global (SQLSTATE 51041) como por ejemplo, una transacción XA.
Notas
v Una subclase por omisión, SYSDEFAULTSUBCLASS, se crea automáticamente
para cada superclase de servicio.
v Sólo se permite una sentencia de SQL exclusiva de WLM no confirmada a la vez
entre todos los miembros. Si se ejecuta una sentencia de SQL exclusiva de WLM
sin confirmar, las siguientes sentencias de SQL exclusivas de WLM esperarán
hasta que se confirme o retrotraiga la sentencia de SQL exclusiva de XML actual.
v Los cambios se graban en el catálogo del sistema, pero no surten efecto hasta
después de una sentencia COMMIT, incluso para la conexión que emite la
sentencia.
v Alternativas de sintaxis: Las siguientes alternativas se admiten para mantener la
compatibilidad con versiones anteriores de productos DB2 y otros productos de
base de datos. Estas alternativas no son estándar y no deberían utilizarse.
– Puede especificarse DATABASE PARTITION en lugar de MEMBER, salvo
cuando la variable de registro DB2_ENFORCE_MEMBER_SYNTAX se
establece en ON.
708 Consulta de SQL - Volumen 2
CREATE SERVICE CLASS
Ejemplos
v Ejemplo 1: Cree una superclase de servicio denominada PETSALES. La subclase
por omisión para PETSALES se crea automáticamente.
CREATE SERVICE CLASS PETSALES
v Ejemplo 2: Cree una subclase de servicio denominada DOGSALES debajo de la
superclase de servicio PETSALES. Establezca la clase de servicio DOGSALES
como inhabilitada.
CREATE SERVICE CLASS DOGSALES UNDER PETSALES DISABLE
v Ejemplo 3: Cree una superclase de servicio denominada BARNSALES con una
prioridad de captación previa de LOW. La subclase por omisión para
BARNSALES se crea automáticamente. Las peticiones de captación previa que
envíen los agentes de la clase de servicio BARNSALES irán a la cola de
captación previa de prioridad baja.
CREATE
SERVICE CLASS BARNSALES PREFETCH PRIORITY LOW
Sentencias 709
CREATE SERVER
CREATE SERVER
La sentencia CREATE SERVER define una fuente de datos para una base de datos
federada.
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 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
Sintaxis
CREATE SERVER nombre-servidor
TYPE tipo-servidor
WRAPPER nombre-derivador
VERSION versión-servidor
AUTHORIZATION nombre-autorización-remota PASSWORD contraseña
,
versión-servidor:
versión
. release
. mod
constante-serie-versión
Descripción
nombre-servidor
Nombra la fuente de datos que se está definiendo en la base de datos federada.
El nombre no debe identificar una fuente de datos que esté descrita en el
catálogo. El nombre-servidor no debe ser el mismo que el nombre de cualquier
espacio de tablas de la base de datos federada.
Normalmente, una definición de servidor para fuentes de datos relacionales
representa una base de datos remota. Algunos sistemas de gestión de base de
Sentencias 711
CREATE SERVER
OPTIONS
Indica las opciones que se habilitan cuando se crea la definición de servidor.
Las opciones de servidor se utilizan para configurar la definición de servidor.
Algunas opciones de servidor pueden utilizarse a fin de crear la definición de
servidor para cualquier fuente de datos. Algunas opciones de servidor son
específicas para una fuente de datos en particular.
nombre-opción-servidor
Nombra una opción de servidor que se utilizará para configurar o
proporcionar información acerca de la fuente de datos indicada por
nombre-servidor.
constante-serie
Especifica un valor para nombre-opción-servidor como una constante de serie
de caracteres.
Notas
v La contraseña se debe especificar cuando la fuente de datos requiere una
contraseña. Si las letras de una contraseña deben ir en minúsculas, especifique la
contraseña entre comillas.
v Si se utiliza la sentencia CREATE SERVER para definir una instancia de la
familia de DB2 como fuente de datos, puede que DB2 deba vincular
determinados paquetes con esa instancia. Si es necesario una vinculación, el
nombre-autorización-remota de la sentencia debe tener la autorización BIND. El
tiempo necesario para que se complete la operación de vinculación depende de
la velocidad de la fuente de datos y de la velocidad de conexión de la red.
v DB2 no comprueba que la versión del servidor especificada coincida con la
versión del servidor remoto. Si se especifica una versión de servidor incorrecta
se pueden provocar errores de SQL cuando se accede a apodos que pertenecen a
la definición del servidor DB2. Esto puede producirse con mucha probabilidad
cuando se especifica una versión de servidor posterior a la versión del servidor
remoto. En ese caso, al acceder a apodos que pertenecen a la definición del
servidor, puede que DB2 envíe SQL que el servidor remoto no reconoce.
v Alternativas de sintaxis: se soporta la sintaxis siguiente para mantener la
compatibilidad con versiones anteriores de DB2:
– ADD puede especificarse antes de nombre-opción-servidor constante-serie.
Ejemplos
v Ejemplo 1: Registre una definición de servidor para acceder a la fuente de datos
DB2 para z/OS y OS/390, versión 7.1. CRANDALL es el nombre asignado a la
definición del servidor DB2 para z/OS y OS/390. DRDA es el nombre del
derivador utilizado para acceder a esta fuente de datos. Además, especifique
que:
– GERALD y drowssap son el ID de autorización y la contraseña bajo los cuales
se vinculan los paquetes en CRANDALL cuando se procesa esta sentencia.
– El alias para la base de datos DB2 para z/OS y OS/390 que se ha
especificado con la sentencia CATALOG DATABASE es CLIENTS390.
– Los ID de autorización y las contraseñas bajo los que se puede acceder a
CRANDALL se deben enviar a CRANDALL en mayúsculas.
– CLIENTS390 y la base de datos federada utilizan el mismo orden de
clasificación.
CREATE SERVER CRANDALL
TYPE DB2/ZOS
VERSION 7.1
WRAPPER DRDA
AUTHORIZATION "GERALD"
PASSWORD drowssap
OPTIONS
(DBNAME ’CLIENTS390’,
FOLD_ID ’U’,
FOLD_PW ’U’,
COLLATING_SEQUENCE ’Y’)
v Ejemplo 2: Registre una definición de servidor para acceder a una fuente de
datos Oracle 9. CUSTOMERS es el nombre asignado a la definición de servidor
Oracle. NET8 es el nombre del derivador utilizado para acceder a esta fuente de
datos. Además, especifique que:
– ABC es el nombre del nodo en el que reside el servidor de bases de datos
Oracle.
– La CPU para el servidor federado se ejecuta el doble de rápido que la CPU
que soporta CUSTOMERS.
– Los dispositivos de E/S del servidor federado procesan los datos 1,5 veces
más rápido que los dispositivos de E/S de CUSTOMERS.
CREATE SERVER CUSTOMERS
TYPE ORACLE
VERSION 9
WRAPPER NET8
OPTIONS
(NODE ’ABC’,
CPU_RATIO ’2.0’,
IO_RATIO ’1.5’)
v Ejemplo 3: Registre una definición de servidor para el derivador Excel. La
definición de servidor es necesaria para conservar la jerarquía de objetos
federados. BIOCHEM_LAB es el nombre asignado a la definición de servidor
Excel. EXCEL_2000_WRAPPER es el nombre del derivador utilizado para
acceder a esta fuente de datos.
CREATE SERVER BIOCHEM_DATA
WRAPPER EXCEL_2000_WRAPPER
Sentencias 713
CREATE STOGROUP
CREATE STOGROUP
La sentencia CREATE STOGROUP define un grupo de almacenamiento nuevo
dentro de la base de datos, asigna vías de acceso de almacenamiento al grupo de
almacenamiento y registra la definición de grupo de almacenamiento y los
atributos en el catálogo.
Invocación
Autorización
Sintaxis
CREATE STOGROUP nombre-grupo-almacenamiento
ON 'vía_acceso_almacenamiento' ?
?
OVERHEAD número-de-milisegundos
?
DEVICE READ RATE número-megabytes-por-segundo
? ?
DATA TAG constante-entera SET AS DEFAULT
NONE
Descripción
nombre-grupo-almacenamiento
Da nombre al grupo de almacenamiento. Este nombre consta de una sola parte.
Se trata de un identificador de SQL (ordinario o delimitado). El
nombre-grupo-almacenamiento no debe identificar un grupo de almacenamiento
que ya existe en el servidor actual (SQLSTATE 42710). El nombre-grupo-
almacenamiento no debe empezar con los caracteres 'SYS' (SQLSTATE 42939).
ON Especifica las vías de acceso de almacenamiento que se deben añadir para el
grupo de almacenamiento indicado. En el caso de entornos de bases de datos
Sentencias 715
CREATE STOGROUP
Normas
v No se puede ejecutar la sentencia CREATE STOGROUP mientras se está
añadiendo un servidor de particiones de base de datos (SQLSTATE 55071).
v Un grupo de almacenamiento puede tener un máximo de 128 vías de acceso de
almacenamiento definidas (SQLSTATE 5U009).
v Una instancia de base de datos puede tener un máximo de 256 grupos de
almacenamiento definidos (SQLSTATE 54035).
Notas
v Cálculo del espacio libre: cuando se calcula el espacio libre para una vía de
acceso de almacenamiento en una partición de base de datos, el gestor de bases
de datos comprueba la existencia de los siguientes directorios o puntos de
montaje en la vía de acceso de almacenamiento, y utiliza la primera que se
encuentre.
<vía acceso almacenamiento>/<nombre instancia>/NODE####/<nombre base datos>
<vía acceso almacenamiento>/<nombre instancia>/NODE####
<vía acceso almacenamiento>/<nombre instancia>
<vía acceso almacenamiento>
Donde:
– <vía de acceso almacenamiento> es una vía de acceso de almacenamiento
asociada con la base de datos.
– <nombre instancia> es la instancia en la que reside la base de datos.
– NODE#### corresponde al número de partición de base de datos (por ejemplo,
NODE0000 o NODE0001).
– <nombre base de datos> es el nombre de la base de datos.
v Aislamiento de varias particiones de base de datos en una vía de acceso de
almacenamiento:los sistemas de archivos se pueden montar en un punto bajo la
vía de acceso de almacenamiento, y el gestor de bases de datos reconocerá que
la cantidad real de espacio libre disponible para los contenedores del espacio de
tablas puede no ser la misma que la asociada con el directorio de la vía de
acceso de almacenamiento.
Considere un ejemplo donde existan dos particiones de base de datos lógicas en
un sistema físico, y haya una única vía de acceso de almacenamiento (/db2data).
Cada partición de base de datos utilizará esta vía de acceso de almacenamiento,
pero es posible que se desee aislar los datos de cada partición en su propio
sistema de archivos. En este caso, se puede crear un sistema de archivos
diferente para cada partición y se puede montar en /db2data/<instancia>/
NODE####. Al crear contenedores en la vía de acceso de almacenamiento y
determinar el espacio libre, el gestor de bases de datos no recuperará la
información sobre el espacio libre para /db2data, sino que la recuperará para el
directorio /db2data/<instancia>/NODE#### correspondiente.
v Varias vías de acceso de almacenamiento: se puede añadir una vía de acceso de
almacenamiento a distintos grupos de almacenamiento o al mismo grupo de
almacenamiento varias veces.
716 Consulta de SQL - Volumen 2
CREATE STOGROUP
Ejemplos
v Ejemplo 1: crear un grupo de almacenamiento denominado HIGHEND con dos
vías de acceso en el directorio /db2 (/db2/filesystem1 y /db2/filesystem2) que
son discos de estado sólido conectados.
CREATE STOGROUP HIGHEND ON ’/dbe/filesystem1’, ’/db2/filesystem2’
OVERHEAD 0.75 DEVICE READ RATE 500
v Ejemplo 2: crear un grupo de almacenamiento denominado MIDRANGE con dos
unidades D y E y designarlo como grupo de almacenamiento por omisión.
CREATE STOGROUP MIDRANGE ON ’D:\’, ’E:\’ SET AS DEFAULT
Sentencias 717
CREATE SYNONYM
CREATE SYNONYM
La sentencia CREATE SYNONYM define un sinónimo para un módulo, apodo,
secuencia, tabla, vista u otro sinónimo.
Descripción
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
Autorización
Sentencias 719
CREATE TABLE
Para definir una tabla de etapas asociada a una tabla de consulta materializada, los
privilegios del ID de autorización de la sentencia deben incluir, como mínimo, uno
de los siguientes en la tabla de consulta materializada:
v Privilegio ALTER para la tabla de consulta materializada
v Privilegio CONTROL para la tabla de consulta materializada
v Autorización DBADM
y, como mínimo, uno de los siguientes para cada tabla o vista que se identifique en
la selección completa de la tabla de consulta materializada:
v Privilegio SELECT o autorización DATAACCESS para la tabla o vista y, como
mínimo, uno de los siguientes:
– Privilegio ALTER para la tabla o vista
– Autorización DBADM
v Privilegio CONTROL sobre la tabla o vista
Sintaxis
lista-elementos ?
OF nombre-tipo1
opciones-tabla-con-tipo
LIKE nombre1-tabla
nombre-vista opciones-copia
apodo
tabla-resultados-as
opciones-copia
definición-consulta-materializada
definición-tabla-etapas
,
DIMENSIONS
ORGANIZE BY ( nombre-columna )
,
( nombre-columna )
KEY SEQUENCE espec-clave-secuencia
INSERT TIME
? ? ?
DATA CAPTURE NONE cláusulas-espacio-tablas
CHANGES
?
cláusula-distribución cláusula-particionamiento
COMPRESS NO
? ?
ADAPTIVE VALUE COMPRESSION
COMPRESS YES
STATIC
? ? ?
WITH RESTRICT ON DROP NOT LOGGED INITIALLY
? ?
CCSID ASCII SECURITY POLICY nombre-política
UNICODE
,
lista-elementos:
( definición-columna )
definición-período
restricción-unicidad
restricción-referencial
restricción-comprobación
definición-columna:
nombre-columna
(1) opciones-columna
tipo-datos
Sentencias 721
CREATE TABLE
tipo-datos:
tipo-incorporado
nombre-tipo-diferenciado
nombre-tipo-estructurado
REF (nombre2-tipo)
tipo-incorporado:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(34)
DECFLOAT
(16)
(1 BYTE)
CHARACTER
CHAR BYTE (2)
(entero ) FOR BIT DATA
BYTE
VARCHAR (entero )
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1)
NCHAR
NATIONAL CHAR (entero)
CHARACTER
NVARCHAR (entero)
NCHAR VARYING
NATIONAL CHAR VARYING
CHARACTER
(1M)
NCLOB
NCHAR LARGE OBJECT (entero )
NATIONAL CHARACTER LARGE OBJECT K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
XML
SYSPROC. (3) (4)
DB2SECURITYLABEL
opciones-columna:
Sentencias 723
CREATE TABLE
NOT NULL
(5)
opciones-lob
(6)
SCOPE nombre-tabla-tipo
nombre-vista-tipo
PRIMARY KEY
CONSTRAINT nombre-restricción UNIQUE
cláusula-referencias
CHECK ( condición-comprobación ) atributos-restricción
(7)
cláusula-por-omisión
cláusula-generada
(8)
INLINE LENGTH entero
COMPRESS SYSTEM DEFAULT
COLUMN
SECURED WITH nombre-etiqueta-seguridad
NOT HIDDEN
IMPLICITLY HIDDEN
opciones-lob:
cláusula-referencias:
REFERENCES nombre-tabla
apodo ,
( nombre-columna )
cláusula-norma atributos-restricción
cláusula-norma:
atributos-restricción:
cláusula-por-omisión:
WITH
DEFAULT
valores-omisión
valores-omisión:
constante
registro-especial-fecha-hora
registro-especial-usuario
CURRENT SCHEMA
CURRENT MEMBER
NULL
función-conversión ( constante )
registro-especial-fecha-hora
registro-especial-usuario
CURRENT SCHEMA
EMPTY_CLOB()
EMPTY_DBCLOB()
EMPTY_NCLOB()
EMPTY_BLOB()
cláusula-generada:
ALWAYS
GENERATED opciones-identidad
BY DEFAULT cláusula-indicación-hora-cambio-fila
ALWAYS
GENERATED cláusula-expresión-generada
cláusula-indicaciónFechaHora-transacción-filas
cláusula-ID-inicio-transacción-filas
opciones-identidad:
AS IDENTITY
(9) 1
( START WITH constante-numérica )
1
INCREMENT BY constante-numérica
NO MINVALUE
MINVALUE constante-numérica
NO MAXVALUE
MAXVALUE constante-numérica
NO CYCLE
CYCLE
CACHE 20
NO CACHE
CACHE constante-entera
NO ORDER
ORDER
cláusula-indicación-hora-cambio-fila:
(10)
FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
cláusula-expresión-generada:
AS ( expresión-generación )
Sentencias 725
CREATE TABLE
cláusula-indicaciónFechaHora-transacción-filas:
(11)
AS ROW BEGIN
END
cláusula-ID-inicio-transacción-filas:
(12)
AS TRANSACTION START ID
definición-período:
restricción-unicidad:
UNIQUE
CONSTRAINT nombre-restricción PRIMARY KEY
( nombre-columna )
, BUSINESS_TIME WITHOUT OVERLAPS
restricción-referencia:
cláusula-referencias
restricción-comprobación:
CHECK ( nombre-comprobación )
CONSTRAINT nombre-restricción
atributos-restricción
condición-error:
condición-búsqueda
dependencia-funcional
dependencia-funcional:
( nombre-columna ) ( nombre-columna )
opciones-tabla-con-tipo:
cláusula-under:
lista-elementos-tipo:
( definición-columna-OID )
opciones-with
restricción-unicidad
restricción-comprobación
definición-columna-OID:
opciones-with:
tabla-resultados-as:
( nombre-columna )
definición-consulta-materializada:
AS ( selección completa )
,
( nombre-columna )
opciones-tabla-renovable
Sentencias 727
CREATE TABLE
opciones-copia:
? ?
COLUMN
INCLUDING DEFAULTS
EXCLUDING
COLUMN ATTRIBUTES
EXCLUDING IDENTITY
?
COLUMN ATTRIBUTES
INCLUDING IDENTITY
opciones-tabla-renovable:
definición-tabla-etapas:
FOR nombre-tabla-2
,
( nombre-columna-etapas )
PROPAGATE IMMEDIATE
espec-clave-secuencia:
,
AT
( nombre-columna ENDING constante )
FROM
STARTING constante
ALLOW OVERFLOW
DISALLOW OVERFLOW PCTFREE entero
cláusulas-espacio-tablas:
?
,
CYCLE
IN nombre-espacio-tablas
NO CYCLE
(13)
INDEX IN nombre-espacio-tablas
,
LONG IN nombre-espacio-tablas
cláusula-distribución:
,
HASH
DISTRIBUTE BY ( nombre-columna )
REPLICATION
cláusula-particionamiento:
RANGE
PARTITION BY espec-partición-rangos
espec-partición-rangos:
, ,
( expresión-partición ) ( elemento-partición )
expresión-partición:
NULLS LAST
nombre-columna
NULLS FIRST
elemento-partición:
espec-límite opciones-espacio-tablas-partición
PARTITION nombre-partición
espec-límite EVERY ( constante )
(14)
etiqueta-duración
constante
(14)
etiqueta-duración
espec-límite:
(15)
cláusula-inicial cláusula-final
cláusula-final
cláusula-inicial:
Sentencias 729
CREATE TABLE
,
FROM INCLUSIVE
STARTING ( constante )
MINVALUE EXCLUSIVE
MAXVALUE
constante
MINVALUE
MAXVALUE
cláusula-final:
,
AT INCLUSIVE
ENDING ( constante )
MINVALUE EXCLUSIVE
MAXVALUE
constante
MINVALUE
MAXVALUE
opciones-espacio-tablas-partición:
IN nombre-espacio-tablas INDEX IN nombre-espacio-tablas
LONG IN nombre-espacio-tablas
etiqueta-duración:
YEAR
YEARS
MONTH
MONTHS
DAY
DAYS
HOUR
HOURS
MINUTE
MINUTES
SECOND
SECONDS
MICROSECOND
MICROSECONDS
Notas:
1 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.
2 La cláusula FOR BIT DATA se puede especificar en cualquier orden con las
restricciones de columna siguientes.
3 DB2SECURITYLABEL es el tipo diferenciado incorporado que debe utilizarse
para definir la columna de etiqueta de seguridad de fila de una tabla
protegida.
Descripción
Sentencias 731
CREATE TABLE
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 puede tener las características siguientes:
v Un tamaño de página de 4K con un máximo de 500 columnas, donde el
número total de bytes de las columnas no debe ser superior a 4.005.
v Un tamaño de página de 8K con un máximo de 1.012 columnas, donde
el número total de bytes de las columnas no debe ser superior a 8.101.
v Un tamaño de página de 16K con un máximo de 1.012 columnas, donde
el número total de bytes de las columnas no debe ser superior a 16.293.
v Un tamaño de página de 32K con un máximo de 1.012 columnas, donde
el número total de bytes de las columnas no debe ser superior a 32.677.
Para obtener más información, consulte Límite del tamaño de fila.
tipo-datos
Especifica el tipo de datos de la columna.
tipo-incorporado
Para los tipos incorporados, utilice uno de los tipos siguientes.
SMALLINT
Para especificar un entero pequeño.
INTEGER o INT
Para especificar un entero grande.
BIGINT
Para especificar un entero superior.
DECIMAL(entero-precisión, entero-escala) o DEC(entero-precisión,
entero-escala)
Para especificar un número decimal. El primer entero es la
precisión del número, es decir, el número total de dígitos; los
valores permitidos son del 1 al 31. El segundo entero es la escala
del número (es decir, el número de dígitos situados a la derecha de
la coma decimal); su valor varía entre 0 y la precisión del número.
Si no se especifican la precisión ni la escala, se emplean los valores
por omisión 5,0. Las palabras NUMERIC y NUM pueden utilizarse
como sinónimos de DECIMAL y DEC.
FLOAT(entero)
Para especificar un número de coma flotante de precisión simple o
doble, en función del valor del entero. El valor del entero debe estar
en el rango 1-53. Los valores 1 a 24 indican precisión simple y los
valores 25 a 53 indican precisión doble.
También 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)
Para especificar un número de coma flotante decimal. El valor de
entero-precisión es la precisión del número; es decir, el número total
de dígitos, los cuales pueden ser 16 ó 34.
Si no se especifica la precisión, se utilizará un valor por omisión de
34.
CHARACTER(entero) o CHAR(entero) o CHARACTER o CHAR
Para una serie de caracteres de longitud fija de entero bytes de
longitud, que puede estar en el rango de 1 a 254. Si se omite la
especificación de longitud, se supone una longitud de 1.
VARCHAR(entero) o CHARACTER VARYING(entero) o CHAR
VARYING(entero)
Para una serie de caracteres de longitud variable de entero bytes de
longitud máxima, que puede estar en el rango de 1 a 32.672.
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 o CHARACTER (CHAR) LARGE OBJECT(entero [K | M | G])
Para una serie de gran objeto de caracteres de la longitud máxima
especificada en bytes.
El significado de entero K | M | G es el mismo que para BLOB.
Si se omite la especificación de longitud, se supone que la longitud
es 1.048.576 (1 megabyte).
No es posible especificar la cláusula FOR BIT DATA para las
columnas CLOB. Sin embargo, una serie CHAR FOR BIT DATA
puede asignarse a una columna CLOB y una serie CHAR FOR BIT
DATA puede concatenarse con una serie CLOB.
GRAPHIC(entero)
Para una serie gráfica de longitud fija de longitud entero, que
puede ir de 1 a 127. Si se omite la especificación de longitud, se
supone una longitud de 1.
VARGRAPHIC(entero)
Para una serie gráfica de longitud variable de entero de longitud
máxima, que puede estar en el rango de 1 a 16.336.
DBCLOB(entero [K | M | G])
Para una serie de objeto grande de caracteres de doble byte de la
longitud máxima especificada en caracteres de doble byte.
El significado de entero K | M | G es parecido al de BLOB. Las
diferencias radican en que el número especificado es el número de
caracteres de doble byte y que el tamaño máximo es 1.073.741.823
caracteres de doble byte.
Si se omite la especificación de longitud, se supone que la longitud
es 1.048.576 caracteres de doble byte.
Sentencias 733
CREATE TABLE
TIMESTAMP(entero) o TIMESTAMP
Para una indicación de fecha y hora. El entero debe estar entre 0 y
12 y especifica la precisión en segundos fraccionarios de 0
(segundos) a 12 (picosegundos). El valor por omisión es 6
(microsegundos).
XML
Para un documento XML. Solo se pueden insertar documentos
XML con el formato correcto en una columna XML.
Una columna XML tiene las restricciones siguientes:
v 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).
v La columna no puede ser una clave foránea de una restricción
de referencia (SQLSTATE 42962).
v 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.
v La columna no se puede utilizar como clave de distribución
(SQLSTATE 42997).
v La columna no se puede utilizar como clave de particionamiento
de datos (SQLSTATE 42962).
v La columna no se puede utilizar para organizar una tabla de
clúster multidimensional (MDC)(SQLSTATE 42962).
v No se puede emplear la columna en una tabla agrupada por
clústeres de rangos (SQLSTATE 429BG).
v 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.
SYSPROC.DB2SECURITYLABEL
Es un 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).
Sentencias 735
CREATE TABLE
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 implícitamente
oculta. Sin embargo, el resultado de SELECT que haga referencia
de manera explícita al nombre de una columna implícitamente
oculta incluirá 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 efectuados en la columna deben
registrarse en el archivo de 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
Especifica que los cambios efectuados en la columna no se van a
anotar cronológicamente. 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, no
importa si se anota 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. Observe
que almacenar datos de esta manera puede influir negativamente
en el rendimiento de cualquier operación de adición (aumento de
longitud) que se lleve a cabo 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.
Sentencias 737
CREATE TABLE
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 subsiguiente para permitir que se defina la
tabla de destino, normalmente en el caso de tablas que se hacen
referencia mutuamente.
nombre-tabla-tipo
El nombre de una tabla con tipo. La tabla debe existir ya o 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
ninguna comprobación de los valores asignados a nombre-columna
para asegurarse de si realmente los valores hacen referencia a filas
existentes de nombre-vista-tipo.
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 de una secuencia de 15 caracteres numéricos
que genera una función basada en la indicación de fecha y hora.)
Si se utiliza con una restricción PRIMARY KEY o UNIQUE, el
nombre-restricción se puede utilizar como nombre de un índice creado
para dar soporte a la restricción.
PRIMARY KEY
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).
Sentencias 739
CREATE TABLE
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, puede especificarse DEFAULT
NULL en la misma definición de columna, pero se producirá
un error si se intenta establecer la columna en el valor por
omisión.
función-conversión
Esta forma de valor por omisión sólo puede utilizarse 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, a excepción de 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
Sentencias 741
CREATE TABLE
Sentencias 743
CREATE TABLE
Sentencias 745
CREATE TABLE
Sentencias 747
CREATE TABLE
Sentencias 749
CREATE TABLE
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 compuesta 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 debe estar identificada 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:
v La columna de fin del periodo de BUSINESS_TIME en orden ascendente
v 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.
Sentencias 751
CREATE TABLE
Sentencias 753
CREATE TABLE
(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 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:
v NO ACTION (valor por omisión)
v RESTRICT
v CASCADE
v 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.
v Si se especifica RESTRICT o NO ACTION, se produce un error y
no se suprimir ninguna fila.
v Si se especifica CASCADE, la operación de supresión se propaga
a los dependientes de p en T1.
v 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
Sentencias 755
CREATE TABLE
Sentencias 757
CREATE TABLE
NOT ENFORCED
El gestor de bases de datos no obliga a aplicar la restricción.
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 realmente a la restricción. Es la opción por omisión.
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.
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
Indica la tabla de jerarquía asociada con 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 crea, 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
mediante 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
Cualquier usuario o grupo que sostenga un privilegio SELECT sobre la
supertabla recibirá un privilegio equivalente sobre 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
Sentencias 759
CREATE TABLE
Sentencias 761
CREATE TABLE
Sentencias 763
CREATE TABLE
Sentencias 765
CREATE TABLE
Sentencias 767
CREATE TABLE
Para una tabla MDC particionada creada en DB2 Versión 9.7 Fixpack 1 o
releases posteriores, los índices de bloque se particionarán. 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.
Para las tablas MDC creadas en DB2 V9.7 o releases anteriores, los índices de
bloque no se particionarán y seguirán sin particionarse si vuelven a crearse.
Las tablas MDC con índices de bloque particionados pueden coexistir en la
misma base de datos que las tablas MDC con índices de bloque no
particionados. Para cambiar los índices de bloque no particionados por índices
de bloque particionados, utilice un movimiento de tabla en línea para migrar la
tabla MDC.
ORGANIZE BY 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 organizada 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 será RCT y se obliga el cumplimiento con la restricción de
comprobación. Si se especifica la cláusula ALLOW OVERFLOW, el nombre
de la restricción de comprobación será RCT_OFLOW y no se aplica la
restricción de comprobación.
Sentencias 769
CREATE TABLE
Sentencias 771
CREATE TABLE
Sentencias 773
CREATE TABLE
Sentencias 775
CREATE TABLE
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:
v 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.
v 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
Sentencias 777
CREATE TABLE
Sentencias 779
CREATE TABLE
v Los tipos gráficos, el tipo XML y los tipos definidos por el usuario no se
pueden utilizar en tablas CCSID UNICODE (SQLSTATE 560C1).
v Los tipos de datos anclados de una tabla creada con CCSID UNICODE
(SQLSTATE 428HS).
v Las tablas no pueden especificar las cláusulas CCSID UNICODE y
DATA CAPTURE CHANGES a la vez (SQLSTATE 42613).
v Las tablas de Explain no se pueden crear con CCSID UNICODE
(SQLSTATE 55002).
v Las tablas temporales creadas, y declaradas tablas temporales, no se
pueden crear con CCSID UNICODE (SQLSTATE 56031).
v Las tablas CCSID UNICODE no se pueden crear en una sentencia
CREATE SCHEMA (SQLSTATE 53090).
v 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).
v La tabla de excepciones para una sentencia SET INTEGRITY debe tener
el mismo CCSID que la tabla de destino para la sentencia (SQLSTATE
53090).
v La tabla de destino para los datos del supervisor de sucesos no se debe
declarar como CCSID UNICODE (SQLSTATE 55049).
v Las sentencias que hacen referencia a una tabla CCSID UNICODE sólo
se pueden invocar desde un cliente de DB2 Versión 8.1 o posterior
(SQLSTATE 42997).
v 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.
Sentencias 781
CREATE TABLE
Normas
v 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.
v El número de columnas de una tabla no puede ser superior a 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.
v Una columna de identificador de objeto de una tabla con tipo no puede
actualizarse (SQLSTATE 42808).
v 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).
v 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.
v Para las bases de datos que se ejecuten en un entorno DB2 pureScale, la cláusula
ORGANIZE BY no puede especificarse (SQLSTATE 42997).
v Se aplican las siguientes restricciones a las tablas agrupadas por clústeres de
rangos:
– No se puede especificar una tabla agrupada por clústeres de rangos en un
entorno DB2 pureScale (SQLSTATE 42997).
– 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.
Sentencias 783
CREATE TABLE
Notas
v 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.
v 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.
v 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.
v 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
en esquema SYSFUN. Se producirán errores si se invoca la función con un valor
de argumento que excede estas longitudes (SQLSTATE 22001).
v La utilización de NO ACTION o RESTRICT como normas de supresión o
actualización para restricciones de referencia determina cuándo se aplica la
restricción. Una norma de supresión o actualización de RESTRICT se aplicará
antes que las demás restricciones, incluidas las restricciones de referencia con
normas de modificación como CASCADE o SET NULL. Una norma de supresión
o de actualización de NO ACTION 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.
DELETE FROM V1
Si la tabla T1 es una tabla padre de la tabla T3 que tiene la norma de supresión
RESTRICT, se producirá una violación de restricción (SQLSTATE 23001) si
existen filas hijas para las claves padre de T1 en T3.
Si la tabla T1 es una tabla padre de la tabla T3 que tiene la norma de supresión
de NO ACTION, la norma de supresión de CASCADE puede suprimir las filas
hijas al suprimirse las filas de T2, antes de que se aplique la norma de supresión
de NO ACTION para las supresiones de T1. Si las supresiones de T2 no han
tenido como resultado la supresión de todas las filas hijas para 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.
v Para las tablas de los espacios de tablas que se han definido en grupos de
particiones de base de datos de varias particiones, en la elección de las claves de
distribución debe tenerse en cuenta la colocación de la tabla. A continuación
encontrará una lista de elementos que debe tener en cuenta:
– 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, plantéese la
conveniencia de unir las columnas como una clave de distribución para
ambas tablas.
v 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 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.
v Una tabla de consulta materializada mantenida por el sistema REFRESH
DEFERRED definida con ENABLE QUERY OPTIMIZATION puede utilizarse
para optimizar el proceso de las consultas si CURRENT REFRESH AGE se ha
establecido en ANY y si CURRENT MAINTAINED TABLE TYPES FOR
OPTIMIZATION se ha establecido de forma que incluya tablas de consulta
materializada mantenidas por el sistema. Una tabla de consulta materializada
Sentencias 785
CREATE TABLE
Sentencias 787
CREATE TABLE
El número de columnas real para una tabla puede limitarse más mediante la
fórmula siguiente:
Columnas en total * 8 + Número de columnas LOB * 12 <=
Límite del tamaño de fila para el tamaño de página
v 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 o no 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 o no. 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 estructurado, se reservarán 4 bytes adicionales de
actividad general para identificar las filas de subtablas, con independencia de si
se han definido o no subtablas. 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 22. Número total de bytes de las columnas por tipo de datos
VALUE COMPRESSION no se ha activado
VALUE COMPRESSION se La columna puede contener La columna no puede
Tipo de datos ha activado1 nulos 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 La parte integral de La parte integral de
(p/2)+3, donde p es la (p/2)+2, donde p es la (p/2)+1, donde p es la
precisión precisión precisión
DECFLOAT(16) 10 9 8
DECFLOAT(34) 18 17 16
Sentencias 789
CREATE TABLE
Tabla 22. Número total de bytes de las columnas por tipo de datos (continuación)
VALUE COMPRESSION no se ha activado
VALUE COMPRESSION se La columna puede contener La columna no puede
Tipo de datos ha activado1 nulos contener nulos
CHAR (n) n+2 n+1 n
VARCHAR (n) n+2 n+5 (dentro de una tabla) n+4 (dentro de una tabla)
2
LONG VARCHAR 22 25 24
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)
2
LONG VARGRAPHIC 22 25 24
DATE 6 5 4
TIME 5 4 3
TIMESTAMP(p) La parte integral de La parte integral de La parte integral de
(p+1)/2+9, donde p es la (p+1)/2+8, donde p es la (p+1)/2+7, donde p es la
precisión de segundos precisión de segundos precisión de segundos
fraccionarios fraccionarios fraccionarios
XML (sin INLINE LENGTH 82 85 84
especificado)
XML (con INLINE INLINE LENGTH +2 INLINE LENGTH +4 INLINE LENGTH +3
LENGTH especificado)
Longitud máxima de LOB3 70 73 72
1.024 (sin INLINE LENGTH
especificado)
Longitud máxima de LOB 94 97 96
8.192 (sin INLINE LENGTH
especificado)
Longitud máxima de LOB 118 121 120
65.536 (sin INLINE
LENGTH especificado)
Longitud máxima de LOB 142 145 144
524.000 (sin INLINE
LENGTH especificado)
Longitud máxima de LOB 166 169 168
4.190.000 (sin INLINE
LENGTH especificado)
Longitud máxima de LOB 198 201 200
134.000.000 (sin INLINE
LENGTH especificado)
Longitud máxima de LOB 222 225 224
536.000.000 (sin INLINE
LENGTH especificado)
Longitud máxima de LOB 254 257 256
1.070.000.000 (sin INLINE
LENGTH especificado)
Longitud máxima de LOB 278 281 280
1.470.000.000 (sin INLINE
LENGTH especificado)
Longitud máxima de LOB 314 317 316
2.147.483.647 (sin INLINE
LENGTH especificado)
Tabla 22. Número total de bytes de las columnas por tipo de datos (continuación)
VALUE COMPRESSION no se ha activado
VALUE COMPRESSION se La columna puede contener La columna no puede
Tipo de datos ha activado1 nulos contener nulos
LOB sin INLINE LENGTH INLINE LENGTH +2 INLINE LENGTH +5 INLINE LENGTH +4
especificado
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 soportados pero han quedado 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.
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)
Sentencias 791
CREATE TABLE
Tabla 24. 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 3 - 3 La parte La parte La parte
de (p/2)+2, donde integral de integral de integral de
p es la precisión (p/2)+2, donde (p/2)+1, donde (p/2)+3, donde
p es la p es la p es la
precisión precisión 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 N+4, donde N N+2, donde N
es el número es el número es el número
de bytes en los de bytes en los de bytes en los
datos datos datos
LONG 5 3 2 2 25 24 22
VARCHAR2
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*2+4, donde N*2+2, donde
N es el número N es el número N es el número
de bytes en los de bytes en los de bytes en los
datos datos datos
LONG 5 3 2 2 25 24 22
VARGRAPHIC2
DATE 5 3 - - 5 4 6
TIME 4 3 - - 4 3 5
TIMESTAMP(p) La parte integral 3 - - La parte La parte La parte
de (p+1)/2+8, integral de integral de integral de
donde p es la (p+1)/2+8, (p+1)/2+7, (p+1)/2+9,
precisión de donde p es la donde p es la donde p es la
segundos precisión de precisión de precisión de
fraccionarios segundos segundos segundos
fraccionarios fraccionarios fraccionarios
Longitud máxima 5 3 2 2 (De 60 a 68)+5 (De 60 a 68)+4 (De 60 a 68)+2
de LOB1 1024
Tabla 24. Número total de bytes de almacenamiento basado en el formato de fila, tipo de datos y valor de
datos (continuación)
Tipo de datos Caso A Caso B Caso C Caso D Caso E Caso F Caso G
Longitud máxima 5 3 2 2 (De 60 a 92)+5 (De 60 a 92)+4 (De 60 a 92)+2
de LOB 8192
Longitud máxima 5 3 2 2 (De 60 a 116)+5 (De 60 a 116)+4 (De 60 a 116)+2
de LOB 65.536
Longitud máxima 5 3 2 2 (De 60 a 140)+5 (De 60 a 140)+4 (De 60 a 140)+2
de LOB 524.000
Longitud máxima 5 3 2 2 (De 60 a 164)+5 (De 60 a 164)+4 (De 60 a 164)+2
de LOB 4.190.000
Longitud máxima 5 3 2 2 (De 60 a 196)+5 (De 60 a 196)+4 (De 60 a 196)+2
de LOB
134.000.000
Longitud máxima 5 3 2 2 (De 60 a 220)+5 (De 60 a 220)+4 (De 60 a 220)+2
de LOB
536.000.000
Longitud máxima 5 3 2 2 (De 60 a 252)+5 (De 60 a 252)+4 (De 60 a 252)+2
de LOB
1.070.000.000
Longitud máxima 5 3 2 2 (De 60 a 276)+5 (De 60 a 276)+4 (De 60 a 276)+2
de LOB
1.470.000.000
Longitud máxima 5 3 2 2 (De 60 a 312)+5 (De 60 a 312)+4 (De 60 a 312)+2
de LOB
2.147.483.647
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 soportados pero han quedado obsoletos y se pueden eliminar
en un release futuro.
Sentencias 793
CREATE TABLE
– Reducción monotónica.
Para cada par de valores x1 y x2 posible, si x2>x1, entonces fn(x2)<fn(x1). Por
ejemplo:
-SALARY
– Sin reducción monotónica.
Para cada par de valores x1 y x2 posible, si x2>x1, entonces fn(x2)>=fn(x1).
Por ejemplo:
SALARY/1000
– Sin incremento monotónico.
Para cada par de valores x1 y x2 posible, si x2>x1, entonces 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.
v 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 clave se va a llenar sólo con datos durante un largo período de
tiempo, esta organización de tabla probablemente no sea una elección adecuada.
v Una tabla puede tener como máximo una política de seguridad.
v DB2 aplica las restricciones de integridad referencial definidas en las tablas
protegidas. En este caso las violaciones de restricción pueden ser difíciles de
depurar, ya que DB2 no le permitirá ver qué fila ha ocasionado una violación si
no tiene la etiqueta de seguridad o las credenciales de exenciones adecuadas.
v 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.
v 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. Tenga cuidado al
configurar la duplicación para una tabla protegida, porque DB2 no puede
proteger los datos situados fuera de la base de datos.
v Consideraciones sobre un entorno DB2 pureScale o de varias particiones:
– En un entorno DB2 pureScale o de varias particiones, si las opciones CACHE
y NO ORDER están en vigor, se pueden activar varias antememorias a la vez
y puede que las solicitudes de asignaciones de valor siguiente de los distintos
miembros no asignen valores en un orden numérico estricto. Supongamos,
por ejemplo, que los miembros DB2A y DB2B están utilizando la misma
secuencia y que DB2A obtiene los valores de antememoria del 1 al 20 y DB2B
obtiene los valores de antememoria del 21 al 40. En este caso, si DB2A ha
Ejemplos
v Ejemplo 1: Cree la tabla TDEPT en el espacio de tablas DEPARTX. DEPTNO,
DEPTNAME, MGRNO y ADMRDEPT son nombres de columnas. CHAR
Sentencias 795
CREATE TABLE
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
v Ejemplo 2: Cree la tabla PROJ en el espacio de tablas 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
v Ejemplo 3: Cree una tabla llamada EMPLOYEE_SALARY donde los salarios
desconocidos se consideren 0. No se especifica ningún espacio de tablas, de
modo que la tabla se creará en un espacio de tablas seleccionado por el sistema
basándose en las normas descritas para la cláusula IN nombre-espacio-tablas.
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)
v Ejemplo 4: Cree tipos diferenciados para el total de salario y millas (kilómetros)
y utilícelos para las columnas de una tabla creada en el espacio de tablas por
omisión. 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 por omisión ("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
o
CREATE TABLE SALARY1 .....
DATA CAPTURE NONE
v Ejemplo 10: Cree una tabla y anote cronológicamente los cambios SQL en un
formato expandido.
CREATE TABLE SALARY2 .....
DATA CAPTURE CHANGES
v Ejemplo 11: Cree una tabla EMP_ACT en el espacio de tablas SCHED. EMPNO,
PROJNO, ACTNO, EMPTIME, EMSTDATE y EMENDATE son nombres de
columna. Las restricciones definidas en la tabla son:
Sentencias 797
CREATE TABLE
Sentencias 799
CREATE TABLE
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’)
Sentencias 801
CREATE TABLE
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)
v Ejemplo 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
v Ejemplo 30: Cree una tabla denominada NOTES con cuatro columnas, una de
ellas para almacenar notas XML.
CREATE TABLE NOTES
(ID INTEGER,
DESCRIPTION VARCHAR(255),
CREATED TIMESTAMP,
NOTE XML)
v Ejemplo 31: cree una tabla, EMP_INFO, que contenga 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) )
v Ejemplo 32: Cree una tabla particionada denominada DOCUMENTS con 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.
Sentencias 803
CREATE TABLE
CREATE TABLE t1 (c1 INT, c2 INT SECURED WITH B, c3 REAL SECURED WITH A)
SECURITY POLICY P
Sentencias 805
CREATE TABLESPACE
CREATE TABLESPACE
La sentencia CREATE TABLESPACE define un nuevo espacio de tablas en la base
de datos, asigna contenedores al espacio de tablas y registra la definición y los
atributos del espacio de tablas en el catálogo.
Invocación
Autorización
Sintaxis
DATABASE PARTITION GROUP
IN nombre-grupo-particiones-bd
PAGESIZE entero
K
EXTENTSIZE número-de-páginas PREFETCHSIZE AUTOMATIC
entero K número-de-páginas
M entero K
M
BUFFERPOOL nombre-agrup-almac-interm OVERHEAD número-de-milisegundos
INHERIT
NO FILE SYSTEM CACHING TRANSFERRATE número-de-milisegundos
FILE SYSTEM CACHING INHERIT
DATA TAG constante-entero DROPPED TABLE RECOVERY ON
INHERIT OFF
NONE
grupo-almacenamiento:
atributos-tamaño:
AUTORESIZE NO INITIALSIZE entero K
YES M
G
INCREASESIZE entero PERCENT MAXSIZE entero K
K M
M G
G NONE
contenedores-sistema:
,
USING ( 'serie-contenedor' )
cláusula-en-particiones-bd
contenedores-basedatos:
USING cláusula-contenedor
cláusula-en-particiones-bd
cláusula-contenedor:
cláusula-en-particiones-bd:
ON DBPARTITIONNUM
DBPARTITIONNUMS
( partición-bd-número1 )
TO partición-bd-número2
Sentencias 807
CREATE TABLESPACE
Descripción
LARGE, REGULAR, SYSTEM TEMPORARY o USER TEMPORARY
Especifica el tipo de espacio de tablas que se creará. Si no se especifica ningún
tipo, la cláusula MANAGED BY determina el valor por omisión.
LARGE
Almacena todos los datos permanentes. Este tipo sólo se permite en
espacios de tablas de espacio gestionado por la base de datos (DMS).
También es el tipo por omisión de los espacios de tablas DMS si no se
especifica ningún tipo. Si una tabla se coloca en un espacio de tablas
grande:
v La tabla puede ser mayor que una tabla de un espacio de tablas normal.
Para obtener detalles sobre los límites de tabla y de espacio de tablas,
consulte “Límites de SQL y XML”.
v 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.
v 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.
REGULAR
Almacena todos los datos permanentes. Este tipo se aplica a espacios de
tablas DMS y SMS. Éste es el único tipo permitido en los espacios de tablas
SMS y también es el tipo por omisión para espacios de tablas SMS si no se
ha especificado ningún tipo.
SYSTEM TEMPORARY
Almacena temporalmente tablas, áreas de trabajo utilizadas por el gestor
de bases de datos para llevar a cabo operaciones como clasificaciones o
uniones. Una base de datos siempre debe tener al menos un espacio de
tablas SYSTEM TEMPORARY, puesto que las tablas temporales sólo se
pueden almacenar en un espacio de tablas de este tipo. Al crear una base
de datos, se crea automáticamente un espacio de tablas temporal.
USER TEMPORARY
Almacena tablas temporales creadas y tablas declaradas temporales.
Cuando se crea una base de datos, no existen espacios de tablas temporales
de usuario. Para permitir la definición de tablas temporales creadas o
tablas temporales declaradas, al menos debe crearse un espacio de tablas
temporal de usuario con los privilegios USE adecuados.
nombre-espacio-tablas
Nombra el espacio de tablas. Este nombre consta de una sola parte. Se trata de
un identificador de SQL (ordinario o delimitado). El nombre-espacio-tablas no
debe identificar un espacio de tablas que ya exista en el catálogo (SQLSTATE
42710). El nombre-espacio-tablas no debe empezar por los caracteres 'SYS'
(SQLSTATE 42939).
IN DATABASE PARTITION GROUP nombre-grupo-particiones-bd
Especifica el grupo de particiones de base de datos para el espacio de tablas. El
grupo de particiones de base de datos debe existir. El único grupo de
particiones de base de datos que se puede especificar al crear un espacio de
tablas SYSTEM TEMPORARY es IBMTEMPGROUP. Las palabras clave
DATABASE PARTITION GROUP son opcionales.
Si no se especifica el grupo de particiones de base de datos, se utiliza el grupo
de particiones de base de datos por omisión (IBMDEFAULTGROUP) para los
Sentencias 809
CREATE TABLESPACE
Sentencias 811
CREATE TABLESPACE
Sentencias 813
CREATE TABLESPACE
EXTENTSIZE número-de-páginas
Especifica el número de páginas de PAGESIZE que se grabarán en un
contenedor antes de pasar al siguiente contenedor. El valor del tamaño de
extensión también puede especificarse como un valor entero seguido de K
(para kilobytes) o de M (para megabytes). Si se especifica de este modo, se
utiliza el límite inferior del número de bytes dividido por el tamaño de
página para determinar el valor del tamaño de extensión. El gestor de
bases de datos pasa periódicamente por los contenedores a medida que se
almacenan datos.
En un entorno DB2 pureScale, debe utilizar un tamaño de extensión de 32
páginas como máximo. Este tamaño de extensión mínimo reduce la
cantidad de tráfico de mensajes internos dentro del entorno DB2 pureScale
cuando se añaden extensiones para una tabla o índice.
El valor por omisión lo proporciona el parámetro de configuración de la
base de datos dft_extent_sz, que tiene un rango válido de 2 a 256 páginas.
PREFETCHSIZE
Especifica que han de leerse los datos que una consulta necesita antes de
que la consulta haga referencia a éstos con el fin de que la consulta no
tenga que esperar a que se produzca la E/S.
El valor por omisión lo proporciona el parámetro de configuración de la
base de datos dft_prefetch_sz.
AUTOMATIC
Especifica que el tamaño de captación previa de un espacio de tablas
debe actualizarse automáticamente, es decir, el tamaño de captación
previa se gestionará a través del gestor de bases de datos de DB2.
DB2 actualizará el tamaño de captación previa automáticamente
siempre que el número de contenedores de un espacio de tablas
cambie (seguido por una ejecución satisfactoria de una sentencia
ALTER TABLESPACE que añada o descarte uno o más
contenedores).El tamaño de captación previa se actualiza al arrancar la
base de datos.
número-de-páginas
Especifica el número de páginas PAGESIZE del espacio de tablas que
se leerán cuando se realice la captación previa de datos. El valor
máximo es 32767.
entero K | M
Especifica los valores de tamaño de captación previa como valor de
entero seguido de K (de kilobytes) o de M (de megabytes). Si se
especifica de este modo, se utiliza el límite inferior del número de
bytes dividido por el tamaño de página para determinar el valor
correspondiente al número de páginas para el tamaño de captación
previa.
BUFFERPOOL nombre-agrup-almac-interm
El nombre de la agrupación de almacenamientos intermedios utilizado
para las tablas de este espacio de tablas. La agrupación de
almacenamientos intermedios debe existir (SQLSTATE 42704). Si no se
especifica, se utiliza la agrupación de almacenamientos intermedios por
omisión (IBMDEFAULTBP). El tamaño de página de la agrupación de
almacenamientos intermedios debe coincidir con el tamaño de página
especificado (o tomado por omisión) para el espacio de tablas (SQLSTATE
Sentencias 815
CREATE TABLESPACE
Normas
v Si el almacenamiento automático no se define para la base de datos, se devuelve
un error (SQLSTATE 55060).
v La cláusula INITIALSIZE no puede especificarse con la cláusula MANAGED BY
SYSTEM o MANAGED BY DATABASE (SQLSTATE 42601).
v La cláusula AUTORESIZE, INCREASESIZE o MAXSIZE no puede especificarse
con la cláusula MANAGED BY SYSTEM (SQLSTATE 42601).
v La cláusula AUTORESIZE, INITIALSIZE, INCREASESIZE o MAXSIZE no puede
especificarse para la creación de un espacio de tablas de almacenamiento
automático temporal (SQLSTATE 42601).
v La cláusula INCREASESIZE o MAXSIZE no puede especificarse si el espacio de
tablas no permite cambiar el tamaño automáticamente (SQLSTATE 42601).
v AUTORESIZE no puede habilitarse para los espacios de tablas DMS que están
definidos para utilizar contenedores de dispositivo sin procesar (SQLSTATE
42601).
Sentencias 817
CREATE TABLESPACE
Notas
v La elección entre un espacio de tablas gestionado por la base de datos y un
espacio de tablas gestionado por el sistema es una elección fundamental que
implica concesiones.
v Si existe más de un espacio de tablas TEMPORARY en la base de datos, estos se
utilizan de modo rotativo para equilibrar el uso.
v El propietario del espacio de tablas recibe el privilegio USE con WITH GRANT
OPTION para el espacio de tablas durante su creación.
v Un espacio de tablas de almacenamiento automático se crea como un espacio de
tablas SMS o como un espacio de tablas DMS. DMS se selecciona para espacios
de tablas grandes y normales, y SMS se selecciona para espacios de tablas
temporales. Tenga en cuenta que no puede contar con este comportamiento,
dado que es posible que cambie en un release posterior. Cuando se elige DMS y
no se especifica el tipo del espacio de tablas, el comportamiento por omisión
consiste en crear un espacio de tablas grande.
v La creación de un espacio de tablas de almacenamiento automático no incluye
definiciones de contenedor. El gestor de bases de datos determina
automáticamente la ubicación y el tamaño, si procede, de los contenedores
basándose en las vías de acceso de almacenamiento asociadas con el grupo de
almacenamiento especificado o el grupo de almacenamiento por omisión. El
gestor de bases de datos intentará ampliar los espacios de tablas grandes y
normales cuanto sea necesario, siempre y cuando no se alcance el tamaño
máximo. Esto puede implicar la ampliación de los contenedores existentes o la
adición de contenedores a un nuevo conjunto de bandas. Cada vez que se activa
la base de datos, el gestor de bases de datos reconfigura automáticamente el
número de contenedores y su ubicación para los espacios de tablas temporales
que no se encuentren en estado anómalo.
v Un espacio de tablas de almacenamiento automático grande o normal no
utilizará nuevas vías de acceso a almacenamiento (consulte la descripción de la
Sentencias 819
CREATE TABLESPACE
Ejemplos
v Ejemplo 1: Cree un espacio de tablas DMS grande en un sistema UNIX utilizando
tres dispositivos de 10.000 páginas de 4 K cada uno. Especifique sus
características de E/S.
CREATE TABLESPACE PAYROLL
MANAGED BY DATABASE
USING (DEVICE’/dev/rhdisk6’ 10000,
DEVICE ’/dev/rhdisk7’ 10000,
DEVICE ’/dev/rhdisk8’ 10000)
OVERHEAD 12.67
TRANSFERRATE 0.18
v Ejemplo 2: Cree un espacio de tablas SMS normal en Windows mediante tres
directorios en tres unidades distintas, con un tamaño de extensión de 64 páginas
y un tamaño de captación previa de 32 páginas.
CREATE TABLESPACE ACCOUNTING
MANAGED BY SYSTEM
USING (’d:\acc_tbsp’, ’e:\acc_tbsp’, ’f:\acc_tbsp’)
EXTENTSIZE 64
PREFETCHSIZE 32
v Ejemplo 3: Cree un espacio de tablas DMS temporal de sistema en un sistema
UNIX utilizando dos archivos de 50.000 páginas cada uno y un tamaño de
extensión de 256 páginas.
CREATE TEMPORARY TABLESPACE TEMPSPACE2
MANAGED BY DATABASE
USING (FILE ’dbtmp/tempspace2.f1’ 50000,
FILE ’dbtmp/tempspace2.f2’ 50000)
EXTENTSIZE 256
v Ejemplo 4: Cree un espacio de tablas DMS grande en un grupo de particiones de
base de datos ODDNODEGROUP (particiones 1, 3 y 5 de base de datos) en un
sistema UNIX. Utilice el dispositivo /dev/rhdisk0 para 10.000 páginas de 4 K en
cada partición de base de datos. Especifique un dispositivo específico de
particiones de base de datos con 40.000 páginas de 4K para cada partición de
base de datos.
CREATE TABLESPACE PLANS
MANAGED BY DATABASE
USING (DEVICE ’/dev/rhdisk0’ 10000, DEVICE ’/dev/rn1hd01’ 40000)
ON DBPARTITIONNUM (1)
USING (DEVICE ’/dev/rhdisk0’ 10000, DEVICE ’/dev/rn3hd03’ 40000)
ON DBPARTITIONNUM (3)
USING (DEVICE ’/dev/rhdisk0’ 10000, DEVICE ’/dev/rn5hd05’ 40000)
ON DBPARTITIONNUM (5)
v Ejemplo 5: Cree un espacio de tablas de almacenamiento automático grande
denominado DATATS que permita que el sistema realice todas las decisiones con
respecto al tamaño y al crecimiento del espacio de tablas.
CREATE TABLESPACE DATATS
o bien
CREATE TABLESPACE DATATS
MANAGED BY AUTOMATIC STORAGE
v Ejemplo 6: cree un espacio de tablas de almacenamiento automático temporal
llamado TEMPDATA.
CREATE TEMPORARY TABLESPACE TEMPDATA
o
CREATE TEMPORARY TABLESPACE TEMPDATA
MANAGED BY AUTOMATIC STORAGE
v Ejemplo 7: cree un espacio de tala de almacenamiento automático grande
llamado USERSPACE3 con un tamaño inicial de 100 megabytes y un tamaño
máximo de 1 gigabyte.
CREATE TABLESPACE USERSPACE3
INITIALSIZE 100 M
MAXSIZE 1 G
v Ejemplo 8: Cree un espacio de tablas de almacenamiento automático grande
denominado LARGEDATA con un índice de incremento del 10 por ciento (es
decir, su tamaño total aumenta en un 10 por ciento cada vez que cambia
automáticamente) y un tamaño máximo de 512 megabytes. En lugar de
especificar la cláusula INITIALSIZE, permita que el gestor de bases de datos
determine un tamaño inicial apropiado para el espacio de tablas.
CREATE LARGE TABLESPACE LARGEDATA
INCREASESIZE 10 PERCENT
MAXSIZE 512 M
v Ejemplo 9: cree un espacio de tablas DMS grande llamado USERSPACE4 con dos
contenedores de archivo (cada contenedor tiene 1 megabyte de tamaño), un
índice de incremento de 2 megabytes y un tamaño máximo de 100 megabytes.
CREATE TABLESPACE USERSPACE4
MANAGED BY DATABASE USING (FILE ’/db2/file1’ 1 M, FILE ’/db2/file2’ 1 M)
AUTORESIZE YES
INCREASESIZE 2 M
MAXSIZE 100 M
v Ejemplo 10: cree espacios de tablas DMS grandes utilizando dispositivos RAW en
un sistema operativo Windows.
– Para especificar unidades físicas completas, utilice el formato \\.\unidad-física:
CREATE TABLESPACE TS1
MANAGED BY DATABASE USING (DEVICE ’\\.\PhysicalDrive5’ 10000,
DEVICE ’\\.\PhysicalDrive6’ 10000)
– Para especificar particiones lógicas mediante letras de unidad:
CREATE TABLESPACE TS2
MANAGED BY DATABASE USING (DEVICE ’\\.\G:’ 10000,
DEVICE ’\\.\H:’ 10000)
– Para especificar particiones lógicas mediante identificadores exclusivos
globales (GUID) del volumen, emplee el programa de utilidad
db2listvolumes para recuperar el GUID del volumen de todas las particiones
locales y, a continuación, copie el GUID de la partición lógica que desee
incluir en la cláusula del contenedor de espacios de tablas:
CREATE TABLESPACE TS3
MANAGED BY DATABASE USING (
DEVICE ’\\?\Volume{2ca6a0c1-8542-11d8-9734-00096b5322d2}\’ 20000M)
Es preferible que utilice los GUID del volumen en lugar del formato de letra
de unidad si tiene más particiones que letras de unidad disponibles en la
máquina.
– Para especificar particiones lógicas mediante puntos de unión (o puntos de
montaje de volúmenes), monte la partición RAW en otro volumen con
formato NTFS como un punto de unión y, a continuación, especifique la vía
de acceso al punto de unión en el volumen NTFS como la vía de acceso al
contenedor. Por ejemplo:
Sentencias 821
CREATE TABLESPACE
CREATE THRESHOLD
La sentencia CREATE THRESHOLD define un umbral.
Invocación
Autorización
Sintaxis
CREATE THRESHOLD nombre-umbral FOR dominio-umbral ACTIVITIES
ENABLE
ENFORCEMENT ámbito-implantación
DISABLE
dominio-umbral:
DATABASE
SERVICE CLASS nombre-clase-servicio
UNDER nombre-clase-servicio
STATEMENT TEXT texto-sentencia
REFERENCE ID-ejecutable
WORKLOAD nombre-carga-trabajo
ámbito-implantación:
DATABASE
MEMBER
WORKLOAD OCCURRENCE
predicado-umbral:
Sentencias 823
CREATE THRESHOLD
acciones-superaron-umbral:
WITHOUT DETAILS
STOP EXECUTION
, CONTINUE
(2) FORCE APPLICATION
WITH DETAILS acción-volver-correlacionar-actividad
SECTION AND VALUES
acción-volver-correlacionar-actividad:
Notas:
1 Cada valor de etiqueta de datos sólo se puede especificar una vez.
2 La palabra clave DETAILS es la información mínima que debe especificarse,
seguida de la opción separada por una coma.
Descripción
nombre-umbral
Da nombre al umbral. Este nombre consta de una sola parte. Se trata de un
identificador de SQL (ordinario o delimitado). El nombre-umbral no debe
identificar una carga de trabajo que ya exista en el servidor actual (SQLSTATE
42710). El nombre no debe empezar por los caracteres 'SYS' (SQLSTATE 42939).
FOR dominio-umbral ACTIVITIES
Especifica el dominio de definición del umbral.
DATABASE
Este umbral se aplica a cualquier actividad de la base de datos.
SERVICE CLASS nombre-clase-servicio
Este umbral se aplica a las actividades que se ejecutan en la clase de
servicio nombre-clase-servicio. Si no se especifica UNDER,
nombre-clase-servicio debe identificar una superclase de servicio existente
(SQLSTATE 42704). Si se especifica UNDER, nombre-clase-servicio debe
identificar una subclase de servicio específica de la superclase de servicio
especificada como consecuencia de la palabra clave UNDER (SQLSTATE
42704). nombre-clase-servicio no puede ser la clase de servicio
SYSDEFAULTSYSTEMCLASS o la clase de servicio
SYSDEFAULTMAINTENANCECLASS (SQLSTATE 5U032).
UNDER nombre-clase-servicio
Especifica una superclase de servicio. El nombre-clase-servicio debe
identificar una superclase de servicio existente (SQLSTATE 42704).
STATEMENT
Este umbral se aplica a las actividades para una sentencia de SQL
específica. Identifique la sentencia que se debe utilizar para el umbral
especificando el texto de la sentencia o el ID ejecutable de la sentencia.
TEXT texto-sentencia
Este umbral se aplica a las sentencias que coinciden con el texto
especificado en el texto especificado en texto-sentencia. Se tienen en
cuenta las sentencias tanto de SQL estático como dinámico al evaluar
la condición para el umbral. Durante la ejecución, el texto especificado
para el parámetro texto-sentencia debe ser una coincidencia exacta del
texto de una sentencia de la antememoria de paquetes para que se
sobrepase el umbral. No se encuentran coincidencias entre el
Sentencias 825
CREATE THRESHOLD
DATABASE
El umbral se implanta en todos los miembros dentro del dominio de
definición, es decir, todos los miembros de la base de datos y todos los
miembros de la clase de servicio.
MEMBER
El umbral se implanta según el miembro. No existe ninguna coordinación
entre todos los miembros para implantar el umbral.
WORKLOAD OCCURRENCE
El umbral se implanta sólo en una aparición de carga de trabajo. Dos
apariciones de carga de trabajo que se ejecuten simultáneamente en el
mismo miembro dispondrán cada una de ellas de su propio número de
ejecución para este umbral.
ENABLE o DISABLE
Especifica si el umbral está habilitado o no para que lo utilice el gestor de la
base de datos.
ENABLE
El gestor de base de datos utiliza el umbral para restringir la ejecución de
actividades de base de datos.
DISABLE
El gestor de base de datos no utiliza el umbral para restringir la ejecución
de actividades de base de datos.
WHEN predicado-umbral
Especifica la condición del umbral.
TOTALMEMBERCONNECTIONS > valor-entero
Esta condición define un límite superior sobre el número de conexiones de
coordinador que pueden ejecutarse simultáneamente en un miembro. Este
valor puede ser cero o cualquier entero positivo (SQLSTATE 42820). Un
valor de cero significa que se impedirá la conexión de cualquier conexión
de coordinador nueva. Proseguirán todas las conexiones en cola o en
ejecución en la actualidad. El dominio de definición para esta condición
debe ser DATABASE y el ámbito de implantación debe ser MEMBER
(SQLSTATE 5U037).
TOTALSCMEMBERCONNECTIONS > valor-entero
Esta condición define un límite superior en el número de conexiones de
coordinador que pueden ejecutarse simultáneamente en un miembro de
una superclase de servicio específica. Este valor puede ser cero o cualquier
entero positivo (SQLSTATE 42820). Un valor de cero significa que se
impedirá que cualquier conexión nueva se una a la clase de servicio.
Proseguirán todas las conexiones en cola o en ejecución en la actualidad. El
dominio de definición para esta condición debe ser SERVICE
SUPERCLASS y el ámbito de implantación debe ser MEMBER (SQLSTATE
5U037).
AND QUEUEDCONNECTIONS > valor-entero o AND QUEUEDCONNECTIONS
UNBOUNDED
Especifica un tamaño de cola para el momento en que se supere el
número máximo de conexiones de coordinador. Este valor puede ser
cualquier entero positivo, incluyendo el cero (SQLSTATE 42820). Un
valor de cero significa que no se pondrá en cola ninguna conexión de
coordinador. Especificar UNBOUNDED pondrá en cola todas las
Sentencias 827
CREATE THRESHOLD
Sentencias 829
CREATE THRESHOLD
Sentencias 831
CREATE THRESHOLD
Sentencias 833
CREATE THRESHOLD
Sentencias 835
CREATE THRESHOLD
NONE
Especifica que los datos de actividad no deberían recopilarse para cada
una de las actividades que supera el umbral.
ON COORDINATOR MEMBER
Especifica que los datos de actividad se recopilan sólo en el miembro
coordinador de la actividad.
ON ALL MEMBERS
Especifica que los datos de actividad van a recopilarse en todos los
miembros en los que se procesa la actividad. En miembros remoto, es
posible capturar un registro de la actividad varias veces, puesto que
esta va y viene en dichos miembros. Para umbrales de predicción, la
información sobre actividades sólo se recopila en todos los miembros si
también se especifica la acción CONTINUE para umbrales excedidos.
Para umbrales de reacción, la cláusula ON ALL MEMBERS no tiene
efecto y la información sobre actividades siempre se recopila
únicamente en el miembro coordinador. Para umbrales de predicción y
de reacción, los detalles de actividades, la información de sección o los
valores de actividades únicamente se recopilarán en el miembro
coordinador.
WITHOUT DETAILS
Especifica que los datos sobre cada actividad asociada a la clase de
trabajo para la que esta acción de trabajo está definida, deben enviarse
a cualquier supervisor de sucesos de actividades activas cuando se
completa la actividad. Los detalles sobre la sentencia, el entorno de
compilación y los datos del entorno de sección no se envían.
WITH
DETAILS
Especifica que la sentencia y los datos del entorno de compilación
deben enviarse a cualquier supervisor de sucesos de actividades
activas para aquellas actividades que las tienen. Los datos del
entorno de sección no se envían.
SECTION
Especifica que los datos de sentencia, de entorno de compilación,
de entorno de sección y los datos reales de sección han de enviarse
a cualquier supervisor de sucesos de actividades activo para
aquellas actividades que incluyan estos. Se debe especificar
DETAILS si se especifica SECTION. En el caso de umbrales
predictivos, los datos reales de sección se recopilarán en cualquier
miembro donde se recopilen los datos de actividad. En el caso de
umbrales reactivos, los datos reales de sección se recopilarán sólo
en el miembro coordinador.
AND VALUES
Especifica que los valores de datos de entrada van a enviarse al
supervisor de sucesos de actividades activas para las actividades
que dispongan de los mismos.
STOP EXECUTION
La ejecución de la actividad se detiene y se devuelve un error (SQLSTATE
5U026). En el caso del umbral UOWTOTALTIME, la unidad de trabajo se
retrotrae.
CONTINUE
La ejecución de la actividad no se detiene.
Sentencias 837
CREATE THRESHOLD
FORCE APPLICATION
Se fuerza que la aplicación salga del sistema (SQLSTATE 55032). Esta
acción sólo puede especificarse para el umbral UOWTOTALTIME.
acción-volver-correlacionar-actividad
REMAP ACTIVITY TO nombre-subclase-servicio
La actividad se correlaciona con nombre-subclase-servicio.La ejecución de
la actividad no se detiene. Esta acción sólo es válida para umbrales de
clase en servicio como los umbrales CPUTIMEINSC,
SQLROWSREADINSC, DATATAGINSC IN y DATATAGINSC NOT IN
(SQLSTATE 5U037). El nombre-subclase-servicio debe identificar una
subclase de servicio existente en la misma superclase que tenga
asociada el umbral (SQLSTATE 5U037). El nombre-subclase-servicio no
puede ser igual que la subclase de servicio asociada del umbral
(SQLSTATE 5U037).
NO EVENT MONITOR RECORD
Especifica que no se grabará ningún registro de infracción de umbral.
LOG EVENT MONITOR RECORD
Especifica que si existe un supervisor de sucesos THRESHOLD
VIOLATIONS y está activo, se grabará en él un registro de infracción
de umbral.
Notas
v Acción de umbral superado de CONTINUE y datos de supervisor de sucesos: Los
datos de supervisor de sucesos sólo se recopilan una vez por cada miembro
cuando se ha superado una condición de umbral. Si la acción de umbral
superado es CONTINUE, la actividad sigue ejecutándose y no se recopilan más
datos de supervisor de sucesos para este umbral en el miembro afectado. Por
ejemplo, tome en consideración un umbral de tiempo de 10 minutos con una
acción de CONTINUE. Una vez que una actividad haya superado el límite
superior de 10 minutos, se recopilarán datos de supervisor de sucesos para el
umbral en el miembro afectado.
v Inmovilización de una clase de servicio: La condición de umbral de
TOTALSCPARTITIONCONNECTIONS puede utilizarse para simular clases de
servicio de inmovilizadas que normalmente no pueden inmovilizarse (por
ejemplo, la clase de usuario por omisión o la clase de sistema por omisión). Esto
resulta útil, ya que los umbrales no se aplican a los usuarios con autorización
DBADM que se ejecuten en SYSDEFAULTADMWORKLOAD, mientras que una
clase de servicio inmovilizado no está disponible para todo el mundo. En
consecuencia, las clases de servicio por omisión no pueden inmovilizarse
directamente sino a través de un umbral que permita a los usuarios con
autorización DBADM unirlas cuando se conecten a la base de datos utilizando
SYSDEFAULTADMWORKLOAD.
v Alternativas de sintaxis: Las siguientes alternativas se admiten para mantener la
compatibilidad con versiones anteriores de productos DB2 y otros productos de
base de datos. Estas alternativas no son estándar y no deberían utilizarse.
– Puede especificarse DATABASE PARTITION en lugar de MEMBER, salvo
cuando la variable de registro DB2_ENFORCE_MEMBER_SYNTAX se
establece en ON.
– Puede especificarse DATABASE PARTITIONS en lugar de MEMBERS, salvo
cuando la variable de registro DB2_ENFORCE_MEMBER_SYNTAX se
establece en ON.
Ejemplos
v Ejemplo 1: Cree un umbral que implante una utilización de espacio de tablas
temporal máximo de 50M (por partición de la base de datos) en cualquier
actividad de la base de datos. Ha de detenerse cualquier actividad que viole este
umbral.
CREATE THRESHOLD DBMAX50MEGTEMPSPACE
FOR DATABASE ACTIVITIES
ENFORCEMENT MEMBER
WHEN SQLTEMPSPACE > 50 M
STOP EXECUTION
v Ejemplo 2: Cree un segundo umbral para limitar el tiempo de ejecución por
omisión de cualquier actividad de la base de datos a un máximo de 1 hora. Ha
de detenerse cualquier actividad que viole este umbral.
CREATE THRESHOLD DBMAX1HOURRUNTIME
FOR DATABASE ACTIVITIES
ENFORCEMENT DATABASE
WHEN ACTIVITYTOTALTIME > 1 HOUR
STOP EXECUTION
v Ejemplo 3: Suponga que se ha creado una superclase de servicio denominada
BIGQUERIES para dar acomodo a las consultas utilizando más espacio temporal
que el medio y en ejecución por más de 1 hora. Los umbrales definidos en esta
clase de servicio anularán temporalmente los valores establecidos en el ejemplo
anterior por encima del nivel de la base de datos. Tenga en cuenta el modo en
que se permite que siga la ejecución de las actividades que violen los umbrales
de esta superclase, pero se recopila información detallada para un posterior
análisis.
CREATE THRESHOLD BIGQUERIESMAX500MEGTEMPSPACE
FOR SERVICE CLASS BIGQUERIES ACTIVITIES
ENFORCEMENT DATABASE MEMBER
WHEN SQLTEMPSPACE > 500 M
COLLECT ACTIVITY DATA WITH DETAILS AND VALUES
CONTINUE
Sentencias 839
CREATE THRESHOLD
CREATE THRESHOLD
MAXBIGQUERIESCONCURRENCY
FOR SERVICE CLASS BIGQUERIES ACTIVITIES
ENFORCEMENT DATABASE
WHEN CONCURRENTDBCOORDACTIVITIES > 2
STOP EXECUTION
v Ejemplo 6: Cree un umbral que capture información de las actividades para una
sentencia específica que se ejecute durante más de un minuto, pero que no
detenga la ejecución de la sentencia.
CREATE THRESHOLD TH1
FOR STATEMENT
TEXT ’SELECT DISTINCT PARTS_BIN FROM STOCK WHERE PART_NUMBER = ?’
ACTIVITIES ENFORCEMENT DATABASE
WHEN ACTIVITYTOTALTIME > 1 MINUTE
COLLECT ACTIVITY DATA WITH DETAILS, SECTION AND VALUES
CONTINUE
CREATE TRANSFORM
La sentencia CREATE TRANSFORM define funciones de transformación,
identificados por un nombre de grupo, que se utilizan para intercambiar valores de
tipo estructurado con programas en lenguaje del sistema principal y con funciones
externas.
Invocación
Autorización
Sintaxis
,
(1)
nombre-grupo ( TO SQL WITH designador-función )
FROM SQL
designador-función:
FUNCTION nombre-función
( )
,
tipo-datos
SPECIFIC FUNCTION nombre-específico
Notas:
1 Una misma cláusula no se debe especificar más de una vez.
Descripción
TRANSFORM o TRANSFORMS
Indica que se están definiendo uno o más grupos de transformación. Se puede
especificar cualquiera de las dos versiones de la palabra clave.
FOR nombre-tipo
Especifica un nombre para el tipo estructurado definido por el usuario para el
cual se define el grupo de transformación.
Sentencias 841
CREATE TRANSFORM
Normas
v El tipo o los tipos incorporados que se devuelven de la función FROM SQL
deben corresponder directamente al tipo o tipos incorporados que son
parámetros de la función TO SQL. Esto es una consecuencia lógica de la relación
inversa que existe entre estas dos funciones.
Notas
v Cuando no se especifica un grupo de transformación en un programa de
aplicación (utilizando la opción de precompilación o de enlace TRANSFORM
GROUP para el SQL estático o la sentencia SET CURRENT DEFAULT
TRANSFORM GROUP para el SQL dinámico), las funciones de transformación
del grupo de transformación 'DB2_PROGRAM' se utilizan (si se han definido)
cuando el programa de aplicación está recuperando o enviando variables del
lenguaje principal que están basadas en el tipo estructurado definido por el
usuario identificado por nombre-tipo. Al recuperar un valor del tipo de datos
nombre-tipo, se invoca la transformación FROM SQL para transformar el tipo
estructurado en el tipo de datos incorporado devuelto por la función de
transformación. De forma similar, al enviar una variable del lenguaje principal
que se asignará a un valor del tipo de datos nombre-tipo, se invocará la
transformación TO SQL para transformar el valor del tipo de datos incorporado
en el valor de tipo de datos estructurado. Si no se especifica un grupo de
transformación o un grupo DB2_PROGRAM no está definido para el tipo
estructurado indicado), se emite un error (SQLSTATE 42741).
v La representación del tipo de datos incorporado para una variable del lenguaje
principal de tipo estructurado debe asignarse:
– desde el resultado de la función de transformación FROM SQL para el tipo
estructurado tal como está definida por la opción especificada TRANSFORM
GROUP del mandato de precompilación (utilizando normas de asignación
para la recuperación) y
– al parámetro de la función de transformación TO SQL para el tipo
estructurado tal como está definida por la opción especificada TRANSFORM
GROUP del mandato de precompilación (utilizando normas de asignación de
memoria).
Si la asignación de una variable del lenguaje principal no es compatible con el
tipo necesario para la función de transformación aplicable, se genera un error
(para el enlace de entrada: SQLSTATE 42821; para el enlace de salida: SQLSTATE
42806). Para obtener información acerca de los errores que resultan de las
asignaciones de series de caracteres, consulte “Asignaciones de series de
caracteres”.
v Las funciones de transformación identificadas en el grupo de transformación por
omisión denominado 'DB2_FUNCTION' se utilizan siempre que una función
definida por el usuario no escrita en SQL se invoca utilizando el tipo de datos
nombre-tipo como parámetro o tipo de retorno. Esto se aplica cuando la función
no especifica la cláusula TRANSFORM GROUP. Cuando se invoca la función
con un argumento del tipo de datos nombre-tipo, se ejecuta la transformación
FROM SQL para transformar el tipo estructurado en el tipo de datos
incorporado devuelto por la función de transformación. De forma similar,
cuando el tipo de datos de retorno de la función es un tipo de datos nombre-tipo,
se invoca la transformación TO SQL para transformar el valor de tipo de datos
incorporado devuelto del programa de función externa en el valor de tipo
estructurado.
Sentencias 843
CREATE TRANSFORM
Ejemplo
Crear dos grupos de transformación que asocien el tipo de estructura definida por
el usuario polígono con funciones de transformación personalizadas para C y Java,
respectivamente.
CREATE TRANSFORM FOR POLYGON
mystruct1 (FROM SQL WITH FUNCTION myxform_sqlstruct,
TO SQL WITH FUNCTION myxform_structsql)
myjava1 (FROM SQL WITH FUNCTION myxform_sqljava,
TO SQL WITH FUNCTION myxform_javasql)
CREATE TRIGGER
La sentencia CREATE TRIGGER define un activador en una base de datos.
Invocación
Autorización
Sentencias 845
CREATE TRIGGER
Sintaxis
NO CASCADE
BEFORE suceso-activador ON nombre-tabla
AFTER nombre-vista
INSTEAD OF
(1) (2) AS
REFERENCING OLD nombre-correlación
AS
NEW nombre-correlación
AS
OLD TABLE identificador
AS
NEW TABLE identificador
NOT SECURED
FOR EACH ROW acción-activada
(3) SECURED
FOR EACH STATEMENT
suceso-activador:
OR
(4)
INSERT
DELETE
UPDATE
,
OF nombre-columna
acción-activada:
(5)
WHEN ( condición-búsqueda )
sentencia-procedimiento-SQL
etiqueta:
sentencia-procedimiento-SQL:
CALL
(6)
SQL compuesto (compilado)
SQL compuesto (en línea)
FOR
selección completa
,
WITH expresión-tabla-común
GET DIAGNOSTICS
IF
INSERT
ITERATE
LEAVE
MERGE
delete-buscada
update-buscada
SET Variable
SIGNAL
WHILE
Notas:
1 OLD y NEW sólo se pueden especificar una vez cada uno.
2 OLD TABLE y NEW TABLE sólo se pueden especificar una vez cada uno, y
sólo para activadores AFTER o INSTEAD OF.
3 FOR EACH STATEMENT no puede especificarse para activadores BEFORE o
para activadores INSTEAD OF.
4 No se debe especificar un suceso de activador más de una vez para la misma
operación. Por ejemplo, se permite INSERT OR DELETE, pero no se permite
INSERT OR INSERT.
5 La condición WHEN no puede especificarse para los activadores INSTEAD
OF.
6 Una sentencia de SQL compuesto (compilado) no se puede especificar si la
definición de activador incluye una cláusula REFERENCING OLD TABLE o
una cláusula REFERENCING NEW TABLE. Una sentencia de SQL compuesto
(compilada) no se puede especificar para una definición de activador en un
entorno de base de datos particionada.
Descripción
OR REPLACE
Especifica que se debe sustituir la definición del activador si existe uno en el
servidor actual. La definición existente se descarta de forma efectiva antes de
que se sustituya la nueva definición en el catálogo. Esta opción no se tiene en
cuenta si no existe una definición para el activador en el servidor actual. Esta
opción sólo puede especificarla el propietario del objeto.
nombre-activador
Indica el nombre del activador. El nombre, incluido en el nombre de esquema
implícito o explícito, no debe identificar un activador que ya esté descrito en el
catálogo (SQLSTATE 42710). Si se especifica un nombre compuesto de dos
partes, el nombre de esquema no puede empezar por 'SYS' (SQLSTATE 42939).
NO CASCADE BEFORE
Especifica que la acción activada asociada se debe aplicar antes de aplicar a la
Sentencias 847
CREATE TRIGGER
Sentencias 849
CREATE TRIGGER
Sentencias 851
CREATE TRIGGER
Notas
v Al añadir un activador a una tabla que ya contiene filas, no provocará la
activación de ninguna acción activada. Así pues, si el activador tiene como
objetivo imponer las restricciones de la tabla, es posible que las filas existentes
no cumplan dichas restricciones.
v Si los sucesos para dos activadores tienen lugar simultáneamente (por ejemplo,
si tienen el mismo suceso, tiempo de activación y tablas sujeto), el primer
activador creado es el primero en ejecutarse. Si se utiliza la opción OR
REPLACE para sustituir un activador creado anteriormente, la hora de creación
cambia y, por lo tanto, puede afectar al orden de ejecución del activador.
v Si se añade una columna a la tabla sujeto cuando ya se han definido los
activadores, se aplican las siguientes normas:
– Si se trata de un activador UPDATE que se ha especificado sin una lista de
columnas explícita, cualquier actualización de una columna nueva provocará
la activación del activador.
– La columna no estará visible en la acción activada de cualquier activador
definido con anterioridad.
– Las tablas de transición OLD TABLE y NEW TABLE no contendrán esta
columna. Por este motivo, el resultado de "SELECT *" en una tabla de
transición no contendrá la columna añadida.
v Si se añade una columna a cualquier tabla a la que se haga referencia en una
acción activada, la nueva columna no estará visible para la acción activada.
v Si un objeto al que se hace referencia en el cuerpo del activador no existe o se ha
marcado como no válido o el definidor no tiene temporalmente los privilegios
para acceder al objeto y, si el parámetro de configuración de la base de datos
auto_reval no se ha establecido en DISABLED, el activador se creará
satisfactoriamente igualmente. El activador se marcará como no válido y se
volverá a validar la siguiente vez que se invoque.
Sentencias 853
CREATE TRIGGER
Sentencias 855
CREATE TRIGGER
tenga los privilegios necesarios para crear el activador seguro. Una vez creado el
activador, revocarán la autorización CREATE_SECURE_OBJECT al propietario
del activador.
El activador se considera seguro. El gestor de bases de datos considera el
atributo SECURED como una aserción que declara que el usuario ha establecido
un procedimiento de auditoría para todas las actividades del cuerpo del
activador. Si un activador seguro hace referencia a funciones definidas por el
usuario, el gestor de base de datos presupone que esas funciones son seguras sin
validación. Si esas funciones pueden acceder a datos confidenciales, el usuario
con autorización SECADM tiene que asegurarse de que dichas funciones puedan
acceder a los datos y de que todas las sentencias ALTER FUNCTION posteriores
o los cambios en los paquetes externos sean revisados por este proceso de
auditoría.
Un activador debe ser seguro si su tabla sujeto tiene el control de acceso de
nivel de fila o columna activado. Asimismo, un activador debe ser seguro si su
tabla sujeto es una vista y una o más de las tablas subyacentes de esa definición
de vista tiene el control de acceso de nivel de fila o columna activado.
v Creación de un activador con la opción NOT SECURED: la sentencia CREATE
TRIGGER devuelve un error si la tabla sujeto del activador tiene el control de
acceso de nivel de fila o columna activado. Asimismo, la sentencia CREATE
TRIGGER falla si el activador está definido en una vista y una o más de las
tablas subyacentes de esa definición de vista tiene el control de acceso de nivel
de fila o columna activado.
v Control de acceso a filas y columnas que no se implanta para las variables de
transición y las tablas de transición: los activadores se utilizan para la
integridad de la base de datos y, de este modo, se hace necesario el equilibrio
entre la seguridad y la integridad de la base de datos. Si el control de acceso de
nivel de fila o columna se activa en la tabla sujeto o una tabla subyacente de la
vista sujeto, no se aplican los permisos de fila ni las máscaras de columna a los
valores iniciales de las variables de transición y las tablas de transición. El
control de acceso de nivel de fila y columna que se implanta para la tabla sujeto
o una tabla subyacente de la vista sujeto también se ignora para las variables de
transición y las tablas de transición a las que se hace referencia en el cuerpo del
activador o que se pasan como argumentos a las funciones definidas por el
usuario que se invocan en el cuerpo del activador. Para que no exista ningún
contratiempo de seguridad para las sentencias de SQL en la acción que el
activador realiza para acceder a datos confidenciales en las variables de
transición y las tablas de transición, el activador debe crearse con la opción
SECURED. Si un activador no es seguro, la sentencia CREATE TRIGGER
devuelve un error.
v Consideraciones para columnas ocultas implícitamente: existe una variable de
transición para cualquier columna definida como implícitamente oculta. En el
cuerpo de un activador, se puede hacer referencia a una variable de transición
que se corresponda con una columna oculta implícitamente.
Ejemplos
v Ejemplo 1: cree dos activadores que den como resultado un seguimiento
automático del número de empleados que gestiona una empresa. Los activadores
interactuarán con las tablas siguientes:
– La tabla EMPLOYEE con estas columnas: ID, NAME, ADDRESS y POSITION.
– La tabla COMPANY_STATS con estas columnas: NBEMP, NBPRODUCT y
REVENUE.
Sentencias 857
CREATE TRIGGER
Invocación
Autorización
Sintaxis
,
(1)
( ADDRESS valor-dirección ) ?
WITH ENCRYPTION valor-cifrado
(2)
ENCRYPTION valor-cifrado
?
,
WITHOUT AUTHENTICATION
WITH USE FOR nombre-autoriz
ROLE nombre-rol WITH AUTHENTICATION
PUBLIC
Notas:
1 Cada combinación de un nombre de atributo y su valor correspondiente, en
forma de par, debe ser exclusiva (SQLSTATE 4274D).
2 ENCRYPTION no se puede especificar más de una vez (SQLSTATE 42614);
sin embargo, WITH ENCRYPTION puede especificarse para cada una de las
veces que se especifique ADDRESS.
Descripción
nombre-contexto
Da nombre al contexto fiable. Este nombre consta de una sola parte. Se trata de
un identificador de SQL (ordinario o delimitado). El nombre no debe
identificar un contexto fiable que ya exista en el servidor actual (SQLSTATE
42710). El nombre no debe empezar por los caracteres 'SYS' (SQLSTATE 42939).
Sentencias 861
CREATE TRUSTED CONTEXT
Sentencias 863
CREATE TRUSTED CONTEXT
Normas
v Una sentencia de SQL exclusiva del contexto fiable debe ir después de una
sentencia COMMIT o ROLLBACK (SQLSTATE 5U021). Las sentencias de SQL
exclusivas del contexto fiable son:
– CREATE TRUSTED CONTEXT, ALTER TRUSTED CONTEXT o DROP
(TRUSTED CONTEXT)
v Una sentencia de SQL exclusiva del contexto fiable no puede emitirse en una
transacción global; por ejemplo, una transacción XA o una transacción global
que se inicie como parte de una confirmación en dos fases para las transacciones
federadas (SQLSTATE 51041).
Notas
v Al proporcionar una dirección IP como parte de una definición de contexto
fiable, la dirección debe estar en el formato que esté vigente para la red. Por
ejemplo, proporcionar una dirección en un formato IPv6 cuando la red sea IPv4
no dará como resultado una coincidencia. En un entorno mixto, resulta ventajoso
especificar las representaciones IPv4 e IPv6 de la dirección, o mejor aún,
especificar un nombre de dominio seguro (por ejemplo, corona.torolab.ibm.com),
que oculta los detalles de formato de dirección.
v Especificar un rol en la definición de un contexto fiable: La definición de un
contexto fiable puede designar un rol para un ID de autorización específico y un
rol por omisión a utilizar para los ID de autorización para los que no se haya
Sentencias 865
CREATE TRUSTED CONTEXT
especificado un rol específico en la definición del contexto fiable. Este rol puede
utilizarse con una conexión fiable basada en el contexto fiable, pero no hará que
el rol esté disponible fuera de una conexión fiable basada en el contexto fiable.
v Al emitir una sentencia de SQL de lenguaje de manipulación de datos (DML)
que utilice una conexión fiable, se tomarán en consideración los privilegios que
mantenga un rol asignado por el contexto vigentes para el ID de autorización en
la definición del contexto fiable asociado, además de otros privilegios que
mantenga directamente el ID de autorización de la sentencia, u otros roles que
mantenga indirectamente el ID de autorización de la sentencia.
v No se tomarán en consideración, para las sentencias de SQL de lenguaje de
definición de datos (DDL), los privilegios que mantenga un rol asignado por el
contexto vigentes para el ID de autorización en la definición del contexto fiable
asociado. Por ejemplo, para crear un objeto, el ID de autorización de la sentencia
debe poder efectuar dicha acción sin incluir los privilegios que mantenga el rol
asignado por el contexto.
v Al instalar una aplicación nueva que autentifique en DB2 utilizando las mismas
credenciales que una aplicación existente en la misma máquina y que saque
partido de un contexto fiable, es posible que la aplicación nueva también saque
partido del mismo objeto de contexto fiable (por ejemplo, heredando el rol de
contexto fiable). Es posible que no sea esta la intención del administrador de
seguridad. Es posible que el administrador de seguridad desee activar el recurso
de auditoría de DB2 para averiguar que aplicaciones están sacando partido de
los objetos de contexto fiable.
v Sólo se permite una sentencia de SQL exclusiva del contexto fiable sin confirmar
a la vez entre todas las particiones de la base de datos. Si se ejecuta una
sentencia de SQL exclusiva del contexto fiable sin confirmar, las siguientes
sentencias de SQL exclusivas del contexto fiable esperarán hasta que se confirme
o retrotraiga la sentencia de SQL exclusiva del contexto fiable actual.
v Los cambios se graban en el catálogo del sistema, pero no surten efecto hasta
que se confirmen, incluso para la conexión que emite la sentencia.
Ejemplos
v Ejemplo 1: Cree una conexión fiable tal que el usuario actual de una conexión
fiable basada en este contexto fiable pueda conmutarse a dos ID de usuario
diferentes. Cuando el usuario actual de la conexión se conmuta al ID de usuario
JOE, no se requiere la autentificación. Sin embargo, la autentificación se requiere
cuando el usuario actual de la conexión se conmuta al ID de usuario BOB. Tenga
en cuenta que el contexto fiable tiene un rol por omisión llamado rol-contexto.
Esto implica que los usuarios que trabajen dentro de los confines de este
contexto fiable heredarán los privilegios asociados con el rol rol-contexto.
CREATE TRUSTED CONTEXT APPSERVER
BASED UPON CONNECTION USING SYSTEM AUTHID WRJAIBI
DEFAULT ROLE CONTEXT_ROLE
ENABLE
ATTRIBUTES (ADDRESS ’9.26.113.204’)
WITH USE FOR JOE WITHOUT AUTHENTICATION
BOB WITH AUTHENTICATION
v Ejemplo 2: Cree una conexión fiable tal que el usuario actual de una conexión
fiable basada en este contexto fiable pueda conmutarse a cualquier ID de usuario
sin autentificación.
CREATE TRUSTED CONTEXT SECUREROLE
BASED UPON CONNECTION USING SYSTEM AUTHID PBIRD
ENABLE
ATTRIBUTES (ADDRESS ’9.26.113.204’)
WITH USE FOR PUBLIC WITHOUT AUTHENTICATION
v Ejemplo 3: Cree una conexión fiable tal que el usuario actual de una conexión
fiable basada en este contexto fiable pueda conmutarse a cualquier ID de usuario
sin autentificación. La diferencia entre este contexto fiable y el contexto fiable
creado en el ejemplo 2, es que este contexto fiable tiene un atributo adicional
llamado ENCRYPTION. El valor del atributo ENCRYPTION para el contexto
fiable SECUREROLEENCRYPT indica que el valor de cifrado que utilice una
conexión debe tener como mínimo un "cifrado bajo" (consulte la Tabla 27 en la
página 864) para coincidir con este atributo de contexto fiable.
CREATE TRUSTED CONTEXT SECUREROLEENCRYPT
BASED UPON CONNECTION USING SYSTEM AUTHID SHARPER
ENABLE
ATTRIBUTES (ADDRESS ’9.26.113.204’
ENCRYPTION ’LOW’)
WITH USE FOR PUBLIC WITHOUT AUTHENTICATION
v Ejemplo 4: Cree un contexto fiable tal que las conexiones efectuadas por el
usuario WRJAIBI desde las direcciones 9.26.146.201 y 9.26.146.203 resulten fiables
cuando no se utilice ningún cifrado, pero en el que una conexión efectuada por
el usuario WRJAIBI desde la dirección 9.26.146.202 requiera un nivel de cifrado
LOW para resultar fiable.
CREATE TRUSTED CONTEXT WALIDLOCSENSITIVE
BASED UPON CONNECTION USING SYSTEM AUTHID WRJAIBI
ENABLE
ATTRIBUTES (ADDRESS ’9.26.146.201’,
ADDRESS ’9.26.146.202’ WITH ENCRYPTION ’LOW’,
ADDRESS ’9.26.146.203’
ENCRYPTION ’NONE’)
Sentencias 867
CREATE TYPE
CREATE TYPE
La sentencia CREATE TYPE define un tipo de datos definido por el usuario en el
servidor actual.
Invocación
Autorización
Sintaxis
CREATE TYPE nombre-tipo AS tipo-datos ARRAY [
OR REPLACE
2147483647
]
constante-entero
tipo-datos-2
tipo-datos:
tipo-incorporado
tipo-datos-anclados
nombre-tipo-fila
nombre-tipo-matriz
tipo-datos-2:
INTEGER
INT
VARCHAR ( entero )
CHARACTER VARYING
CHAR
tipo-datos-no-fila-anclados
tipo-datos-anclados:
Sentencias 869
CREATE TYPE (matriz)
DATA TYPE TO
ANCHOR nombre-variable
nombre-tabla.nombre-columna
OF
ROW nombre-tabla
nombre-vista
nombre-variable-cursor
tipo-incorporado:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(1 BYTE)
CHARACTER
CHAR BYTE FOR BIT DATA
(entero )
BYTE
VARCHAR (entero )
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1)
NCHAR
NATIONAL CHAR (entero)
CHARACTER
NVARCHAR (entero)
NCHAR VARYING
NATIONAL CHAR VARYING
CHARACTER
(1M)
NCLOB
NCHAR LARGE OBJECT (entero )
NATIONAL CHARACTER LARGE OBJECT K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
(6)
TIMESTAMP
(entero)
BOOLEAN
tipo-datos-no-fila-anclados:
Sentencias 871
CREATE TYPE (matriz)
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
designar 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 BOOLEAN, BINARY 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 compuesto de dos partes nombre-tipo, 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. Los campos
de cada elemento de matriz son los campos del tipo de fila. 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
Sentencias 873
CREATE TYPE (matriz)
Normas
v Utilización de tipos de datos anclados: Un tipo de datos anclado no puede
hacer referencia a (SQLSTATE 428HS): un apodo, una tabla con tipo, una vista
con tipo, 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
v 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 procedimiento Java (sólo matrices comunes no anidadas)
– El tipo de retorno de una función de SQL
– Una variable global
v 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 2: Cree un tipo de matriz denominado NUMBERS con valor por omisión
número de elementos en el esquema GENERIC.
CREATE TYPE GENERIC.NUMBERS AS DECFLOAT(34)
ARRAY[]
Ejemplo 4: Cree un tipo de matriz asociativa donde los índices son nombres de
provincias, territorios o países y los elementos son capitales:
CREATE TYPE CAPITALSARRAY AS VARCHAR(30) ARRAY[VARCHAR(20)]
Sentencias 875
CREATE TYPE (cursor)
Invocación
Autorización
Sintaxis
tipo-datos-fila-anclados:
DATA TYPE TO
ANCHOR nombre-variable
OF
ROW nombre-tabla
nombre-vista
nombre-variable-cursor
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 BOOLEAN, BINARY o VARBINARY
(SQLSTATE 42918).
Normas
v Utilización de tipos de datos anclados: Un tipo de datos anclado no puede
hacer referencia a (SQLSTATE 428HS): un apodo, una tabla con tipo, una vista
con tipo, una tabla temporal declarada, una definición de fila asociada con un
Sentencias 877
CREATE TYPE (cursor)
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
v Uso del tipo de cursor: el tipo de cursor solo 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
– El tipo de retorno de una función de SQL
– Una variable global
v Una variable o un parámetro definido con un tipo de cursor sólo se puede
utilizar en sentencias de SQL compuesto (compilado)
v Una variable o un parámetro que tiene un tipo de cursor de tipo firme no se
debe utilizar para asignar valores de cursor basados en un nombre-sentencia, en
lugar de en una sentencia-select
v Un tipo de cursor definido por el usuario con un tipo de fila asociado es un tipo
de cursor de tipo firme; de lo contrario, es un tipo de cursor de tipo no firme.
Ejemplos
v Ejemplo 1: Crear un tipo de cursor que pueda utilizarse con cualquier cursor.
CREATE TYPE EMPCURSOR AS CURSOR
v Ejemplo 2: Crear un tipo de cursor con tipo firme que esté basado en el tipo de
datos de fila DEPTROW:
CREATE TYPE DEPTCURSOR AS DEPTROW CURSOR
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 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
Sintaxis
tipo-datos-fuente
WITH COMPARISONS
tipo-datos-fuente:
tipo-incorporado
tipo-datos-anclados
tipo-incorporado:
Sentencias 879
CREATE TYPE (diferenciado)
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(34)
DECFLOAT
(16)
(1 BYTE)
CHARACTER
CHAR BYTE FOR BIT DATA
(entero )
VARCHAR (entero)
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1)
NCHAR
NATIONAL CHAR (entero)
CHARACTER
NVARCHAR (entero)
NCHAR VARYING
NATIONAL CHAR VARYING
CHARACTER
(1M)
NCLOB
NCHAR LARGE OBJECT (entero )
NATIONAL CHARACTER LARGE OBJECT K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
tipo-datos-anclados:
ANCHOR nombre-variable
DATA TYPE TO nombre-tabla.nombre-columna
Descripción
nombre-tipo-diferenciado
Indica el nombre del tipo diferenciado. 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 no
calificado no debe ser el mismo que el nombre de un tipo de datos
incorporado ni BOOLEAN, BINARY o VARBINARY (SQLSTATE 42918). El
nombre no calificado tampoco debe ser ARRAY, INTERVAL ni ROWID.
En las sentencias de SQL dinámico, el registro especial CURRENT SCHEMA se
utiliza como calificador para un nombre de objeto no calificado. En sentencias
de SQL estático, la opción de precompilación/vinculación QUALIFIER
especifica de forma implícita el calificador para los nombres de objeto no
calificados. La forma calificada es un nombre-esquema seguido de un punto y un
identificador de SQL.
Algunos nombres que se utilizan como palabras clave en los predicados están
reservados para que los utilice el sistema y no se pueden utilizar como
nombre-tipo-diferenciado (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-diferenciado de dos partes, el nombre de esquema
no puede empezar por los caracteres 'SYS' (SQLSTATE 42939).
tipo-datos-fuente
Especifica el tipo de datos utilizado como base para la representación interna
del tipo diferenciado. El tipo de datos debe ser un tipo de datos incorporado.
Para obtener más información sobre los tipos de datos incorporados, consulte
la sección “CREATE TABLE”. El tipo de datos fuente no puede ser de tipo
XML o un tipo ARRAY (SQLSTATE 42601). Para la portabilidad de las
aplicaciones entre plataformas, utilice los siguientes nombres de tipos de datos
recomendados:
v DOUBLE o REAL en lugar de FLOAT
v DECIMAL en lugar de NUMERIC
v VARCHAR, BLOB o CLOB en lugar de LONG VARCHAR
v VARGRAPHIC o DBCLOB en lugar de LONG VARGRAPHIC
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.
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
interno distinto de ROW o CURSOR. El tipo de datos de la variable
global se utiliza como tipo de datos fuente para el tipo diferenciado.
Sentencias 881
CREATE TYPE (diferenciado)
nombre-tabla.nombre-columna
Identifica un nombre de columna de una tabla o vista existente con un
tipo de datos que debe especificarse como tipo-incorporado. El tipo de
datos de la columna se utiliza como tipo de datos fuente para el tipo
diferenciado.
WITH COMPARISONS
Especifica que se deben crear los operadores de comparación generados por el
sistema para comparar dos instancias de un tipo diferenciado. Estas palabras
clave no deben especificarse si el tipo-datos-fuente es BLOB, CLOB o
DBCLOB,; de lo contrario, se devolverá un aviso (SQLSTATE 01596) y no se
generarán los operadores de comparación. Para todos los demás
tipos-datos-fuente, las palabras clave WITH COMPARISONS son opcionales,
aunque los operadores de comparación generados por el sistema se crearán
incluso si la cláusula WITH COMPARISONS no se ha especificado.
Normas
v Utilización de tipos de datos anclados: Un tipo de datos anclado no puede
hacer referencia a (SQLSTATE 428HS): un apodo, una tabla con tipo, una vista
con tipo, 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
v Privilegios: el definidor del tipo definido por el usuario siempre recibe el
privilegio WITH GRANT OPTION de EXECUTE en todas las funciones
generadas automáticamente por el tipo diferenciado.
El privilegio EXECUTE sobre todas las funciones generadas automáticamente
durante la sentencia CREATE TYPE (diferenciado) se otorga a PUBLIC.
v La creación de un tipo diferenciado 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.
v Se generan las funciones siguientes para convertir el tipo de datos utilizando el
tipo de fuente como fuente o destino de la conversión:
– Una función para convertir del tipo diferenciado al tipo de fuente
– Una función para convertir del tipo de fuente al tipo diferenciado
– Una función para convertir de INTEGER al tipo diferenciado si el tipo de
fuente es SMALLINT
– Una función para convertir de VARCHAR al tipo diferenciado si el tipo de
fuente es CHAR
– Una función para convertir de VARGRAPHIC al tipo diferenciado si el tipo
de fuente es GRAPHIC.
En general estas funciones tendrán el siguiente formato:
CREATE FUNCTION nombre-tipo-fuente (nombre-tipo-diferenciado)
RETURNS nombre-tipo-fuente ...
Tabla 28). El tipo del valor de retorno de esta función incluirá los parámetros
dados en la sentencia CREATE TYPE (diferenciado). La función para convertir
del tipo de fuente al tipo diferenciado tendrá un parámetro de entrada cuyo tipo
es el tipo de fuente incluyendo sus parámetros. Por ejemplo,
CREATE TYPE T_SHOESIZE AS CHAR(2)
WITH COMPARISONS
Sentencias 883
CREATE TYPE (diferenciado)
Las funciones descritas en la tabla anterior son las únicas funciones que se
generan automáticamente cuando se definen los tipos diferenciados. Como
consecuencia, no se da soporte a ninguna de las funciones incorporadas (AVG,
MAX, LENGTH, etcétera) en los tipos diferenciados hasta que se utiliza la
sentencia CREATE FUNCTION para registrar las funciones definidas por el
usuario para el tipo diferenciado y esas funciones definidas por el usuario deben
tener su fuente en las funciones incorporadas adecuadas. En particular, observe
que es posible registrar funciones definidas por el usuario que tienen su fuente
en funciones de columna incorporadas.
Cuando se crea un tipo diferenciado utilizando la cláusula WITH
COMPARISONS, se crean operadores de comparación generados por el sistema.
La creación de esos operadores de comparación generará entradas en la vista de
catálogo SYSCAT.ROUTINES de las nuevas funciones.
Ejemplos
v Ejemplo 1: Cree un tipo diferenciado llamado SHOESIZE que se base en un tipo
de datos INTEGER.
CREATE TYPE SHOESIZE AS INTEGER WITH COMPARISONS
Esto también dará como resultado la creación de operadores de comparación (=,
<>, <, <=, >, >=) y que la función de conversión INTEGER(SHOESIZE) devuelva
INTEGER y la función de conversión SHOESIZE(INTEGER) devuelva
SHOESIZE.
v Ejemplo 2: Cree un tipo diferenciado llamado MILES que se base en un tipo de
datos DOUBLE.
CREATE TYPE MILES AS DOUBLE WITH COMPARISONS
Esto también dará como resultado la creación de operadores de comparación (=,
<>, <, =, >, >=) y que la función de conversión DOUBLE(MILES) devuelva
DOUBLE y la función de conversión MILES(DOUBLE) devuelva MILES.
Sentencias 885
CREATE TYPE (fila)
Invocación
Autorización
Sintaxis
CREATE TYPE nombre-tipo AS ROW
OR REPLACE
( definición-campo )
tipo-datos-fila-anclados
definición-campo:
nombre-campo tipo-datos
tipo-datos:
tipo-incorporado
tipo-datos-no-fila-anclados
tipo-datos-fila-anclados
nombre-tipo-fila
nombre-tipo-matriz
nombre-tipo-diferenciado
tipo-incorporado:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(34)
DECFLOAT
(16)
(1 BYTE)
CHARACTER
CHAR BYTE FOR BIT DATA
(entero )
BYTE
VARCHAR (entero )
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1)
NCHAR
NATIONAL CHAR (entero)
CHARACTER
NVARCHAR (entero)
NCHAR VARYING
NATIONAL CHAR VARYING
CHARACTER
(1M)
NCLOB
NCHAR LARGE OBJECT (entero )
NATIONAL CHARACTER LARGE OBJECT K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
(6)
TIMESTAMP
(entero)
BOOLEAN
Sentencias 887
CREATE TYPE (fila)
tipo-datos-no-fila-anclados:
DATA TYPE TO
ANCHOR nombre-variable
nombre-tabla.nombre-columna
tipo-datos-fila-anclados:
DATA TYPE TO
ANCHOR nombre-variable
OF
ROW nombre-tabla
nombre-vista
nombre-variable-cursor
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, estructurado, de matriz, fila o
diferenciado) que ya se describa en el catálogo. El nombre sin calificar no debe
ser el mismo que un tipo de datos incorporado o BOOLEAN (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 'SYS'; de lo contrario, se devuelve un error (SQLSTATE
42939).
definición-campo
Define los campos del tipo de fila.
nombre-campo
Especifica el nombre de un campo dentro del tipo de fila. El nombre no
puede ser el mismo que el de cualquier otro campo de este tipo de fila
(SQLSTATE 42711).
tipo-datos
Especifica el tipo de datos del campo.
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
Sentencias 889
CREATE TYPE (fila)
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 objetos siguientes (SQLSTATE
428HS):
v Una variable global con un tipo de datos de cursor de tipo firme.
v Una variable global con un tipo de datos de cursor de tipo no firme
que se creó o declaró con una cláusula CONSTANT especificando
una sentencia-select en la que todas las columnas de resultados tienen
nombre.
Normas
v Utilización de tipos de datos anclados: Un tipo de datos anclado no puede
hacer referencia a (SQLSTATE 428HS): un apodo, una tabla con tipo, una vista
con tipo, 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
v Uso del tipo de fila: el tipo de fila solo 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
– El tipo de retorno de una función de SQL
– El elemento de un tipo de matriz
– Un tipo de cursor definido por el usuario
– Una variable global
v Una variable o un parámetro definido con un tipo de fila sólo se puede utilizar
en sentencias de SQL compuesto (compilado)
Ejemplo
v Crear un tipo de fila según las columnas de la tabla DEPARTMENT.
CREATE TYPE DEPTROW AS ROW (DEPTNO VARCHAR(3),
DEPTNAME VARCHAR(29),
MGRNO CHAR(6),
ADMRDEPT CHAR(3),
LOCATION CHAR(16))
Un tipo estructurado definido por el usuario puede incluir cero o más atributos.
Un tipo estructurado puede ser un subtipo que permita que los atributos se
hereden de un supertipo. La ejecución satisfactoria de la sentencia genera métodos
para recuperar y actualizar valores de atributos. La ejecución satisfactoria de la
sentencia también genera funciones para crear instancias de un tipo estructurado
usado en una columna, convertir entre el tipo de referencia y su tipo de
representación, y para dar soporte a los operadores de comparación (=, <>, <, <=,
> y >=) para el tipo de referencia.
Invocación
Autorización
Sintaxis
CREATE TYPE nombre-tipo
UNDER nombre-supertipo
INSTANTIABLE
? ?
, NOT INSTANTIABLE
AS ( definición-atributo )
Sentencias 891
CREATE TYPE (estructurado)
MODE DB2SQL ? ?
WITH FUNCTION ACCESS REF USING tipo-rep
? ?
CAST (SOURCE AS REF) WITH nombrefunc1
?
CAST (REF AS SOURCE) WITH nombrefunc2
,
especificación-método
definición-atributo:
nombre-atributo tipo-datos
opciones-lob
tipo-rep:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(34)
DECFLOAT
(16)
(1)
CHARACTER
CHAR (entero) FOR BIT DATA
VARCHAR (entero)
CHARACTER VARYING
CHAR
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
especificación-método:
METHOD nombre-método
OVERRIDING
( ) ? RETURNS
,
tipo2-datos
nombre-parámetro AS LOCATOR
tipo-datos3 ?
AS LOCATOR
tipo-datos4 CAST FROM tipo-datos5
AS LOCATOR
? ?
SPECIFIC nombre-específico SELF AS RESULT
características-rutina-SQL
?
características-rutina-externa
características-rutina-SQL:
LANGUAGE SQL
? ? ?
PARAMETER CCSID ASCII
UNICODE
características-rutina-externa:
NOT DETERMINISTIC
? ?
PARAMETER CCSID ASCII DETERMINISTIC
UNICODE
Sentencias 893
CREATE TYPE (estructurado)
Descripción
nombre-tipo
Indica el tipo. El nombre, incluido el calificador implícito o explícito, no debe
identificar ningún otro tipo (incorporado, estructurado o diferenciado) que ya
exista en el servidor actual. El nombre no calificado no debe ser el mismo que
el nombre de un tipo de datos incorporado, BINARY, VARBINARY o
BOOLEAN (SQLSTATE 42918). El nombre no calificado tampoco debe ser
ARRAY, INTERVAL ni ROWID. En las sentencias de SQL dinámico, el registro
especial CURRENT SCHEMA se utiliza como calificador para un nombre de
objeto no calificado. En las sentencias de SQL estático, la opción de
precompilación o de vinculación QUALIFIER especifica implícitamente el
calificador para nombres de objeto no calificados.
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 compuesto de dos partes nombre-tipo, el nombre de
esquema no puede empezar por los caracteres 'SYS' (SQLSTATE 42939).
UNDER nombre-supertipo
Especifica que este tipo estructurado es un subtipo por debajo del
nombre-supertipo especificado. El nombre-supertipo debe identificar un tipo
estructurado existente (SQLSTATE 42704). Si nombre-supertipo está especificado
sin un nombre de esquema, el tipo se resuelve realizando una búsqueda en los
esquemas de la vía de acceso de SQL. El tipo estructurado incluye todos los
atributos del supertipo seguidos de los atributos adicionales que se
proporcionan en la definición-atributo.
definición-atributo
Define los atributos del tipo estructurado.
nombre-atributo
El nombre de un atributo. El nombre-atributo no puede ser el mismo que el
de otro atributo de este tipo estructurado o un supertipo de este tipo
estructurado (SQLSTATE 42711).
Algunos nombres que se utilizan como palabras clave en los predicados
están reservados para que los utilice el sistema y no pueden utilizarse
como un nombre-atributo (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.
894 Consulta de SQL - Volumen 2
CREATE TYPE (estructurado)
tipo-datos
El tipo de datos del atributo. Es uno de los tipos de datos que se listan en
“CREATE TABLE”, que no sean XML (SQLSTATE 42601). El tipo de datos
debe identificar un tipo de datos existente (SQLSTATE 42704). Si tipo-datos
está especificado sin un nombre de esquema, el tipo se resuelve realizando
una búsqueda en los esquemas de la vía de acceso de SQL. Encontrará la
descripción de diversos tipos de datos en “CREATE TABLE”. Si el tipo de
datos del atributo es un tipo de referencia, el tipo destino de la referencia
debe ser un tipo estructurado existente o se crea mediante esta sentencia
(SQLSTATE 42704).
Para evitar las definiciones de tipo que, durante la ejecución, permitirían
que una instancia del tipo contuviera directa o indirectamente otra
instancia del mismo tipo o uno de sus subtipos, un tipo no puede definirse
de forma que uno de sus tipos de atributo haga uso de sí mismo directa o
indirectamente (SQLSTATE 428EP).
opciones-lob
Especifica las opciones asociadas a tipos LOB (o tipos diferenciados
basados en tipos LOB). Para obtener una descripción detallada de
opciones-lob, consulte “CREATE TABLE”.
INSTANTIABLE o NOT INSTANTIABLE
Determina si se puede crear una instancia del tipo estructurado. El no poder
crear una instancia de un tipo estructurado tiene estas consecuencias:
v no se genera ninguna función constructora para un tipo para el que no se
pueden crear instancias
v el tipo que no admite creación de instancias no puede utilizarse como tipo
de una tabla o vista (SQLSTATE 428DP)
v el tipo que no admite creación de instancias se puede utilizar como tipo de
una columna (sólo pueden insertarse en la columna valores nulos o
instancias de subtipos que permiten la creación de instancias.
Para crear instancias de un tipo que no permite crear instancias, se deben crear
subtipos que permiten crear instancias. Si se especifica NOT INSTANTIABLE,
no se puede crear ninguna instancia del nuevo tipo.
INLINE LENGTH entero
Esta opción indica el tamaño máximo, en bytes, de una instancia de columna
de tipo estructurado para su almacenamiento "inline" con el resto de valores de
la fila de una tabla. Las instancias de un tipo estructurado o de sus subtipos
que son mayores que la longitud "inline" especificada se almacenan
separadamente de la fila de la tabla base, de forma similar a como se manejan
los valores LOB.
Si el valor especificado de INLINE LENGTH es menor que el tamaño del
resultado de la función constructora para el tipo recién creado (32 bytes más 10
bytes por atributo) y menor que 292 bytes, se produce un error (SQLSTATE
429B2). Observe que el número de atributos incluye todos los atributos
heredados a partir del supertipo del tipo.
El valor INLINE LENGTH del tipo, ya sea especificado explícitamente o
tomado por omisión, es la longitud "inline" por omisión de las columnas que
hacen uso del tipo estructurado. Este valor por omisión se puede alterar
temporalmente por otro valor al crear la tabla.
El valor INLINE LENGTH no es aplicable cuando el tipo estructurado se
utiliza como tipo de una tabla con tipo.
Sentencias 895
CREATE TYPE (estructurado)
Tabla 30. Tamaño del descriptor LOB como una función de la longitud máxima LOB
Longitud máxima de LOB Tamaño del descriptor de LOB
1024 68
8192 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
WITHOUT COMPARISONS
Indica que no se da soporte a funciones de comparación para las instancias del
tipo estructurado.
NOT FINAL
Indica que el tipo estructurado puede utilizarse como supertipo.
MODE DB2SQL
Esta cláusula es obligatoria y permite la invocación directa de la función
constructora para el tipo.
WITH FUNCTION ACCESS
Indica que todos los métodos del tipo y de sus subtipos, incluidos los métodos
que se creen en el futuro, se pueden acceder utilizando la notación funcional.
Esta cláusula sólo puede especificarse para el tipo raíz de una jerarquía de
tipos estructurados (la cláusula UNDER no se especifica) (SQLSTATE 42613).
Esta cláusula se proporciona para permitir el uso de la notación funcional para
aquellas aplicaciones que prefieren esta forma de notación respecto a la
notación de invocación de método.
REF USING tipo-rep
Define el tipo de datos incorporado utilizados como representación (tipo de
datos subyacente) para el tipo de referencia de este tipo estructurado y de
todos sus subtipos. Esta cláusula sólo puede especificarse para el tipo raíz de
una jerarquía de tipos estructurados (la cláusula UNDER no se especifica)
(SQLSTATE 42613). El tipo-rep no puede ser un REAL, FLOAT, DECFLOAT,
BLOB, CLOB, DBCLOB, tipo matriz o tipo estructurado y debe tener una
longitud igual o inferior a 32 672 bytes (SQLSTATE 42613).
Si esta cláusula no se especifica para el tipo raíz de una jerarquía de tipos
estructurados, entonces se supone REF USING VARCHAR(16) FOR BIT DATA.
CAST (SOURCE AS REF) WITH nombrefunc1
Define el nombre de la función, generada por el sistema, que convierte un
valor cuyo tipo de datos es tipo-rep al tipo de referencia de este tipo
estructurado. No debe especificarse un nombre de esquema como parte de
nombrefunc1 (SQLSTATE 42601). La función de conversión se crea en el mismo
esquema que el tipo estructurado. Si no se especifica la cláusula, el valor por
omisión para nombrefunc1 es nombre-tipo (el nombre del tipo estructurado). El
esquema no debe contener ya una signatura de función que coincida con
nombrefunc1(tipo-rep) (SQLSTATE 42710).
Sentencias 897
CREATE TYPE (estructurado)
Sentencias 899
CREATE TYPE (estructurado)
Sentencias 901
CREATE TYPE (estructurado)
v El tipo de retorno declarado debe ser el mismo que el tipo sujeto declarado
(SQLSTATE 428EQ).
v Cuando una sentencia de SQL se compila y su resolución da un tipo
conservador del método, el tipo estático del resultado del método es el
mismo que el tipo estático del argumento sujeto.
v El método debe implementarse de forma que el tipo dinámico del resultado
sea el mismo que el tipo dinámico del argumento sujeto (SQLSTATE 2200G),
y el resultado no puede ser NULL (SQLSTATE 22004).
Si el método que está definiéndose altera temporalmente a otro método, no
podrá especificarse esta cláusula (SQLSTATE 428FV).
características-rutina-SQL
Especifica las características del cuerpo del método que se definirán para este
tipo utilizando CREATE METHOD.
LANGUAGE SQL
Esta cláusula se utiliza para indicar que el método está escrito en SQL
mediante una sola sentencia RETURN. El cuerpo del método se especifica
utilizando la sentencia CREATE METHOD.
PARAMETER CCSID
Especifica el esquema de codificación que se debe utilizar para todos los
datos de serie pasados al método de SQL y desde él. Si no se especifica la
cláusula PARAMETER CCSID, el valor por omisión es PARAMETER
CCSID UNICODE para las bases de datos Unicode y PARAMETER CCSID
ASCII para todas 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 PARAMETER CCSID ASCII (SQLSTATE 56031).
UNICODE
Especifica que los datos de caracteres están en UTF-8, y que los datos
gráficos están en UCS-2. Si la base de datos no es Unicode, no se
puede especificar PARAMETER CCSID UNICODE (SQLSTATE 56031).
NOT DETERMINISTIC o DETERMINISTIC
Esta cláusula opcional especifica si el método siempre devuelve los mismos
resultados para valores de argumento determinados (DETERMINISTIC) o
si el método depende de ciertos valores de estado que afectan a los
resultados (NOT DETERMINISTIC). Es decir, un método DETERMINISTIC
siempre debe devolver el mismo resultado para invocaciones sucesivas con
entradas de datos idénticas. Con la especificación de NOT
DETERMINISTIC, se evitan las optimizaciones que aprovechan el hecho de
que las entradas idénticas siempre producen los mismos resultados. Se
debe especificar NOT DETERMINISTIC, de forma explícita o implícita, si el
cuerpo del método accede a un registro especial, o invoca otra rutina no
determinista (SQLSTATE 428C2).
EXTERNAL ACTION o NO EXTERNAL ACTION
Esta cláusula opcional especifica si el método realiza alguna acción que
cambia el estado de un objeto no gestionado por el gestor de bases de
datos. Para evitar las optimizaciones basadas en que el método no produce
ningún efecto externo, se especifica EXTERNAL ACTION. Por ejemplo:
enviar un mensaje, hacer sonar una alarma o grabar un registro en un
archivo.
Sentencias 903
CREATE TYPE (estructurado)
OLE
Esto significa que el gestor de bases de datos invocará el método
definido por el usuario como si fuera un método expuesto por un
objeto de automatización OLE. El método debe ajustarse a los tipos de
datos de automatización OLE y al mecanismo de invocación, tal como
se describe en la publicación OLE Automation Programmer's Reference.
Sólo se da soporte a LANGUAGE OLE para métodos definidos por el
usuario almacenados en Windows de 32 bits. THREADSAFE no puede
especificarse para los métodos que se han definido con LANGUAGE
OLE (SQLSTATE 42613).
PARAMETER STYLE
Esta cláusula se utiliza para especificar los convenios utilizados para pasar
parámetros al método y obtener el resultado del método.
DB2GENERAL
Se utiliza para especificar las convenciones para pasar parámetros
desde métodos externos y devolver el valor desde estos, que están
definidos como un método en una clase Java. Esto sólo puede
especificarse cuando se utiliza LANGUAGE JAVA.
El valor DB2GENRL puede utilizarse como sinónimo de
DB2GENERAL.
SQL
Se utiliza para especificar los convenios para pasar parámetros a
métodos externos y obtener su resultado; estos métodos cumplen los
convenios de invocación y enlace del lenguaje C o son métodos
expuestos por objetos de automatización OLE. Esta opción debe
especificarse cuando se utiliza LANGUAGE C o LANGUAGE OLE.
PARAMETER CCSID
Especifica el esquema de codificación que se debe utilizar para todos los
datos de serie pasados al método externo y desde él. Si no se especifica la
cláusula PARAMETER CCSID, el valor por omisión es PARAMETER
CCSID UNICODE para las bases de datos Unicode y PARAMETER CCSID
ASCII para todas 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 PARAMETER CCSID ASCII (SQLSTATE 56031).
UNICODE
Especifica que los datos de caracteres están en UTF-8, y que los datos
gráficos están en UCS-2. Si la base de datos no es Unicode, no se
puede especificar PARAMETER CCSID UNICODE (SQLSTATE 56031).
PRECAUCIÓN:
La utilización de NOT FENCED para métodos no probados debidamente
puede comprometer la integridad de una base de datos DB2. Las bases
de datos DB2 toman algunas precauciones ante varios de los tipos
comunes de anomalías inadvertidas que puedan producirse, pero no
pueden garantizar la integridad completa si se utilizan métodos NOT
FENCED definidos por el usuario.
Para un método con LANGUAGE OLE o NOT THREADSAFE, sólo puede
especificarse FENCED (SQLSTATE 42613).
Si el método es FENCED y tiene la opción NO SQL, no puede especificarse
la cláusula AS LOCATOR (SQLSTATE 42613).
Para registrar un método como NOT FENCED, se necesita autorización
SYSADM, autorización DBADM o una autorización especial
(CREATE_NOT_FENCED_ROUTINE).
THREADSAFE o NOT THREADSAFE
Especifica si se considera que el método es “seguro” para ejecutarse en el
mismo proceso que otras rutinas (THREADSAFE) o no (NOT
THREADSAFE).
Si el método se ha definido con un LANGUAGE distinto de OLE:
v Si el método se ha definido como THREADSAFE, el gestor de bases de
datos puede invocar el método en el mismo proceso que otras rutinas.
En general, para ser THREADSAFE, un método no debe utilizar áreas de
datos globales o estáticas. En la mayoría de los manuales de consulta de
programación se incluye una explicación acerca de cómo se escriben las
rutinas THREADSAFE. Los métodos FENCED y NOT FENCED pueden
ser THREADSAFE.
v Si el método se ha definido como NOT THREADSAFE, el gestor de
bases de datos nunca invocará el método en el mismo proceso que otra
rutina.
Para los métodos FENCED, THREADSAFE es el valor por omisión si el
LANGUAGE es JAVA. Para todos los demás lenguajes, NOT
THREADSAFE es el valor por omisión. Si el método se ha definido con
LANGUAGE OLE, THREADSAFE no puede especificarse (SQLSTATE
42613).
Sentencias 905
CREATE TYPE (estructurado)
Sentencias 907
CREATE TYPE (estructurado)
Sentencias 909
CREATE TYPE (estructurado)
Notas
v La creación de un tipo estructurado 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.
v Un subtipo estructurado definido sin atributos define un subtipo que hereda
todos sus atributos de un supertipo. Si no se especifica una cláusula UNDER ni
ningún otro atributo, el tipo es un tipo raíz de una jerarquía de tipos, sin ningún
atributo.
v La adición de un nuevo subtipo a una jerarquía de tipos puede causar la
invalidación de paquetes. Un paquete puede quedar invalidado si depende de
un supertipo del nuevo tipo. Dicha dependencia es el resultado de la utilización
de un predicado TYPE o de una especificación TREAT.
v Un tipo estructurado puede tener 4082 atributos como máximo (SQLSTATE
54050).
v Una especificación de método no puede tener la misma signatura que una
función (cuando se compara el primer tipo-parámetro de la función con el
tipo-sujeto del método).
v Ningún método original puede alterar temporalmente a otro método, o ser
alterado temporalmente por un método original (SQLSTATE 42745). Además, en
una relación de alteración temporal no puede haber una función y un método.
Esto significa que si se ha considerado que la función es un método, siendo su
primer parámetro el sujeto S, no deberá alterar temporalmente a otro método de
ningún supertipo de S y no podrá alterarlo temporalmente otro método de
ningún subtipo de S (SQLSTATE 42745).
v La creación de un tipo estructurado genera automáticamente un conjunto de
funciones y métodos que pueden utilizarse con el tipo. Todas las funciones y
métodos se generan en el mismo esquema que el tipo estructurado. Si la
signatura de la función o método generados entra en conflicto con o altera
temporalmente la signatura de una función existente en este esquema, la
sentencia falla (SQLSTATE 42710). Las funciones o métodos generados no
pueden descartarse sin eliminar el tipo estructurado (SQLSTATE 42917). Se
generan las funciones y métodos siguientes:
– Funciones
- Comparaciones de referencia
Se generan seis funciones de comparación denominadas =, <>, <, <=, >, >=
para el tipo de referencia REF(nombre-tipo). Cada una de estas funciones
toma dos parámetros del tipo REF(nombre-tipo) y devuelve el valor de
verdadero, falso o desconocido. Los operadores de comparación para
REF(nombre-tipo) se han definido para que tengan el mismo
comportamiento que los operadores de comparación para el tipo de datos
subyacente de REF(nombre-tipo). (Todas las referencias de una jerarquía de
tipo tienen el mismo tipo de representación de referencia. Esto permite que
REF(S) y REF(T) puedan compararse, siempre que S y T tengan un
supertipo común. Debido a que la exclusividad de la columna de OID sólo
se aplica dentro de una jerarquía de tablas, es posible que un valor de
REF(T) de una jerarquía de tablas sea "igual" a un valor de REF(T) de otra
jerarquía de tablas, aunque hagan referencia a filas distintas.)
Sentencias 911
CREATE TYPE (estructurado)
Por ejemplo, los atributos de una instancia del tipo estructurado ADDRESS
se pueden observar utilizando C1..STREET, C1..CITY, C1..COUNTRY y
C1..CODE .
La signatura de método del método observador generado es como si la
sentencia siguiente se hubiera ejecutado:
Sentencias 913
CREATE TYPE (estructurado)
Ejemplos
v Ejemplo 1: Cree un tipo para Department.
CREATE TYPE DEPT AS
(DEPT NAME VARCHAR(20),
MAX_EMPS INT)
REF USING INT
MODE DB2SQL
v Ejemplo 2: Cree una jerarquía de tipos compuesta de un tipo para los empleados
y de un subtipo para los directores.
CREATE TYPE EMP AS
(NAME VARCHAR(32),
SERIALNUM INT,
DEPT REF(DEPT),
SALARY DECIMAL(10,2))
MODE DB2SQL
Sentencias 915
CREATE TYPE MAPPING
Una correlación de tipo de datos sólo debe crearse si una correlación existente no
es adecuada.
Invocación
Autorización
Sintaxis
CREATE TYPE MAPPING ?
nombre-correlación-tipos
REMOTE
TO servidor-remoto TYPE tipo-datos-fuente-datos
FROM
FOR BIT DATA
( p )
[p..p] ,s P=S
,[s..s] P>S
P<S
P>=S
P<=S
P<>S
tipo-datos-locales:
tipo-incorporado
tipo-incorporado:
Sentencias 917
CREATE TYPE MAPPING
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(1)
CHARACTER
CHAR (entero) FOR BIT DATA
VARCHAR (entero)
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
XML
servidor-remoto:
SERVER nombre-servidor
SERVER TYPE tipo-servidor
VERSION versión-servidor
WRAPPER nombre-derivador
versión-servidor:
versión
. release
. mod
constante-serie-versión
Notas:
1 En la sentencia CREATE TYPE MAPPING, deberán existir una palabra clave
TO y una palabra clave FROM.
Descripción
nombre-correlación-tipos
Designa la correlación de tipos de datos. El nombre no debe identificar
ninguna correlación de datos que ya esté descrita en el catálogo. Se genera un
nombre exclusivo si no se especifica nombre-correlación-tipos.
FROM o TO
Especifica una correlación de tipos invertida o en avance.
FROM
Especifica una correlación de tipos en avance cuando va seguida del
tipo-datos-local o una correlación de tipos invertida cuando va seguida del
servidor-remoto.
TO Especifica una correlación de datos en avance cuando va seguida del
servidor-remoto o una correlación de tipo de datos invertida cuando va
seguida del tipo-datos-local.
tipo-datos-locales
Identifica un tipo de datos que se define en una base de datos federada. Si se
especifica el tipo-datos-local sin un nombre de esquema, el nombre de tipo se
resuelve buscando los esquemas en la vía de acceso de SQL.
Se pueden utilizar paréntesis vacíos para los tipos de datos con parámetros. Un
tipo de datos con parámetros es cualquiera de los tipos de datos que se puede
definir con una longitud, una escala o una precisión específica. Si se especifican
paréntesis vacíos en una correlación de tipos en avance como, por ejemplo,
CHAR(), la longitud se determina a partir de la longitud de la columna de la
tabla remota. Si se especifican paréntesis vacíos en una correlación de tipo
invertida, la correlación de tipos se aplica al tipo de datos con cualquier
longitud. Si se omiten los paréntesis, se utiliza la longitud por omisión para el
tipo de datos.
FLOAT() no puede utilizarse (SQLSTATE 42601), ya que el valor del parámetro
indica tipos de datos distintos (REAL o DOUBLE). NUMBER() no puede
utilizarse (SQLSTATE 42601), ya que el valor del parámetro indica tipos de
datos distintos (DECFLOAT o DECIMAL).
DECFLOAT puede aceptarse solamente como el tipo-datos-locales por el
derivador Oracle, el derivador DB2 para IBM DB2 Versión 9.5 para Linux,
UNIX y Windows o posterior.
El tipo-datos-locales no puede ser un tipo definido por el usuario (SQLSTATE
42611).
SERVER nombre-servidor
Nombra la fuente de datos para la que se define tipo-datos-fuente-datos.
Sentencias 919
CREATE TYPE MAPPING
[s1..s2]
Sólo para la correlación de tipos en avance. Para un tipo de datos decimal, s1 y
s2 especifican el número mínimo y máximo de dígitos permitidos a la derecha
de la coma decimal. El máximo debe ser igual o superior al mínimo y ambos
números deben ser válidos con respecto al tipo de datos.
P [operando] S
El tipo de datos decimal, P [operando] S especifica una comparación entre la
precisión y el número de dígitos permitidos a la derecha de la coma decimal.
Por ejemplo, el operando = indica que se aplica la correlación de tipos si la
precisión y el número de dígitos permitidos en la fracción decimal son iguales.
FOR BIT DATA
Indica si tipo-datos-fuente-datos es para los datos de bits. Estas palabras clave
son necesarias si la columna del tipo de la fuente de datos contiene valores
binarios. El gestor de bases de datos determinará este atributo si no se
especifica para un tipo de datos de caracteres.
Notas
v Una sentencia CREATE TYPE MAPPING de una unidad de trabajo determinada
(UOW) no se puede procesar (SQLSTATE 55007) bajo ninguna de las condiciones
siguientes:
– La sentencia hace referencia a una única fuente de datos y la UOW ya incluye
uno de los elementos siguientes:
- Una sentencia SELECT que hace referencia a un apodo para una tabla o
vista de esa fuente de datos
- Un cursor abierto en un apodo para una tabla o vista de esa fuente de
datos
- Una sentencia INSERT, DELETE o UPDATE que se ha emitido para un
apodo de una tabla o vista de esta fuente de datos
– La sentencia hace referencia a una categoría de fuentes de datos (por ejemplo,
todas las fuentes de datos de un tipo y versión específicos) y la UOW ya
incluye uno de los elementos siguientes:
- Una sentencia SELECT que hace referencia a un apodo para una tabla o
vista de una de esas fuentes de datos
- Un cursor abierto en un apodo para una tabla o vista de una de esas
fuentes de datos
- Una sentencia INSERT, DELETE o UPDATE que se ha emitido para un
apodo de una tabla o vista de una de esas fuentes de datos
v Cuando se pueden aplicar varias correlaciones de tipos, se utilizará la más
reciente. Puede recuperar la hora de creación para una correlación de tipos
consultando la columna CREATE_TIME de la vista del catálogo
SYSCAT.TYPEMAPPINGS.
Ejemplos
v Ejemplo 1: Cree una correlación de tipos en avance entre el tipo de datos DATE
de Oracle y el tipo de datos SYSIBM.DATE. Para todos los apodos que se creen
después de haber definido esta correlación, las columnas del tipo de datos DATE
de Oracle se correlacionarán con columnas DB2 del tipo de datos DATE.
CREATE TYPE MAPPING MY_ORACLE_DATE
FROM LOCAL TYPE SYSIBM.DATE
TO SERVER TYPE ORACLE
REMOTE TYPE DATE
Sentencias 921
CREATE TYPE MAPPING
Invocación
Autorización
Sintaxis
CREATE USAGE LIST nombre-lista-uso FOR TABLE nombre-objeto
INDEX
Descripción
nombre-lista-uso
Asigna un nombre a la lista de uso. El nombre-lista-uso, incluyendo el
calificador implícito o explícito, no debe identificar una lista de uso descrita en
el catálogo (SQLSTATE 42710). Si la lista de uso está calificada de forma
explícita con un nombre de esquema, éste no debe empezar con los caracteres
'SYS' (SQLSTATE 42939).
TABLE nombre-objeto
Designa la tabla para la cual se ha definido la lista de uso. El nombre-objeto,
incluyendo el calificador implícito o explícito, debe especificar una tabla
definida en el catálogo (SQLSTATE 42704). El nombre no debe especificar alias,
tablas de catálogo, tablas temporales creadas, tablas de jerarquía, tablas
desenlazadas, apodos, tablas con tipo o vistas (SQLSTATE 42809).
INDEX nombre-objeto
Designa el índice para el cual se ha definido la lista de uso. El nombre-objeto,
incluyendo el calificador implícito o explícito, debe especificar un índice
definido en el catálogo (SQLSTATE 42704). Los índices definidos en tablas que
no sean tablas sin tipo o tablas de consulta materializada no se soportan
(SQLSTATE 42809). El nombre debe especificar un índice físico; índices de
bloque (BLOK), índices de clústeres (CLUS), índices de bloque de dimensión
Sentencias 923
CREATE USAGE LIST
(DIM), índices regulares (REG) e índices físicos sobre columna XML (XVIP). El
resto de tipos de índices no se soportan (SQLSTATE 42809).
LIST SIZE valor-entero
Especifica que el tamaño de esta lista son valor-entero entradas. El tamaño
mínimo que se puede especificar es de 10 y el máximo de 5000 (SQLSTATE
428B7). El tamaño por omisión es de 100 entradas.
WHEN FULL
Especifica qué acción ha de realizarse cuando una lista de uso activa se llene.
El valor por omisión es recortar cuando la lista está llena.
WRAP
Especifica que la lista de uso se ajusta y sustituye las entradas mas
antiguas.
DEACTIVATE
Especifica que la lista de uso se desactiva.
INACTIVE ON START DATABASE
Especifica que la lista de uso no está activada para la supervisión siempre que
la base de datos está activada. La colección se debe iniciar de forma explícita
utilizando la sentencia SET USAGE LIST. Esta cláusula es el valor por omisión.
ACTIVE ON START DATABASE
Especifica que la lista de uso se activa automáticamente para la supervisión
siempre que la base de datos está activada.
Notas
v Secciones de rastreo con claves únicas: una lista de uso conserva rastreos de
todas las secciones exclusivas (únicamente sentencias DML) que han
referenciado un objeto concreto. Las referencias se agregan a la lista con una
única clave de ID ejecutable, representando la sección que hace la referencia, y el
ID del intervalo del supervisor en el momento de la referencia. Cada entrada de
la lista mantiene un recuento de las ejecuciones de sección relacionadas con esa
entrada y un conjunto de estadísticas que describe en términos generales el
efecto que ha tenido la sección en el objeto durante esas ejecuciones.
v Hora de publicación de la lista de uso: una lista de uso se establece como
publicada cuando se confirma la sentencia CREATE USAGE LIST.
v Asignación de memoria: la memoria se asigna la primera vez que una sección
hace referencia al objeto para el que se ha definido la lista de uso.
v Asignación de memoria en un entorno de base de datos particionada o un
entorno DB2 pureScale: Si el estado de una lista de uso para una tabla o índice
particionados se establece en activo, la memoria se asigna a cada partición de
datos cuando la sección hace referencia por primera vez a la partición de datos.
De forma similar, en un entorno de base de datos particionada o en un entorno
DB2 pureScale, la memoria se asigna a cada miembro activo. Si un miembro no
está disponible en el momento de la activación, la memoria se asigna cuando el
miembro se vuelve a activar (si el estado de la lista de uso todavía está
establecido en activo). Esto también se aplica cuando se añade un miembro al
clúster.
v Estado de la lista de uso al especificar WHEN FULL DEACTIVATE: si la lista de
uso se ha creado con la cláusula WHEN FULL DEACTIVATE, el estado de la
lista de uso de cada miembro se establece en inactivo de forma independiente.
De forma similar, para las tablas e índices particionados, el estado de la lista de
uso para cada partición de datos se establece en inactivo de forma
independiente.
Ejemplos
v Ejemplo 1: cree una lista de uso USL_ACC para la tabla SAYYID.ACCOUNTS
con un tamaño de lista por omisión de 100 entradas.
CREATE USAGE LIST USL_ACC FOR TABLE SAYYID.ACCOUNTS
v Ejemplo 2: cree una lista de uso USL_SHOPPING_IND para el índice
BIRD.SHOPPINGIND con una lista de 50 entradas que se ajuste cuando la lista
se llene.
CREATE USAGE LIST USL_SHOPPING_IND FOR INDEX BIRD.SHOPPINGIND
LISTSIZE 50
WHEN FULL WRAP
Sentencias 925
CREATE USAGE LIST
Cuando la lista de uso esté desactivada para la supervisión, se asignará una lista
de 500 entradas a cada partición de datos.
v Ejemplo 5: cree una lista de uso USL_PARTS para la tabla SHAKTI.PARTS con un
tamaño de lista de 20 entradas que se activará manualmente cuando se active la
base de datos y se recortará cuando esté llena.
CREATE USAGE LIST USL_PARTS FOR TABLE SHAKTI.PARTS
LIST SIZE 20
INACTIVE ON START DATABASE
WHEN FULL WRAP
Invocación
Autorización
Sintaxis
CREATE USER MAPPING FOR nombre-autorización SERVER nombre-servidor
USER
PUBLIC
Descripción
nombre-autorización
Especifica el nombre de autorización bajo el cual un usuario o una aplicación
se conecta a una base de datos federada. El nombre-autorización se correlaciona
con la opción de correlación de usuarios REMOTE_AUTHID.
USER
El valor del registro especial USER. Cuando se especifica USER, el ID de
autorización que emite la sentencia CREATE USER MAPPING se correlaciona
con la opción de correlación de usuarios REMOTE_AUTHID.
PUBLIC
Especifica que cualquier ID de autorización válido de la base de datos federada
local se correlacione con el ID de autorización de la fuente de datos
especificado en la opción de usuario REMOTE_AUTHID.
SERVER nombre-servidor
Nombra el objeto de servidor para la fuente de datos a la que el
nombre-autorización puede acceder. El nombre-servidor es el nombre local para el
servidor remoto que se ha registrado en la base de datos federada.
Sentencias 927
CREATE USER MAPPING
OPTIONS
Indica las opciones que están habilitadas cuando se crea la correlación de
usuarios.
nombre-opción-correlación-usuario
Especifica el nombre de la opción.
constante-serie
Especifica el valor para el nombre-opción-correlación-usuario como una
constante de serie de caracteres.
Notas
v Las correlaciones de usuarios sólo se necesitan para las siguientes fuentes de
datos: la familia de productos DB2, Documentum, Informix, Microsoft SQL
Server, ODBC, Oracle, Sybase y Teradata.
v Siempre se requiere la opción REMOTE_PASSWORD para una correlación de
usuarios.
v No pueden coexistir en el mismo servidor federado correlaciones de usuarios
públicos y correlaciones de usuarios no públicos. Esto significa que, si ha creado
correlaciones de usuarios públicos, no podrá crear correlaciones de usuarios no
públicos en el mismo servidor federado. Asimismo, si ha creado correlaciones de
usuarios no públicos, no podrá crear correlaciones de usuarios públicos en el
mismo servidor federado.
v Alternativas de sintaxis: se soporta la sintaxis siguiente para mantener la
compatibilidad con versiones anteriores de DB2:
– ADD se puede especificar antes de nombre-opción-correlación-usuarios
constante-serie.
Ejemplos
v Ejemplo 1: Registre una correlación de usuarios para el objeto de servidor de
fuente de datos DB2 para z/OS SERVER390. Correlacione el nombre de
autorización para la base de datos federada local con el ID de usuario y
contraseña para SERVER390. El nombre de autorización es RSPALTEN. El ID de
usuario para SERVER390 es SYSTEM. La contraseña para SERVER390 es
MANAGER.
CREATE USER MAPPING FOR RSPALTEN
SERVER SERVER390
OPTIONS
(REMOTE_AUTHID ’SYSTEM’,
REMOTE_PASSWORD ’MANAGER’)
v Ejemplo 2: Registre una correlación de usuarios para el objeto de servidor de
fuente de datos Oracle ORACLE1. MARCR es el nombre de autorización para la
base de datos federada local y el ID de usuario para ORACLE1. Puesto que el
nombre de autorización y el ID de usuario son iguales, no es necesario
especificar la opción REMOTE_AUTHID en la correlación de usuarios. La
contraseña para MARCR en ORACLE1 es NZXCZY.
CREATE USER MAPPING FOR MARCR
SERVER ORACLE1
OPTIONS
(REMOTE_PASSWORD ’NZXCZY’)
v Ejemplo 3: Cree un derivador de DRDA y un servidor de fuente de datos DB2
para z/OS SERVER390. A continuación, registrar una correlación de usuarios
públicos con el objeto de servidor SERVER390. PUBLIC indica cualquier ID de
autorización válido para la base de datos federada local. El ID de usuario para
SERVER390 es APP_USER. La contraseña para SERVER390 es secret.
Sentencias 929
CREATE VARIABLE
CREATE VARIABLE
La sentencia CREATE VARIABLE define una variable global de sesión.
Invocación
Autorización
Sintaxis
CREATE VARIABLE nombre-variable tipo1-datos
OR REPLACE
tipo-datos1:
tipo-incorporado
tipo-datos-variable-anclados
nombre-tipo-matriz
nombre-tipo-cursor
nombre-tipo-diferenciado
REF (nombre-tipo)
nombre-tipo-fila
tipo-incorporado:
Sentencias 931
CREATE VARIABLE
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(34)
DECFLOAT
(16)
(1)
CHARACTER
CHAR (entero) FOR BIT DATA
VARCHAR (entero)
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
(2)
XML
BOOLEAN
CURSOR
tipo-datos-variable-anclados:
DATA TYPE TO
ANCHOR nombre2-variable
nombre-tabla.nombre-columna
OF
ROW nombre-tabla
nombre-vista
nombre-variable-cursor
constructor-valor-cursor:
ASENSITIVE
CURSOR
INSENSITIVE ,
( declaración-parámetro )
declaración-parámetro:
nombre-parámetro tipo-datos2
tipo-datos-2:
tipo-incorporado
tipo-datos-parámetro-anclado
nombre-tipo-diferenciado
tipo-datos-parámetro-anclado:
DATA TYPE TO
ANCHOR nombre-variable
nombre-tabla.nombre-columna
posibilidad de mantenimiento:
WITHOUT HOLD
WITH HOLD
Notas:
1 Si tipo-datos1 especifica un tipo incorporado CURSOR o un nombre-tipo-cursor,
solamente pueden especificarse NULL o constructor-valor-cursor. Únicamente
se puede especificar DEFAULT NULL explícitamente para el
nombre-tipo-matriz o nombre-tipo-fila.
2 El tipo de datos XML sólo se puede utilizar como tipo de datos de parámetro
en un constructor de valores de cursor.
Descripción
OR REPLACE
Especifica que se debe sustituir la definición de la variable si existe una en el
Sentencias 933
CREATE VARIABLE
Sentencias 935
CREATE VARIABLE
NULL
Especifica NULL como valor por omisión para la variable global. Si se
especifica el nombre-tipo-fila, el valor de la variable global es una fila donde
cada campo tiene el valor nulo.
constante
Especifica el valor de una constante como valor por omisión para la
variable global. Si tipo-datos1 especifica un tipo incorporado CURSOR o un
nombre-tipo-cursor, no puede especificarse la constante (SQLSTATE 42601).
registro-especial
Especifica el valor de un registro especial como valor por omisión para la
variable global. Si tipo1-datos especifica un tipo incorporado CURSOR o un
nombre-tipo-cursor, no se puede especificar el registro-especial (SQLSTATE
42601).
variable-global
Especifica el valor de una variable global como valor por omisión para la
variable global. Si tipo1-datos especifica un tipo incorporado CURSOR o un
nombre-tipo-cursor, no se puede especificar la variable-global (SQLSTATE
42601).
constructor-valor-cursor
Un constructor-valor-cursor especifica la sentencia-select asociada con la
variable global. La asignación de un constructor-valor-cursor a una variable
de cursor define el cursor subyacente de esa variable de cursor.
ASENSITIVE o INSENSITIVE
Especifica si el cursor es sensible o insensible a los cambios. Consulte
“DECLARE CURSOR” para obtener más información. El valor por
omisión es ASENSITIVE.
ASENSITIVE
Especifica que el cursor debe ser todo lo sensible que sea posible
para las operaciones de inserción, actualización o supresión
realizadas en las filas subyacentes de la tabla de resultados, en
función de cómo se haya optimizado sentencia-select. Esta opción es
el valor por omisión.
INSENSITIVE
Especifica que el cursor no debe contar con sensibilidad para las
operaciones de inserción, actualización o supresión que se han
realizado en las filas subyacentes de la tabla de resultados. Si se
especifica INSENSITIVE, el cursor es de sólo lectura y la tabla de
resultados se materializa al abrirse el cursor. Como resultado de
ello, el tamaño de la tabla de resultados, el orden de las filas y los
valores de cada fila no cambian tras abrirse el cursor. La sentencia
SELECT no puede contener una cláusula FOR UPDATE, y el cursor
no puede utilizarse para las actualizaciones o supresiones
posicionadas.
(declaración-parámetro, ...)
Especifica los parámetros de entrada del cursor, incluido el nombre y el
tipo de datos de cada parámetro.
nombre-parámetro
Asigna un nombre al parámetro que se debe utilizar como variable
de SQL dentro de la sentencia-select. El nombre no puede ser igual
que ningún otro nombre de parámetro del cursor. Los nombres
deben elegirse también evitando nombres de columna que se
Sentencias 937
CREATE VARIABLE
expresión
Especifica el valor de una expresión como valor por omisión para la
variable global. La expresión puede ser cualquier expresión del tipo que se
describe en el apartado "Expresiones". La expresión debe ser compatible
con la asignación al tipo de datos de la variable. El tamaño máximo de la
expresión es de 64K. La expresión por omisión no debe modificar datos
SQL (SQLSTATE 428FL) ni realizar acciones externas (SQLSTATE 42845). Si
tipo1-datos especifica un tipo incorporado CURSOR o un nombre-tipo-cursor,
no se puede especificar la expresión (SQLSTATE 42601).
Normas
v Utilización de tipos de datos anclados: Un tipo de datos anclado no puede
hacer referencia a (SQLSTATE 428HS): un apodo, una tabla con tipo, una vista
con tipo, 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
v Las variables globales de sesión tienen un ámbito de sesión. Esto significa que,
aunque están disponibles para todas las sesiones activas en la base de datos, su
valor es privado para cada una de las sesiones.
v Contextos para variables globales de fila, cursor, booleanas y de matriz: las
variables globales que son variables de matriz, variables booleanas o variables
de fila sólo se pueden utilizar en sentencias de SQL compuesto (compilado) o en
sentencias de variable SET. Las variables globales que son variables de cursor
solamente se pueden utilizar en sentencias de SQL compuesto (compilado).
v Creación con errores: si un objeto al que se hace referencia en la expresión por
omisión no existe o se ha marcado como no válido o si el definidor no tiene
temporalmente los privilegios para acceder al objeto, y si el parámetro de
configuración de la base de datos auto_reval no se ha establecido en
DISABLED, la variable seguirá creándose satisfactoriamente. La variable se
marcará como no válida y se volverá a validar la próxima vez que se invoque.
v Ámbito de valores de variable global: Los valores de las variables globales se
mantienen hasta que se actualizan en la sesión actual, hasta que se descarta o
modifica la variable global o hasta que finaliza una sesión de la aplicación. El
valor no se ve afectado por las sentencias COMMIT o ROLLBACK. El valor por
omisión para una variable global puede ser no determinista y dependiente de
cuándo se calcula el valor por omisión para la variable global (por ejemplo, una
referencia a la hora del día o una referencia a algunos datos almacenados en una
tabla).
Una técnica utilizada habitualmente, sobre todo para cuestiones de rendimiento,
es que una aplicación o producto gestione un conjunto de conexiones y
direccione transacciones a una conexión arbitraria. En estas situaciones, el valor
que no sea por omisión de una variable global o el valor por omisión inicial no
determinista para una variable global solamente deberían ser dependientes hasta
que finalice la transacción. Algunos ejemplos de dónde puede producirse este
tipo de situación incluyen aplicaciones que utilicen protocolos XA, usen la
agrupación de conexiones, empleen el concentrador de conexiones y utilicen
HADR para lograr la migración tras error.
v Privilegios para utilizar una variable global: Todo intento de leer o grabar en
una variable global creada mediante esta sentencia requiere que el ID de
Ejemplos
v Ejemplo 1: Cree una variable global de sesión para indicar la impresora que ha
de utilizarse para la sesión.
CREATE VARIABLE MYSCHEMA.MYJOB_PRINTER VARCHAR(30)
DEFAULT ’Impresora por omisión’
v Ejemplo 2: Cree una variable global de sesión para indicar el departamento en el
que trabaja el empleado.
CREATE VARIABLE SCHEMA1.GV_DEPTNO INTEGER
DEFAULT ((SELECT DEPTNO FROM HR.EMPLOYEES
WHERE EMPUSER = SESSION_USER))
v Ejemplo 3: Cree una variable global de sesión para indicar el nivel de seguridad
del usuario actual.
CREATE VARIABLE SCHEMA2.GV_SECURITY_LEVEL INTEGER
DEFAULT (GET_SECURITY_LEVEL (SESSION_USER))
v Ejemplo 4: Cree una variable global de sesión como un cursor en la tabla STAFF
que devuelva los nombres de cada empleado para cada tipo de trabajo
especificado. Ordene los resultados por número de departamento.
CREATE VARIABLE STAFFJOBS CURSOR
CONSTANT (CURSOR (WHICHJOB CHAR(5))
FOR SELECT NAME, DEPT FROM STAFF WHERE JOB = WHICHJOB
ORDER BY DEPT)
Sentencias 939
CREATE VIEW
CREATE VIEW
La sentencia CREATE VIEW define una vista para una o más tablas, vistas o
apodos.
Invocación
Autorización
No se tienen en cuenta los privilegios al definir una vista para un apodo de base
de datos federada. Los requisitos de autorización de la fuente de datos para la
Sintaxis
CREATE VIEW nombre-vista
OR REPLACE
AS
,
( nombre-columna )
OF nombre-tipo definición-vista-raíz
definición-subvista
selección completa ?
,
WITH expresión-tabla-común
definición-vista-raíz:
definición-subvista:
columna-oid:
Sentencias 941
CREATE VIEW
opciones-with:
,
,
cláusula-under:
Descripción
OR REPLACE
Especifica que se debe sustituir la definición de la vista si existe una 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 los
privilegios que se han otorgado sobre la vista no se ven afectados por ello. Esta
opción se ignora si no existe una definición para la vista en el servidor actual.
Esta opción sólo puede especificarla el propietario del objeto.
nombre-vista
Indica el nombre de la vista. El nombre (incluido el calificador implícito o
explícito) no debe designar una tabla, vista, apodo ni alias que se haya descrito
en el catálogo. El calificador no debe ser SYSIBM, SYSCAT, SYSFUN ni
SYSSTAT (SQLSTATE 42939).
El nombre puede ser el mismo que el nombre de una vista no operativa
(consulte el apartado Vistas no operativas). En tal caso, la nueva vista
especificada en la sentencia CREATE VIEW sustituirá la vista no operativa. El
usuario recibirá un aviso (SQLSTATE 01595) cuando se sustituya una vista no
operativa. No se devuelve ningún aviso si la aplicación se ha enlazado con la
opción de enlace lógico SQLWARN establecida en NO.
nombre-columna
Indica los nombres de las columnas de la vista. 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 la lista de nombres de
columnas, las columnas de la vista heredarán 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.
OF nombre-tipo
Especifica que las columnas de la vista están basadas en los atributos del tipo
estructurado identificado por nombre-tipo. Si se especifica nombre-tipo 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 del 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).
MODE DB2SQL
Esta cláusula se utiliza para especificar la modalidad de la vista con tipo. En
este momento es la única modalidad válida a la que se da soporte.
UNDER nombre-supervista
Indica que la vista es una subvista de nombre-supervista. La supervista debe ser
una vista existente (SQLSTATE 42704) y la vista debe estar definida mediante
un tipo estructurado que sea el supertipo inmediato de nombre-tipo (SQLSTATE
428DB). El nombre de esquema de nombre-vista y nombre-supervista debe ser el
mismo (SQLSTATE 428DQ). La vista identificada por nombre-supervista no debe
tener ninguna subvista existente ya definida mediante nombre-tipo (SQLSTATE
42742).
Entre las columnas de la vista, se incluye la columna de identificador de objeto
de la supervista con su tipo modificado para que sea REF(nombre-tipo), seguida
de columnas basadas en los atributos de nombre-tipo (recuerde que el tipo
incluye los atributos de su supertipo).
INHERIT SELECT PRIVILEGES
Cualquier usuario o grupo que sostenga un privilegio SELECT sobre la
supervista recibirá un privilegio equivalente sobre la subvista recién creada. Se
considera que el definidor de la subvista es el otorgante de este privilegio.
columna-OID
Define la columna de identificador de objeto para la vista con tipo.
REF IS nombre-columna-OID USER GENERATED
Especifica que en la vista se define una columna de identificador de objeto
(OID) como la primera columna. Se necesita un OID para la vista raíz de
una jerarquía de vistas (SQLSTATE 428DX). La vista debe ser una vista con
tipo (debe estar presente la cláusula OF) que no sea una subvista
(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-tipo (SQLSTATE 42711). La primera
columna especificada en selección completa debe ser de tipo REF(nombre-tipo)
(puede ser necesario que se convierta para que tenga el tipo adecuado). Si
no se especifica UNCHECKED, la vista debe basarse en una columna sin
posibilidad de nulos, en la que se asegura la unicidad mediante un índice
(clave primaria, restricción de unicidad, índice de unicidad o columna
OID). Esta columna vendrá 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).
UNCHECKED
Define la columna identificadora de objeto de la definición de vista con
tipo para asumir la unicidad aunque el sistema no pueda probar esta
unicidad. Esto es así para utilizarlo con tablas o vistas que se están
definiendo en una jerarquía de vistas con tipo donde el usuario sabe que
los datos se ajustan a esta norma de unicidad pero no se ajustan a las
normas que permiten al sistema probar esta unicidad. La opción
UNCHECKED es obligatoria para jerarquías de vistas que comprenden
varias jerarquías, o tablas o vistas preexistentes. Cuando se especifica
UNCHECKED, el usuario debe asegurarse de que cada fila de la vista tiene
un OID exclusivo. Si no se asegura esta propiedad y una vista contiene
Sentencias 943
CREATE VIEW
WITH expresión-tabla-común
Define una expresión de tabla común para utilizarla con la selección completa
que va a continuación. No puede especificarse una expresión de tabla común
cuando se define una vista con tipo.
selección completa
Define la vista. En todo momento, la vista consta de las filas que se generarían
si se ejecutara la sentencia SELECT. La selección completa no debe hacer
referencia a variables del lenguaje principal, a marcadores de parámetro ni a
tablas temporales declaradas. En cambio, una vista parametrizada se puede
crear como función de tabla SQL.
La selección completa no puede incluir una sentencia de cambio de datos de
SQL en la cláusula FROM (SQLSTATE 428FL).
Para subvistas y vistas con tipo: La selección completa debe ajustarse a las
normas siguientes, de lo contrario se devolverá un error (SQLSTATE 428EA a
no ser que se especifique lo contrario).
v La selección completa no debe incluir referencias a las funciones
DBPARTITIONNUM o HASHEDVALUE, a las funciones no deterministas o
a funciones que se han definido para que exista una acción externa.
v El cuerpo de la vista debe consistir en una sola subselección o en UNION
ALL de dos o más subselecciones. Supongamos que cada una de las
subselecciones que participan directamente en el cuerpo de la vista se llama
una rama de la vista. Una vista puede tener una o más ramas.
v La cláusula FROM de cada rama debe consistir de una sola tabla o vista (no
necesariamente de tipo), llamada la tabla o vista subyacente de esa rama.
v La tabla o vista subyacente de cada rama debe estar en una jerarquía
separada (es decir, una vista no puede tener varias ramas con sus tablas o
vistas subyacentes en la misma jerarquía).
v Ninguna de las ramas de una definición de vista con tipo puede que
especifique GROUP BY o HAVING.
v Si el cuerpo de la vista contiene UNION ALL, la vista de la raíz en la
jerarquía debe especificar la opción UNCHECKED para su columna de OID.
Para una jerarquía de vistas y subvistas: BR1 y BR2 son las ramas que aparecen
en las definiciones de vistas en la jerarquía. T1 debe ser la tabla subyacente o
vista de BR1 y T2 debe ser la tabla o vista subyacente de BR2. Entonces:
v Si T1 y T2 no están en la misma jerarquía, entonces la vista raíz de la
jerarquía de vistas debe especificar la opción UNCHECKED para su
columna OID.
v Si T1 y T2 están en la misma jerarquía, entonces BR1 y BR2 deben contener
predicados o cláusulas ONLY que sean suficientes para garantizar que sus
conjuntos de filas no están unidos.
Para subvistas con tipo definidas utilizando EXTEND AS: Para cada rama en el
cuerpo de la subvista:
v La tabla subyacente de cada rama debe ser una subtabla (no necesariamente
la correspondiente) de alguna tabla subyacente de la supervista inmediata.
v Las expresiones de la lista SELECT deben poder asignarse a las columnas no
heredadas de la subvista (SQLSTATE 42854).
Para subvistas con tipo definidas utilizando AS sin EXTEND:
v Para cada rama del cuerpo de la subvista, las expresiones en la lista SELECT
deben poder asignarse a los tipos declarados de las columnas heredadas y
no heredadas de la subvista (SQLSTATE 42854).
Sentencias 945
CREATE VIEW
Y es LOCAL Y es CASCADED
V1 se comprueba con: ninguna vista ninguna vista
V2 se comprueba con: V2 V2, V1
V3 se comprueba con: V2 V2, V1
V4 se comprueba con: V2, V4 V4, V3, V2, V1
V5 se comprueba con: V2, V4 V4, V3, V2, V1
Sentencias 947
CREATE VIEW
Notas
v La creación de una vista 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.
v Las columnas de la vista heredan el atributo NOT NULL WITH DEFAULT de la
tabla o vista base excepto cuando las columnas derivan de una expresión. Al
insertar o actualizar una fila en una vista actualizable, se comprueba
comparándola con las restricciones (clave primaria, integridad referencial y
control) si es que hay alguna definida en la tabla base.
v No se puede crear una nueva vista si esta utiliza en su definición una vista no
operativa. (SQLSTATE 51024).
v Si un objeto al que se hace referencia en el cuerpo de la vista no existe o se ha
marcado como no válido o el definidor no tiene temporalmente los privilegios
para acceder al objeto y, si el parámetro de configuración de la base de datos
auto_reval no se ha establecido en DISABLED, la vista seguirá creándose
satisfactoriamente. La vista se marcará como no válida y se volverá a validar la
siguiente vez que se referencie.
v Esta sentencia no permite utilizar tablas temporales declaradas (SQLSTATE
42995).
v Vistas que pueden suprimirse: Una vista podrá suprimirse si para la vista se ha
definido un activador INSTEAD OF para la operación de supresión o si se dan
todas las condiciones siguientes:
– Cada cláusula FROM de la selección completa externa sólo identifica una
tabla base (sin cláusula OUTER), una vista suprimible (sin cláusula OUTER),
una expresión de tabla anidada suprimible o una expresión de tabla común
suprimible (no puede identificar a un apodo). Además, cualquier
especificación de período especificada para la tabla base o la vista suprimible
no hace referencia al período SYSTEM_TIME.
– La selección completa externa no incluye una cláusula VALUES.
– La selección completa externa no incluye una cláusula GROUP BY ni una
cláusula HAVING.
– La selección completa externa no incluye funciones agregadas en la lista de
selección.
– La selección completa externa no incluye operaciones SET (UNION, EXCEPT
o INTERSECT) a excepción de UNION ALL.
– Las tablas base en los operandos de una UNION ALL no deben la misma
tabla y cada operando debe poder suprimirse.
– La lista de selección de la selección completa externa no incluye DISTINCT.
v Vistas que pueden actualizarse: Una columna de una vista podrá actualizarse si
para la vista se ha definido un activador INSTEAD OF para la operación de
actualización o si se dan todas las condiciones siguientes:
– La vista puede suprimirse (con independencia de la existencia de un
activador INSTEAD OF para la supresión), la columna se resuelve en una
columna de una tabla base (sin utilizarse una operación de eliminación de
referencia) y no se ha especificado la opción READ ONLY.
Sentencias 949
CREATE VIEW
Sentencias 951
CREATE VIEW
Ejemplos
v Ejemplo 1: cree una vista llamada MA_PROJ basada en la tabla PROJECT que
sólo contenga aquellas filas con un número de proyecto (PROJNO) que empiece
por las letras ‘MA'.
CREATE VIEW MA_PROJ AS SELECT *
FROM PROJECT
WHERE SUBSTR(PROJNO, 1, 2) = ’MA’
v Ejemplo 2: Cree una vista como la del ejemplo 1, pero seleccione sólo las
columnas para el número de proyecto (PROJNO), nombre de proyecto
(PROJNAME) y empleado encargado del proyecto (RESPEMP).
Nota: Aunque sólo se cambie uno de los nombres de columna, los nombres de
las tres columnas de la vista deben listarse entre los paréntesis que siguen a
MA_PROJ.
v Ejemplo 4: Cree una vista llamada PRJ_LEADER que contenga las cuatro
primeras columnas (PROJNO, PROJNAME, DEPTNO, RESPEMP) de la tabla
PROJECT junto con el apellido (LASTNAME) de la persona que es responsable
del proyecto (RESPEMP). Obtendremos el nombre de la tabla EMPLOYEE
emparejando EMPNO de EMPLOYEE con RESPEMP de PROYECT.
CREATE VIEW PRJ_LEADER
AS SELECT PROJNO, PROJNAME, DEPTNO, RESPEMP, LASTNAME
FROM PROJECT, EMPLOYEE
WHERE RESPEMP = EMPNO
v Ejemplo 5: Cree una vista como en el ejemplo 4, pero que además de mostrar las
columnas PROJNO, PROJNAME, DEPTNO, RESPEMP y LASTNAME, que
también muestre la paga total (SALARY + BONUS + COMM) del empleado
responsable. Asimismo, seleccione sólo aquellos proyectos cuyo empleo de
personal principal (PRSTAFF) sea mayor que 1.
CREATE VIEW PRJ_LEADER
(PROJNO, PROJNAME, DEPTNO, RESPEMP, LASTNAME, TOTAL_PAY )
AS SELECT PROJNO, PROJNAME, DEPTNO, RESPEMP, LASTNAME, SALARY+BONUS+COMM
FROM PROJECT, EMPLOYEE
WHERE RESPEMP = EMPNO
AND PRSTAFF > 1
Puede evitarse la especificación de la lista de nombres de columna especificando
el nombre de la expresión SALARY+BONUS+COMM como TOTAL_PAY en la
selección completa.
CREATE VIEW PRJ_LEADER
AS SELECT PROJNO, PROJNAME, DEPTNO, RESPEMP,
LASTNAME, SALARY+BONUS+COMM AS TOTAL_PAY
FROM PROJECT, EMPLOYEE
WHERE RESPEMP = EMPNO AND PRSTAFF > 1
v Ejemplo 6: Dado el conjunto de tablas y vistas mostrado en el diagrama
siguiente:
Sentencias 953
CREATE VIEW
VE. La persona que define la vista sólo obtiene CONTROL en la vista si tiene
CONTROL en todos los objetos a los que se hace referencia en la definición
de vista. ZORPIE no tiene CONTROL en S1.V3, en consecuencia no obtiene
CONTROL en VE.
Sentencias 955
CREATE WORK ACTION SET
Invocación
Autorización
Sintaxis
CREATE WORK ACTION SET nombre-conjunto-acciones-trabajo
FOR DATABASE
SERVICE CLASS nombre-superclase-servicio
WORKLOAD nombre-carga-trabajo
ENABLE
, DISABLE
( definición-acción-trabajo )
definición-acción-trabajo:
ENABLE
cláusula-tipos-acción cláusula-plantilla-histograma
DISABLE
cláusula-tipos-acción:
WITH NESTED
MAP ACTIVITY TO nombre-subclase-servicio
WITHOUT NESTED
WHEN cláusula-tipos-umbral acciones-superaron-umbral
PREVENT EXECUTION
COUNT ACTIVITY
COLLECT ACTIVITY DATA cláusula-recopilar-datos-actividad
BASE
COLLECT AGGREGATE ACTIVITY DATA
EXTENDED
cláusula-tipos-umbral:
acciones-superaron-umbral:
STOP EXECUTION
CONTINUE
cláusula-recopilar-datos-actividad:
MEMBER
ON COORDINATOR
MEMBERS
ON ALL
Sentencias 957
CREATE WORK ACTION SET
WITHOUT DETAILS
,
(2)
WITH DETAILS
SECTION AND VALUES
(3)
INCLUDE ACTUALS BASE
cláusula-plantilla-histograma:
Notas:
1 Sólo puede aplicarse una acción de trabajo del mismo tipo de umbral a una
única clase de trabajo a la vez.
2 La palabra clave DETAILS es la información mínima que debe especificarse,
seguida de la opción separada por una coma.
3 Esta cláusula no se aplica a los umbrales.
Descripción
nombre-conjunto-acciones-trabajo
Da nombre al conjunto de acciones de trabajo. Este nombre consta de una sola
parte. Se trata de un identificador de SQL (ordinario o delimitado). El
nombre-conjunto-acciones-trabajo no debe identificar un conjunto de acciones de
trabajo que exista en el servidor actual (SQLSTATE 42710). El nombre no debe
empezar por los caracteres 'SYS' (SQLSTATE 42939).
FOR
Especifica el objeto de gestor de base de datos al que se aplicarán las acciones
de este conjunto de acciones de trabajo. Cada uno de los objetos de gestor de
base de datos sólo puede tener definido un conjunto de acciones de trabajo
definida para el mismo (SQLSTATE 5U017).
DATABASE
Las acciones de este conjunto de acciones de trabajo van a aplicarse a la
base de datos. Si se especifica DATABASE, la cláusula MAP ACTIVITY no
puede especificarse (SQLSTATE 5U034).
SERVICE CLASS nombre-superclase-servicio
Las acciones de este conjunto de acciones de trabajo van a aplicarse a
Sentencias 959
CREATE WORK ACTION SET
WITHOUT NESTED
Sólo las actividades que tengan un nivel de anidamiento de cero
que estén clasificadas bajo la clase de trabajo se correlacionarán con
la subclase de servicio. Las actividades anidadas bajo esta actividad
se manejarán con arreglo a su tipo de actividad.
TO nombre-subclase-servicio
Especifica la subclase de servicio a la que están correlacionadas las
actividades. El nombre-subclase-servicio debe existir en el
nombre-superclase-servicio en el servidor actual (SQLSTATE 42704). El
nombre-subclase-servicio no puede ser la subclase de servicio por
omisión, SYSDEFAULTSUBCLASS (SQLSTATE 5U018).
WHEN
Especifica el umbral que se aplicará a la actividad de base de datos
asociada a la clase de trabajo para la que se define esta acción de trabajo.
Un umbral sólo puede especificarse si el objeto de gestor de base de datos
para el que se ha definido esta acción de trabajo está definido como base
de datos o carga de trabajo (SQLSTATE 5U034). Ninguno de estos
umbrales se aplican a las actividades de base de datos internas iniciadas
por medio del gestor de base de datos o a las actividades de base de datos
generadas por medio de rutinas de SQL administrativas.
cláusula-tipos-umbral
Para obtener una descripción de los tipos de umbral válidos, consulte
la sentencia “CREATE THRESHOLD”.
acciones-superaron-umbral
Para obtener una descripción de las acciones de excedido umbral
válidas, consulte la sentencia “CREATE THRESHOLD”.
PREVENT EXECUTION
Especifica que no se permitirá la ejecución de ninguna de las
actividades de base de datos asociada a la clase de trabajo para la que
se ha definido esta acción de trabajo (SQLSTATE 5U033).
COUNT ACTIVITY
Especifica que se ejecuten todas las actividades de base de datos
asociadas a la clase de trabajo para las que se define esta acción de
trabajo y que cada vez que se ejecute una de ellas, aumente el contador
para la clase de trabajo.
COLLECT ACTIVITY DATA
Especifica que los datos sobre cada actividad asociada a la clase de
trabajo para la que esta acción de trabajo está definida, deben enviarse
a cualquier supervisor de sucesos de actividades activas cuando se
completa la actividad. El valor por omisión es COLLECT ACTIVITY
DATA WITHOUT DETAILS.
cláusula-recopilar-datos-actividad
ON COORDINATOR MEMBER
Especifica que los datos de actividad se recopilan sólo en el
miembro coordinador de la actividad.
ON ALL MEMBERS
Especifica que los datos de actividad van a recopilarse en todos
los miembros en los que se procesa la actividad. En miembros
remoto, es posible capturar un registro de la actividad varias
veces, puesto que esta va y viene en dichos miembros. Si se
Sentencias 961
CREATE WORK ACTION SET
ENABLE
Especifica que el conjunto de acciones de trabajo está habilitado y va a
tomarse en consideración cuando se sometan actividades de base de
datos.
DISABLE
Especifica que el conjunto de acciones de trabajo está inhabilitado y no
va a tomarse en consideración cuando se sometan actividades de base
de datos.
cláusula-plantilla-histograma
Especifica las plantillas de histograma que han de utilizarse al recopilar datos
de actividad agregados para las actividades asociadas a la clase de trabajo a la
que se asigna esta acción de trabajo. Los datos de actividades agregadas sólo se
recopilan para la clase de trabajo cuando el tipo de acción de trabajo es
COLLECT AGGREGATE ACTIVITY DATA.
ACTIVITY LIFETIME HISTOGRAM TEMPLATE nombre-plantilla
Especifica la plantilla que describe el histograma utilizado para recopilar
datos estadísticos sobre la duración, en milisegundos de las actividades de
DB2 -asociadas a la clase de trabajo a la que está asignada esta acción de
trabajo- en ejecución durante un intervalo específico. Este tiempo incluye
tanto el tiempo que está en cola como el tiempo de ejecución. El valor por
omisión es SYSDEFAULTHISTOGRAM. Esta información sólo se recopila
cuando se especifica la cláusula COLLECT AGGREGATE ACTIVITY
DATA, con la opción BASE o EXTENDED.
ACTIVITY QUEUETIME HISTOGRAM TEMPLATE nombre-plantilla
Especifica la plantilla que describe el histograma utilizado para recopilar
datos estadísticos sobre la duración, en milisegundos que las actividades
de DB2 -asociadas a la clase de trabajo a la que está asignada esta acción
de trabajo- están en cola durante un intervalo específico. El valor por
omisión es SYSDEFAULTHISTOGRAM. Esta información sólo se recopila
cuando se especifica la cláusula COLLECT AGGREGATE ACTIVITY
DATA, con la opción BASE o EXTENDED.
ACTIVITY EXECUTETIME HISTOGRAM TEMPLATE nombre-plantilla
Especifica la plantilla que describe el histograma utilizado para recopilar
datos estadísticos sobre la duración, en milisegundos que las actividades
de DB2 -asociadas a la clase de trabajo a la que está asignada esta acción
de trabajo- están en ejecución durante un intervalo específico. Este tiempo
no incluye el tiempo que se pasa en la cola. El tiempo de ejecución de la
actividad se recopila en este histograma en cada miembro en el que se
ejecuta la actividad. En el miembro coordinador de la actividad, este es el
tiempo de ejecución integral (es decir, el tiempo de vida menos el tiempo
que se ha pasado en la cola). En los miembros que no son coordinadores,
este es el tiempo que estos miembros pasan trabajando en nombre de la
actividad. Durante la ejecución de una determinada actividad, es posible
que DB2 presente el trabajo en un miembro no coordinador más de una
vez y cada vez el miembro no coordinador recopilará el tiempo de
ejecución para dicha aparición de la actividad. Por tanto, es posible que los
números del histograma de tiempo de ejecución no representen el número
real de actividades exclusivas que se ejecutan en un miembro. El valor por
omisión es SYSDEFAULTHISTOGRAM. Esta información sólo se recopila
cuando se especifica la cláusula COLLECT AGGREGATE ACTIVITY
DATA, con la opción BASE o EXTENDED.
ACTIVITY ESTIMATEDCOST HISTOGRAM TEMPLATE nombre-plantilla
Especifica la plantilla que describe el histograma utilizado para recopilar
Sentencias 963
CREATE WORK ACTION SET
Normas
v Una sentencia de SQL exclusiva de gestión de carga de trabajo (WLM) debe ir
después de una sentencia COMMIT o ROLLBACK (SQLSTATE 5U021). Las
sentencias de SQL exclusivas de WLM son:
– CREATE HISTOGRAM TEMPLATE, ALTER HISTOGRAM TEMPLATE o
DROP (plantilla de histograma)
– CREATE SERVICE CLASS, ALTER SERVICE CLASS o DROP (clase de
servicio)
– CREATE THRESHOLD, ALTER THRESHOLD o DROP (umbral)
– CREATE WORK ACTION SET, ALTER WORK ACTION SET o DROP
(conjunto de acciones de trabajo)
– CREATE WORK CLASS SET, ALTER WORK CLASS SET o DROP (conjunto
de clases de trabajo)
– CREATE WORKLOAD, ALTER WORKLOAD o DROP (carga de trabajo)
– GRANT (privilegios de carga de trabajo) o REVOKE (privilegios de carga de
trabajo)
v Una sentencia de SQL exclusiva de WLM no puede emitirse en una transacción
global (SQLSTATE 51041) como por ejemplo, una transacción XA.
Notas
v Los cambios se graban en el catálogo del sistema, pero no surten efecto hasta
que se confirmen, incluso para la conexión que emite la sentencia.
v Alternativas de sintaxis: Las siguientes alternativas se admiten para mantener la
compatibilidad con versiones anteriores de productos DB2 y otros productos de
base de datos. Estas alternativas no son estándar y no deberían utilizarse.
– Puede especificarse DATABASE PARTITION en lugar de MEMBER, salvo
cuando la variable de registro DB2_ENFORCE_MEMBER_SYNTAX se
establece en ON.
– Puede especificarse DATABASE PARTITIONS en lugar de MEMBERS, salvo
cuando la variable de registro DB2_ENFORCE_MEMBER_SYNTAX se
establece en ON.
v El ámbito de aplicación se basa de forma automática en el tipo de umbral. Para
los umbrales de tipo CONCURRENTDBCOORDACTIVITIES, el entorno se
utiliza también para determinar el ámbito de aplicación, donde toma como valor
por omisión el ámbito de aplicación DATABASE en entornos que no son de DB2
pureScale, y el ámbito de aplicación MEMBER en los entornos de DB2 pureScale.
Ejemplos
v Ejemplo 1: Cree un conjunto de acciones de trabajo denominado
DATABASE_ACTIONS que se aplique a todas las actividades de base de datos.
Utilice el conjunto de clases de trabajo LARGE_QUERIES y defina las siguientes
acciones de trabajo. La acción de trabajo ONE_CONCURRENT_QUERY tiene
una acción de umbral que permita que una consulta simultánea se ejecute en el
sistema a la vez para las consultas que caigan en la clase de trabajo
LARGE_ESTIMATED_COST. Si se supera dicho umbral, el gestor de base de
datos va a poner en cola la actividad, pero no va a permitir que se ponga en
cola más de una actividad la vez. Si se supera el umbral, no se permite la
ejecución de la actividad de base de datos. La acción de trabajo
TWO_CONCURRENT_QUERIES tiene una acción de umbral que permite que
dos consultas simultáneas se ejecuten a la vez para las consultas que caigan
dentro de la clase de trabajo LARGE_CARDINALITY y no permite que se
pongan en cola más de dos. Si se van a poner en cola más de dos consultas, la
actividad de base de datos va a seguir colocando las consultas en la cola y va a
recopilar los datos de actividad de base de datos en el supervisor de sucesos de
actividades, si hay alguno activo.
CREATE WORK ACTION SET DATABASE_ACTIONS
FOR DATABASE USING WORK CLASS SET LARGE_QUERIES
(WORK ACTION ONE_CONCURRENT_QUERY ON WORK CLASS LARGE_ESTIMATED_COST
WHEN CONCURRENTDBCOORDACTIVITIES > 1 AND QUEUEDACTIVITIES > 1
STOP EXECUTION,
WORK ACTION TWO_CONCURRENT_QUERIES ON WORK CLASS LARGE_CARDINALITY
WHEN CONCURRENTDBCOORDACTIVITIES > 2 AND QUEUEDACTIVITIES > 2
COLLECT ACTIVITY DATA CONTINUE)
v Ejemplo 2: Cree un conjunto de acciones de trabajo denominada
ADMIN_APPS_ACTIONS con una acción de trabajo denominada
MAP_SELECTS que va a aplicarse a las actividades de base de datos que se
ejecutan bajo la superclase de servicio ADMIN_APPS. La acción de trabajo va a
correlacionar toda la actividad de base de datos que caiga dentro de la clase de
trabajo SELECT_CLASS con la subclase de servicio SELECTS_SERVICE_CLASS,
que está en el conjunto de clases de trabajo DML_SELECTS.
CREATE WORK ACTION SET ADMIN_APPS_ACTIONS
FOR SERVICE CLASS ADMIN_APPS USING
WORK CLASS SET DML_SELECTS
(WORK ACTION MAP_SELECTS ON WORK CLASS SELECT_CLASS
MAP ACTIVITY TO SELECTS_SERVICE_CLASS)
Sentencias 965
CREATE WORK CLASS SET
Invocación
Autorización
Sintaxis
CREATE WORK CLASS SET nombre-conjunto-clases-trabajo
,
( definición-clase-trabajo )
definición-clase-trabajo:
WORK CLASS
nombre-clase-trabajo
atributos-trabajo cláusula-posición
atributos-trabajo:
WORK TYPE
READ
cláusula-para-desde-a cláusula-código-datos
WRITE
cláusula-para-desde-a cláusula-código-datos
CALL
cláusula-esquema
DML
cláusula-para-desde-a cláusula-código-datos
DDL
LOAD
ALL
cláusula-para-desde-a cláusula-esquema cláusula-código-datos
cláusula-para-desde-a:
TO UNBOUNDED
FOR TIMERONCOST FROM desde-valor
CARDINALITY TO al-valor
cláusula-código-datos:
cláusula-esquema:
cláusula-posición:
POSITION LAST
Descripción
nombre-conjunto-clases-trabajo
Da nombre al conjunto de clases de trabajo. Este nombre consta de una sola
parte. Se trata de un identificador de SQL (ordinario o delimitado). El
nombre-conjunto-clases-trabajo no debe identificar un conjunto de clases de
trabajo que exista en el servidor actual (SQLSTATE 42710). El nombre no debe
empezar por los caracteres 'SYS' (SQLSTATE 42939).
definición-clase-trabajo
Especifica la definición de la clase de trabajo.
WORK CLASS nombre-clase-trabajo
Da nombre a la clase de trabajo. El nombre-clase-trabajo no debe identificar
una clase de trabajo que ya existe en el conjunto de clases de trabajo del
servidor actual (SQLSTATE 42710). El nombre-clase-trabajo no puede
comenzar por 'SYS' (SQLSTATE 42939).
atributos-trabajo
Los atributos de la actividad de base de datos deben corresponderse con
todos los atributos especificados en esta clase de trabajo si va a asociarse
dicha actividad con esta clase de trabajo.
WORK TYPE
Especifica el tipo de actividad de base de datos.
READ
Esta actividad incluye las sentencias siguientes:
v Todas las sentencias SELECT o SELECT INTO que no contengan
una sentencia DELETE, INSERT, MERGE o UPDATE y todas las
sentencias VALUES INTO
v Todas las sentencias XQuery
WRITE
Esta actividad incluye las sentencias siguientes:
v UPDATE
v DELETE
v INSERT
v MERGE
Sentencias 967
CREATE WORK CLASS SET
Sentencias 969
CREATE WORK CLASS SET
Normas
v Una sentencia de SQL exclusiva de gestión de carga de trabajo (WLM) debe ir
después de una sentencia COMMIT o ROLLBACK (SQLSTATE 5U021). Las
sentencias de SQL exclusivas de WLM son:
– CREATE HISTOGRAM TEMPLATE, ALTER HISTOGRAM TEMPLATE o
DROP (HISTOGRAM TEMPLATE)
– CREATE SERVICE CLASS, ALTER SERVICE CLASS o DROP (SERVICE
CLASS)
– CREATE THRESHOLD, ALTER THRESHOLD o DROP (THRESHOLD)
– CREATE WORK ACTION SET, ALTER WORK ACTION SET o DROP (WORK
ACTION SET)
– CREATE WORK CLASS SET, ALTER WORK CLASS SET o DROP (WORK
CLASS SET)
– CREATE WORKLOAD, ALTER WORKLOAD o DROP (WORKLOAD)
– GRANT (privilegios de carga de trabajo) o REVOKE (privilegios de carga de
trabajo)
v Una sentencia de SQL exclusiva de WLM no puede emitirse en una transacción
global (SQLSTATE 51041) como por ejemplo, una transacción XA.
Notas
v Los cambios se graban en el catálogo del sistema, pero no surten efecto hasta
que se confirmen, incluso para la conexión que emite la sentencia.
Ejemplos
v Ejemplo 1: Cree un conjunto de clases de trabajo denominado LARGE_QUERIES
que tenga un conjunto de clases de trabajo que representen todo el DML con un
coste estimado superior a 9999 y una cardinalidad estimada superior a 1000.
CREATE WORK CLASS
SET LARGE_QUERIES
(WORK CLASS LARGE_ESTIMATED_COST WORK TYPE DML
FOR TIMERONCOST FROM 9999 TO UNBOUNDED,
WORK CLASS LARGE_CARDINALITY WORK TYPE DML
FOR CARDINALITY FROM 1000 TO UNBOUNDED)
v Ejemplo 2: Cree una clase de trabajo denominada DML_SELECTS que tenga una
clase de trabajo que represente a todas las sentencias DML SELECT que no
contengan una sentencia DELETE, INSERT, MERGE o UPDATE.
Sentencias 971
CREATE WORKLOAD
CREATE WORKLOAD
La sentencia CREATE WORKLOAD define una carga de trabajo.
Invocación
Autorización
Sintaxis
POSITION LAST
atributos-carga-trabajo
POSITION BEFORE nombre-carga-trabajo
AFTER nombre-carga-trabajo
AT posición
cláusula-plantilla-histograma
atributos-conexión:
(1)
ADDRESS ( 'valor-dirección' )
APPLNAME ( 'nombre-aplicación' )
SYSTEM_USER ( 'nombre-autorización' )
SESSION_USER ( 'nombre-autorización' )
atributos-carga-trabajo:
Sentencias 973
CREATE WORKLOAD
recopilar-en-cláusula:
MEMBER
ON COORDINATOR
MEMBERS
ON ALL
cláusula-recopilar-detalles:
WITHOUT DETAILS
,
(2)
WITH DETAILS
SECTION AND VALUES
INCLUDE ACTUALS BASE
opciones-recopilar-espera-bloqueo:
WITHOUT HISTORY
?
WITH HISTORY
AND VALUES
cláusula-plantilla-histograma:
Notas:
1 Cada cláusula de atributo de conexión sólo puede especificarse una vez.
2 La palabra clave DETAILS es la información mínima que debe especificarse,
seguida de la opción separada por una coma.
Descripción
nombre-carga-trabajo
Da nombre a la carga de trabajo. Este nombre consta de una sola parte. Se trata
de un identificador de SQL (ordinario o delimitado). El nombre-carga-trabajo no
debe identificar una carga de trabajo que ya exista en el servidor actual
(SQLSTATE 42710). El nombre no debe empezar por los caracteres 'SYS'
(SQLSTATE 42939).
atributos-conexión
Los atributos de la conexión deben corresponderse con todos los atributos
especificados en esta definición de carga de trabajo si va a asociarse con esta
carga de trabajo cuando se establezca la conexión. Si se especifica una lista de
valores para un atributo de conexión de la definición de carga de trabajo, el
atributo correspondiente de la conexión debe corresponderse con al menos uno
de los valores de la lista. Si no se especifica un atributo de conexión en la
definición de carga de trabajo, la conexión puede tener cualquier valor para el
atributo de conexión correspondiente.
Sentencias 975
CREATE WORKLOAD
Sentencias 977
CREATE WORKLOAD
DEFAULT
Especifica que esta carga de trabajo hereda el valor de paralelismo
intrapartición del parámetro de configuración del gestor de bases de
datos intra_parallel. Cuando intra_parallel se establece en NO, la
carga de trabajo se ejecuta con el paralelismo intrapartición
inhabilitado. Cuando intra_parallel se establece en YES, la carga de
trabajo se ejecuta con el paralelismo intrapartición habilitado. La carga
de trabajo no especifica un grado de tiempo de ejecución máximo para
las aplicaciones asignadas. Por tanto, el grado de tiempo de ejecución
real se determina como el más bajo de los valores del parámetro de
configuración max_querydegree, el valor establecido por el comando
SET RUNTIME DEGREE y el grado de compilación de la sentencia de
SQL.
grado
Especifica el grado máximo de paralelismo para esta carga de trabajo.
Los valores válidos son 1 a 32.767. Con valor 1, las peticiones asociadas
se ejecutan con el paralelismo intrapartición inhabilitado. Con un valor
de 2 a 32.767, las peticiones asociadas se ejecutan con el paralelismo
intrapartición habilitado. El grado de tiempo de ejecución real se
determina como el más bajo de este grado, el valor del parámetro de
configuración max_querydegree, el valor establecido por el comando
SET RUNTIME DEGREE y el grado de compilación de la sentencia de
SQL.
SERVICE CLASS nombre-clase-servicio
Especifica que las peticiones asociadas a esta carga de trabajo se ejecuten
en la clase de servicio nombre-clase-servicio. El nombre-clase-servicio debe
identificar una clase de servicio que exista en el servidor actual (SQLSTATE
42704). El nombre-clase-servicio no puede ser 'SYSDEFAULTSUBCLASS',
'SYSDEFAULTSYSTEMCLASS' o 'SYSDEFAULTMAINTENANCECLASS'
(SQLSTATE 5U032). El valor por omisión es SYSDEFAULTUSERCLASS.
UNDER nombre-superclase-servicio
La cláusula se utiliza al especificar una subclase de servicio. El
nombre-superclase-servicio identifica la superclase de servicio de
nombre-superclase-servicio. El nombre-superclase-servicio debe identificar
una superclase de servicio que exista en el servidor actual (SQLSTATE
42704). El nombre-superclase-servicio no puede ser
'SYSDEFAULTSYSTEMCLASS' o
'SYSDEFAULTMAINTENANCECLASS' (SQLSTATE 5U032).
POSITION
Especifica el lugar en el que va a situarse esta carga de trabajo en la lista
ordenada de cargas de trabajo. En tiempo de ejecución, se examina esta lista
por orden para buscar la primera carga de trabajo que coincida con los
atributos de conexión necesarios. El valor por omisión es LAST.
LAST
Especifica que la carga de trabajo va a ser la última de la lista, antes de las
cargas de trabajo por omisión SYSDEFAULTUSERWORKLOAD y
SYSDEFAULTADMWORKLOAD.
BEFORE nombre-carga-trabajo-relativa
Especifica que la carga de trabajo va a colocarse antes de la carga de
trabajo nombre-carga-trabajo-relativa de la lista. El nombre-carga-trabajo-relativa
debe identificar una carga de trabajo que exista en el servidor actual
(SQLSTATE 42704). La opción BEFORE no puede especificarse si
nombre-carga-trabajo-relativa es 'SYSDEFAULTUSERWORKLOAD' o
'SYSDEFAULTADMWORKLOAD' (SQLSTATE 42832).
AFTER nombre-carga-trabajo-relativa
Especifica que la carga de trabajo va a colocarse detrás de la carga de
trabajo nombre-carga-trabajo-relativa de la lista. El nombre-carga-trabajo-relativa
debe identificar una carga de trabajo que exista en el servidor actual
(SQLSTATE 42704). La opción AFTER no puede especificarse si
nombre-carga-trabajo-relativa es 'SYSDEFAULTUSERWORKLOAD' o
'SYSDEFAULTADMWORKLOAD' (SQLSTATE 42832).
AT posición
Especifica la posición absoluta en la que la carga de trabajo va a colocarse
en la lista. Este valor puede ser cualquier entero positivo (diferente de
cero) (SQLSTATE 42615). Si posición es mayor que el número de cargas de
trabajo existentes más una, la carga de trabajo se sitúa en la última
posición justo antes de SYSDEFAULTUSERWORKLOAD y
SYSDEFAULTADMWORKLOAD.
COLLECT ACTIVITY METRICS
Especifica que la métrica del supervisor debe recopilarse para una actividad
enviada por una ocurrencia de la carga de trabajo. El valor por omisión es
COLLECT ACTIVITY METRICS NONE.
Sentencias 979
CREATE WORKLOAD
ON COORDINATOR MEMBER
Especifica que los datos de actividad se recopilan sólo en el miembro
coordinador de la actividad.
ON ALL MEMBERS
Especifica que los datos de actividad van a recopilarse en todos los
miembros en los que se procesa la actividad. En miembros remoto, es
posible capturar un registro de la actividad varias veces, puesto que
esta va y viene en dichos miembros. Si se especifica la cláusula AND
VALUES, los valores de entrada de la actividad se recopilarán sólo
para miembros del coordinador.
NONE
Especifica que los datos de actividad no se recopilan para cada actividad
que se asocie con esta carga de trabajo.
cláusula-recopilar-detalles
Especifica el tipo de datos de actividad que se van a recopilar. El valor por
omisión es WITHOUT DETAILS.
WITHOUT DETAILS
Especifica que los datos sobre cada actividad asociada con esta carga
de trabajo se deben enviar a cualquier supervisor de actividades
activas, cuando la actividad finalice su ejecución. Los detalles sobre la
sentencia, el entorno de compilación y los datos del entorno de sección
no se envían.
WITH
DETAILS
Especifica que la sentencia y los datos del entorno de compilación
deben enviarse a cualquier supervisor de sucesos de actividades
activas para aquellas actividades que las tienen. Los datos del
entorno de sección no se envían.
SECTION
Especifica que los datos de sentencia, de entorno de compilación,
de entorno de sección y los datos reales de sección han de enviarse
a cualquier supervisor de sucesos de actividades activo para
aquellas actividades que incluyan estos. Se debe especificar
DETAILS si se especifica SECTION. Los datos reales de sección
sólo se recopilarán en cualquier miembro donde se recopilen datos
de actividad.
INCLUDE ACTUALS BASE
Especifica que los datos reales de sección sólo se recopilarán en
las particiones donde se recopilen datos de actividad. Para que
se recopilen datos reales de sección, se debe especificar la
cláusula INCLUDE ACTUALS o se debe establecer el
parámetro de configuración de base de datos section_actuals.
La configuración efectiva para la recopilación de datos reales
de sección es la combinación del valor de la cláusula
INCLUDE ACTUALS, el parámetro de configuración de base
de datos section_actuals y el valor <collectsectionactuals>
especificado en la rutina WLM_SET_CONN_ENV. Por ejemplo,
si se especifica INCLUDE ACTUALS BASE, pero el valor del
parámetro de configuración de la base de datos
Sentencias 981
CREATE WORKLOAD
Sentencias 983
CREATE WORKLOAD
NONE
Especifica que el suceso de espera de bloqueo para la carga de trabajo no
se recopila en ningún miembro.
FOR LOCKS WAITING MORE THAN tiempo-espera (SECONDS | MICROSECONDS) | 1
SECOND
Especifica que los datos sobre los sucesos de espera de bloqueo que se
produzcan en esta carga de trabajo se envían a cualquier supervisor de
sucesos de bloqueo activo cuando el bloqueo no se haya adquirido en el
tiempo-espera.
Este valor puede ser cualquier entero no negativo. Utilice una palabra
clave de duración válida para especificar una unidad de tiempo apropiada
para tiempo-espera. El valor válido mínimo para el parámetro tiempo-espera
es 1000 microsegundos.
WITH HISTORY
Especifica que se recopilará el historial de actividades anteriores en la
unidad de trabajo actual para todos los sucesos de bloqueo de este tipo. El
almacenamiento intermedio del historial de actividades se derivará una vez
utilizado el límite de tamaño máximo.
El límite por omisión en el número de actividades anteriores que debe
mantener una aplicación es 250. Si el número de actividades anteriores es
mayor que el límite, sólo se notifican las actividades más recientes. Este
valor por omisión puede alterarse temporalmente utilizando la variable de
registro DB2_MAX_INACT_STMTS para especificar otro valor. Puede elegir
otro valor para el límite a fin de aumentar o reducir la cantidad de
almacenamiento dinámico de supervisión del sistema que se utiliza para la
información de actividades anteriores.
AND VALUES
Especifica que se envíen los valores de datos de entrada a cualquier
supervisor de sucesos de bloqueo activo para las actividades que
dispongan de ellos. Estos valores de datos no incluirán datos LOB,
datos LONG VARCHAR, datos LONG VARGRAPHIC, datos de tipo
estructurado o datos XML. Para sentencias de SQL compilado
mediante la opción de vinculación REOPT ALWAYS, no se
proporcionará ningún valor de datos de compilación de REOPT o
ejecución de sentencia en la información de sucesos.
COLLECT UNIT OF WORK DATA
Especifica que los datos sobre cada transacción asociada con esta carga de
trabajo deben enviarse a la unidad del supervisor de sucesos de trabajo, si hay
alguno activo, cuando finalice la unidad de trabajo. El valor por omisión
cuando no se especifica COLLECT UNIT OF WORK DATA es COLLECT UNIT
OF WORK DATA NONE. El valor por omisión cuando se especifica COLLECT
UNIT OF WORK DATA es COLLECT UNIT OF WORK DATA BASE. Si el
parámetro de configuración de base de datos mon_uow_data se establece en
BASE, tendrá prioridad sobre el parámetro COLLECT UNIT OF WORK DATA.
Un valor NONE para mon_uow_data indica que se utilizan los parámetros
COLLECT UNIT OF WORK DATA de cargas de trabajo individuales.
NONE
Especifica que ninguna unidad de datos de trabajo para las transacciones
asociadas con esta carga de trabajo se envía al supervisor de sucesos de
unidad de trabajo. El valor por omisión es COLLECT UNIT OF WORK
DATA NONE.
BASE
Especifica que se envíe el nivel básico de datos para las transacciones
asociadas con esta carga de trabajo al supervisor de sucesos de unidad de
trabajo.
Parte de la información notificada en un suceso de unidad de trabajo
corresponde a métricas de petición de nivel del sistema. La recopilación de
estas métricas se controla independientemente de la recopilación de datos
de la unidad de trabajo. Las métricas de petición se controlan con la
cláusula COLLECT REQUEST METRICS de la superclase o bien mediante
la utilización del parámetro de configuración de base de datos
mon_req_metrics. La superclase de servicio con la que está asociada la
carga de trabajo, o la superclase de servicio de la subclase de servicio con
la que está asociada la carga de trabajo, debe tener habilitada la
recopilación de métricas de petición para que las métricas de petición estén
presentes en el suceso de unidad de trabajo. Si la recopilación de métricas
de petición no está habilitada, el valor de las métricas de petición será cero.
INCLUDE PACKAGE LIST
Especifica que han de enviarse el nivel básico de datos y la lista de
paquetes de las transacciones que se asocian a esta carga de trabajo al
supervisor de sucesos de unidad de trabajo.
El tamaño de la lista de paquetes recopilados lo determina el valor del
parámetro de configuración de base de datos mon_pkglist_sz. Si este valor
es 0, la lista de paquetes no se recopilará, aunque se haya especificado la
opción PACKAGE LIST.
En un entorno de base de datos particionada, la lista de paquetes sólo está
disponible en el miembro coordinador. El nivel BASE se recopilará en los
miembros remotos.
Parte de la información notificada en un suceso de unidad de trabajo
corresponde a métricas de petición de nivel del sistema. La recopilación de
estas métricas se controla independientemente de la recopilación de datos
de la unidad de trabajo. Las métricas de petición se controlan con la
cláusula COLLECT REQUEST METRICS de la superclase o bien mediante
la utilización del parámetro de configuración de base de datos
mon_req_metrics. La superclase de servicio con la que está asociada la
carga de trabajo, o la superclase de servicio de la subclase de servicio con
la que está asociada la carga de trabajo, debe tener habilitada la
recopilación de métricas de petición para que las métricas de petición estén
presentes en el suceso de unidad de trabajo. Si la recopilación de métricas
de petición no está habilitada, el valor de las métricas de petición será cero.
INCLUDE EXECUTABLE LIST
Especifica que se recopilará la lista de ID ejecutables para una unidad de
trabajo junto con el nivel básico de datos y se enviarán al supervisor de
sucesos de la unidad de trabajo.
cláusula-plantilla-histograma
Especifica las plantillas de histograma que han de utilizarse al recopilar datos
de actividad agregados para las actividades que se ejecutan en la carga de
trabajo.
ACTIVITY LIFETIME HISTOGRAM TEMPLATE nombre-plantilla
Especifica la plantilla que describe el histograma utilizado para recopilar
datos estadísticos sobre la duración, en milisegundos, de las actividades de
DB2 en ejecución en la carga de trabajo durante un intervalo específico.
Este tiempo incluye tanto el tiempo que está en cola como el tiempo de
Sentencias 985
CREATE WORKLOAD
Normas
v Una sentencia de SQL exclusiva de gestión de carga de trabajo (WLM) debe ir
después de una sentencia COMMIT o ROLLBACK (SQLSTATE 5U021). Las
sentencias de SQL exclusivas de WLM son:
– CREATE HISTOGRAM TEMPLATE, ALTER HISTOGRAM TEMPLATE o
DROP (HISTOGRAM TEMPLATE)
– CREATE SERVICE CLASS, ALTER SERVICE CLASS o DROP (SERVICE
CLASS)
– CREATE THRESHOLD, ALTER THRESHOLD o DROP (THRESHOLD)
– CREATE WORK ACTION SET, ALTER WORK ACTION SET o DROP (WORK
ACTION SET)
– CREATE WORK CLASS SET, ALTER WORK CLASS SET o DROP (WORK
CLASS SET)
– CREATE WORKLOAD, ALTER WORKLOAD o DROP (WORKLOAD)
– GRANT (privilegios de carga de trabajo) o REVOKE (privilegios de carga de
trabajo)
v Una sentencia de SQL exclusiva de WLM no puede emitirse en una transacción
global (SQLSTATE 51041) como por ejemplo, una transacción XA.
Notas
v Los cambios se graban en el catálogo del sistema, pero no surten efecto hasta
que se confirmen, incluso para la conexión que emite la sentencia.
v Cuando se establece una conexión de base de datos, el gestor de base de datos
busca una carga de trabajo coincidente basada en los atributos de conexión
especificados en la cláusula POSITION (por orden de especificación). Si se
encuentra una carga de trabajo coincidente, el gestor de base de datos
compruebe si el usuario de sesión actual tiene privilegio de USAGE en dicha
carga de trabajo. Si el usuario de sesión no tiene privilegio de USAGE en la
carga de trabajo, el gestor de base de datos busca la siguiente carga de trabajo
coincidente. Si el usuario de sesión tiene privilegio de USAGE en esta carga de
trabajo, la conexión se asociará a la carga de trabajo. Si no se encuentra una
carga de trabajo coincidente, la conexión se asocia a la carga de trabajo de
usuario por omisión, SYSDEFAULTUSERWORKLOAD. Si el usuario de sesión
no tiene privilegio de USAGE en SYSDEFAULTUSERWORKLOAD, se devuelve
un error (SQLSTATE 42501).
v La asociación de carga de trabajo vuelve a evaluarse al principio de cada unidad
de trabajo nueva si el gestor de base de datos detecta una de las siguientes
condiciones:
– Han cambiado los atributos de conexión. Esto puede suceder si se han
producido alguno de los sucesos siguientes:
- Se ha invocado la API de información de cliente establecido (sqleseti) y se
ha cambiado los atributos de conexión incluidos en la definición de carga
de trabajo. Tenga en cuenta que aunque la información de cliente puede
establecerse por medio del usuario final de modo que pueda iniciarse una
reevaluación de carga de trabajo, la propia acción de correlación de carga
de trabajo podría producirse si el usuario de sesión no tiene el privilegio de
USAGE en la carga de trabajo.
- La sentencia SET SESSION AUTHORIZATION se ha invocado y ha
cambiado el usuario de sesión actual.
- Han cambiado los roles que están disponibles para un usuario de sesión.
– Se crea una carga de trabajo.
Sentencias 987
CREATE WORKLOAD
Ejemplos
v Ejemplo 1: Cree una carga de trabajo denominada CAMPAIGN para las
peticiones que envía un usuario de sesión que pertenece al grupo FINANCE.
Estas peticiones van a ejecutarse en la clase de servicio de usuario por omisión
SYSDEFAULTUSERCLASS.
Sentencias 989
CREATE WORKLOAD
CREATE WRAPPER
La sentencia CREATE WRAPPER registra un derivador en un servidor federado.
Un derivador es un mecanismo mediante el cual un servidor federado puede
interactuar con determinados tipos de fuentes de datos.
Invocación
Autorización
Sintaxis
CREATE WRAPPER nombre-derivador
LIBRARY nombre-biblioteca
,
Descripción
nombre-derivador
Nombra el derivador. Puede ser:
v Un nombre predefinido. Si se especifica un nombre predefinido, el servidor
federado asigna automáticamente un valor por omisión a nombre-biblioteca.
v Un nombre suministrado por el usuario. Si se proporciona un nombre
suministrado por el usuario, también se debe especificar el nombre-biblioteca
adecuado que se debe utilizar con ese derivador y sistema operativo.
LIBRARY nombre-biblioteca
Nombra el archivo que contiene el módulo de biblioteca del derivador.
El nombre de biblioteca puede especificarse como un nombre de vía de acceso
absoluta o, simplemente, puede especificarse el nombre base (sin la vía de
acceso). Si sólo se especifica el nombre base, la biblioteca debe residir en el
subdirectorio lib (UNIX) o en el subdirectorio bin (Windows) de la vía de
acceso de DB2. El nombre-biblioteca se debe especificar entre comillas simples.
La opción LIBRARY sólo es necesaria si se utiliza un nombre-derivador
proporcionado por el usuario. Esta opción no debe utilizarse cuando se
proporciona un nombre-derivador predefinido.
OPTIONS
Indica las opciones de derivador que se deben habilitar o restablecer.
nombre-opción-derivador
Nombra una opción de derivador que se debe habilitar o restaurar.
Sentencias 991
CREATE WRAPPER
constante-serie
Especifica el valor para nombre-opción-derivador como una constante de serie
de caracteres. La constante-serie se debe especificar entre comillas simples.
Algunas opciones de derivador pueden utilizarlas todos los derivadores y
otras son específicas de un derivador en particular.
Notas
v Alternativas de sintaxis: se soporta la sintaxis siguiente para mantener la
compatibilidad con versiones anteriores de DB2:
– ADD puede especificarse antes de nombre-opción-derivador constante-serie.
Ejemplos
v Ejemplo 1: Registre el derivador NET8 en un servidor federado para acceder a
fuentes de datos Oracle. NET8 es el nombre predefinido para el derivador que
puede utilizar para acceder a las fuentes de datos Oracle.
CREATE WRAPPER NET8
v Ejemplo 2: Registre un derivador en un servidor federado DB2 que utiliza el
sistema operativo Linux para acceder a fuentes de datos ODBC. Asigne el
nombre odbc al derivador que se registra en la base de datos federada. La vía de
acceso completa de la biblioteca que contiene el Gestor de controladores ODBC
se define en la opción de derivador MODULE ‘/usr/lib/odbc.so’.
CREATE WRAPPER odbc OPTIONS (MODULE '/usr/lib/odbc.so')
v Ejemplo 3: Registre un derivador en un servidor federado DB2 que utiliza el
sistema operativo Windows para acceder a fuentes de datos ODBC. El nombre
de biblioteca para el derivador de ODBC es ‘db2rcodbc.dll’.
CREATE WRAPPER odbc LIBRARY 'db2rcodbc.dll’
DECLARE CURSOR
La sentencia DECLARE define un cursor.
Invocación
Autorización
El término “sentencia SELECT del cursor” se utiliza para especificar las normas de
autorización. La sentencia SELECT del cursor es una de las sentencias siguientes:
v La sentencia-select preparada que se identifica mediante el nombre-sentencia
v La sentencia-select especificada
Si se especifica el nombre-sentencia:
v El ID de autorización de la sentencia es el ID de autorización de ejecución.
v La comprobación de autorización se lleva a cabo cuando se prepara la sentencia
SELECT.
v El cursor no puede abrirse si la sentencia SELECT no está en estado preparado.
Si se especifica la sentencia-select:
v No se comprueban los privilegios GROUP.
v El ID de autorización de la sentencia es el ID de autorización especificado
durante la preparación del programa.
Sintaxis
DECLARE nombre-cursor CURSOR ? posibilidad-mantenimiento ?
posibilidad de mantenimiento:
WITHOUT HOLD
WITH HOLD
posibilidad de retorno:
Sentencias 993
DECLARE CURSOR
WITHOUT RETURN
TO CALLER
WITH RETURN
TO CLIENT
Descripción
nombre-cursor
Especifica el nombre del cursor que se ha creado al ejecutar el programa
fuente. Este nombre no debe ser el mismo que el de ningún otro cursor que
esté declarado en el programa fuente. El cursor deberá abrirse para poder
utilizarlo.
WITHOUT HOLD o WITH HOLD
Especifica si se debe impedir que el cursor se cierre como consecuencia de una
operación de confirmación.
WITHOUT HOLD
No impide que el cursor se cierre como consecuencia de una operación de
confirmación. Es el valor por omisión.
WITH HOLD
Mantiene recursos en varias unidades de trabajo. El efecto del atributo del
cursor WITH HOLD es el siguiente:
v En las unidades de trabajo que finalizan con COMMIT:
– Los cursores abiertos definidos con WITH HOLD permanecen
abiertos. El cursor se sitúa antes de la siguiente fila lógica de la tabla
de resultados.
Si se emite la sentencia DISCONNECT después de la sentencia
COMMIT para una conexión con cursores WITH HOLD, los cursores
retenidos deben cerrarse explícitamente, porque si no se supondrá
que la conexión ha realizado cierto trabajo (simplemente por tener
abiertos cursores WITH HOLD aun sin haber emitido sentencias de
SQL) y fallará la sentencia DISCONNECT.
– Se liberan todos los bloqueos, excepto los bloqueos que protegen la
posición actual del cursor, de los cursores WITH HOLD abiertos. Los
bloqueos retenidos incluyen los bloqueos sobre la tabla y para los
entornos paralelos, los bloqueos sobre las filas en las que los cursores
están situados actualmente. Los bloqueos sobre paquetes y secciones
de SQL dinámico (si las hay) se mantienen.
– Las operaciones válidas en los cursores definidos WITH HOLD que
están inmediatamente a continuación de una petición COMMIT son:
- FETCH: Lee la siguiente fila del cursor.
- CLOSE: Cierra el cursor.
– UPDATE y DELETE CURRENT OF CURSOR sólo son válidas para
aquellas filas que se recuperan dentro de la misma unidad de trabajo.
– Se liberan los localizadores de LOB.
– El conjunto de filas modificado por:
- Una sentencia de cambio de datos
- Rutinas que modifican datos SQL incorporados dentro de cursores
WITH HOLD abiertos
se confirma.
v Para las unidades de trabajo que finalizan con ROLLBACK:
994 Consulta de SQL - Volumen 2
DECLARE CURSOR
Sentencias 995
DECLARE CURSOR
Notas
v Un programa invocado desde otro programa o desde otro archivo fuente dentro
del mismo programa no puede utilizar el cursor que fue abierto por el programa
llamador.
v Los procedimientos no anidados que no estén definidos con LANGUAGE SQL
tendrán WITH RETURN TO CALLER como comportamiento por omisión si se
especifica DECLARE CURSOR sin una cláusula WITH RETURN y el cursor se
deja abierto en el procedimiento. Esto proporciona compatibilidad con
procedimientos de versiones anteriores, en las cuales los procedimientos pueden
devolver conjuntos de resultados a las aplicaciones cliente correspondientes. Para
evitar este comportamiento, cierre todos los cursores abiertos en el
procedimiento.
v Si la sentencia SELECT de un cursor contiene CURRENT DATE, CURRENT
TIME o CURRENT TIMESTAMP, todas las referencias a estos registros especiales
producirán el mismo valor "datatime" (de fecha y hora) respectivo en cada
FETCH. Este valor se determina al abrir el cursor.
v Para lograr un proceso de datos más eficaz, el gestor de bases de datos puede
agrupar los datos en bloques para cursores de sólo lectura cuando se recuperan
datos de un servidor remoto. Mediante la cláusula FOR UPDATE, el gestor de
bases de datos puede decidir si un cursor es actualizable o no. La posibilidad de
actualización también se utiliza para determinar la selección de la vía de acceso.
Si un cursor no se va a utilizar en una sentencia UPDATE con posición o
DELETE, debería declararse como FOR READ ONLY.
v Un cursor en estado abierto designa una tabla de resultado y una posición
relativa para las filas de dicha tabla. La tabla es la tabla de resultados
especificada por la sentencia SELECT del cursor.
v Un cursor es suprimible si se cumplen todas las condiciones siguientes:
– Cada cláusula FROM de la selección completa externa sólo identifica una
tabla base o vista suprimible (no puede identificar una expresión de tabla
común, una expresión de tabla anidada ni un apodo) sin utilizar la cláusula
OUTER.
– La selección completa externa no incluye una cláusula VALUES.
– La selección completa externa no incluye una cláusula GROUP BY ni una
cláusula HAVING.
– La selección completa externa no incluye funciones de columna en la lista de
selección.
– La selección completa externa no incluye operaciones SET (UNION, EXCEPT
o INTERSECT) a excepción de UNION ALL.
– La selección completa externa no contiene una especificación de período FOR
SYSTEM_TIME.
– La lista de selección de la selección completa externa no incluye DISTINCT.
UDF1:
UDF2:
Sentencias 997
DECLARE CURSOR
Ejemplos
Invocación
Autorización
Sintaxis
( definición-columna )
LIKE nombre1-tabla
nombre-vista opciones-copia
AS ( seleccióncompleta ) DEFINITION ONLY
opciones-copia
Sentencias 999
DECLARE GLOBAL TEMPORARY TABLE
LOGGED
? ?
ON ROLLBACK DELETE ROWS WITH REPLACE
NOT LOGGED
ON ROLLBACK PRESERVE ROWS
? ?
IN nombre-espacio-tablas cláusula-distribución
definición-columna:
nombre-columna tipo-datos
opciones-columna
tipo-datos:
tipo-incorporado
nombre-tipo-diferenciado
tipo-incorporado:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(34)
DECFLOAT
(16)
(1)
CHARACTER
CHAR (entero) (1)
BYTE FOR BIT DATA
VARCHAR (entero )
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1)
NCHAR
NATIONAL CHAR (entero)
CHARACTER
NVARCHAR (entero)
NCHAR VARYING
NATIONAL CHAR VARYING
CHARACTER
(1M)
NCLOB
NCHAR LARGE OBJECT (entero )
NATIONAL CHARACTER LARGE OBJECT K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
XML
opciones-columna:
? ? ?
NOT NULL cláusula-por-omisión
GENERATED ALWAYS AS IDENTITY
BY DEFAULT opciones-identidad
Sentencias 1001
DECLARE GLOBAL TEMPORARY TABLE
cláusula-por-omisión:
WITH
DEFAULT
valores-omisión
valores-omisión:
constante
registro-especial-fecha-hora
registro-especial-usuario
CURRENT SCHEMA
NULL
función-conversión ( constante )
registro-especial-fecha-hora
registro-especial-usuario
CURRENT SCHEMA
EMPTY_CLOB()
EMPTY_DBCLOB()
EMPTY_NCLOB()
EMPTY_BLOB()
opciones-copia:
COLUMN ATTRIBUTES
EXCLUDING IDENTITY
? ? ?
COLUMN COLUMN ATTRIBUTES
INCLUDING DEFAULTS INCLUDING IDENTITY
EXCLUDING
cláusula-distribución:
,
HASH
DISTRIBUTE BY ( nombre-columna )
Notas:
1 La cláusula FOR BIT DATA se puede especificar en cualquier orden con las
restricciones de columna siguientes.
Descripción
nombre-tabla
Designa la tabla temporal. Si se especifica explícitamente, el calificador debe
ser SESSION, de lo contrario se produce un error (SQLSTATE 428EK). Si no se
especifica el calificador, se asigna SESSION de forma implícita.
Cada sesión que define una tabla temporal declarada con el mismo
nombre-tabla tiene su propia descripción exclusiva de esa tabla temporal
declarada. La cláusula WITH REPLACE se debe especificar si nombre-tabla
identifica una tabla temporal declarada que ya existe en la sesión (SQLSTATE
42710).
Es posible que el catálogo ya contenga una tabla, vista, alias o apodo que tenga
el mismo nombre y el nombre de esquema SESSION. En este caso:
Sentencias 1003
DECLARE GLOBAL TEMPORARY TABLE
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 en el caso de que no se
suministre 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”.
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:
v representar un valor que pueda asignarse a la columna de
acuerdo con las normas de asignación
v no ser una constante de coma flotante a menos que la
columna esté definida con un tipo de datos de coma flotante
v 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.
v 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)).
v estar expresada con un máximo de 254 bytes, incluyendo los
caracteres de comillas, cualquier carácter prefijo como la X
Sentencias 1005
DECLARE GLOBAL TEMPORARY TABLE
Sentencias 1007
DECLARE GLOBAL TEMPORARY TABLE
ON COMMIT
Especifica la acción que se realiza sobre la tabla temporal global cuando se
ejecuta una operación COMMIT. El valor por omisión es DELETE ROWS.
DELETE ROWS
Se suprimen todas las filas de la tabla si no hay ningún cursor abierto en la
tabla que esté definido con WITH HOLD.
PRESERVE ROWS
Las filas de la tabla se conservan.
LOGGED o NOT LOGGED
Especifica si se anotan cronológicamente las operaciones para la tabla. El valor
por omisión es LOGGED.
LOGGED
Especifica que las operaciones de inserción, actualización o supresión
efectuadas en la tabla, así como la creación o descarte de la tabla, deben
anotarse cronológicamente.
NOT LOGGED
Especifica que las operaciones de inserción, actualización o supresión
efectuadas en la tabla no deben anotarse cronológicamente, pero que la
creación o descarte de la tabla sí debe anotarse cronológicamente. Durante
una operación ROLLBACK (o ROLLBACK TO SAVEPOINT):
v Si la tabla se había creado dentro de una unidad de trabajo (o punto de
salvaguarda), la tabla se descarta
v Si la tabla se había descartado dentro de una unidad de trabajo (o punto
de salvaguarda), la tabla vuelve a crearse, pero sin datos
ON ROLLBACK
Especifica la acción que va a tener lugar en la tabla temporal global sin
anotaciones cronológicas cuando se realice una operación ROLLBACK (o
ROLLBACK TO SAVEPOINT). El valor por omisión es DELETE ROWS.
DELETE ROWS
Si se han cambiado los datos de la tabla, se suprimirán todas las filas.
PRESERVE ROWS
Las filas de la tabla se conservan.
WITH REPLACE
Indica que, en el caso de que ya exista una tabla temporal declarada con el
nombre especificado, la tabla existente se sustituye por la tabla temporal
definida por esta sentencia (y todas las filas de la tabla existente se eliminan).
Si no se especifica WITH REPLACE, el nombre especificado no debe identificar
una tabla temporal declarada que ya exista en la sesión actual (SQLSTATE
42710).
IN nombre-espacio-tablas
Identifica el espacio de tablas donde se creará una instancia de la tabla
temporal declarada. El espacio de tablas debe existir y estar definido como
USER TEMPORARY (SQLSTATE 42838), para el cual el ID de autorización de
la sentencia tiene el privilegio USE (SQLSTATE 42501). Si no se especifica esta
cláusula, se elige el espacio de tablas USER TEMPORARY con el tamaño de
página menor posible para el cual el ID de autorización de la sentencia tenga
el privilegio USE. Cuando existe más de un espacio de tablas que puede
elegirse, se establece una prioridad basada en quién recibió el privilegio USE:
1. El ID de autorización
Sentencias 1009
DECLARE GLOBAL TEMPORARY TABLE
Notas
v Debe existir un espacio de tablas temporal de usuario antes de declarar una
tabla temporal declarada (SQLSTATE 42727).
v Referencia a una tabla temporal declarada: La descripción de una tabla
temporal declarada no aparece en el catálogo de DB2 (SYSCAT.TABLES); por
consiguiente, no es permanente y no se puede compartir con otras conexiones a
la base de datos. Esto significa que cada sesión que define una tabla temporal
declarada (nombre-tabla) tiene su propia descripción exclusiva de esa tabla.
Para hacer referencia a la tabla temporal declarada en una sentencia de SQL
(distinta de la sentencia DECLARE GLOBAL TEMPORARY TABLE), la tabla
debe estar calificada, implícita o explícitamente, por el nombre de esquema
Sentencias 1011
DECLARE GLOBAL TEMPORARY TABLE
Ejemplos
v Ejemplo 1: definir una tabla temporal declarada con definiciones de columna
para un número de empleado, salario, incentivo y comisión.
DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMP_EMP
(EMPNO CHAR(6) NOT NULL,
SALARY DECIMAL(9, 2),
BONUS DECIMAL(9, 2),
COMM DECIMAL(9, 2)) ON COMMIT PRESERVE ROWS
v Ejemplo 2: supongamos que existe la tabla base USER1.EMPTAB y que contiene
tres columnas, una de las cuales es una columna de identidad. Declarar una
tabla temporal que tenga los mismos nombres y atributos de columna (incluidos
los atributos de identidad) que la tabla base.
Sentencias 1013
DELETE
DELETE
La sentencia DELETE suprime filas de una tabla, apodo o vista, o las tablas,
apodos o vistas subyacentes de la selección completa especificada.
La supresión de una fila de un apodo suprime la fila del objeto de fuente de datos
al que hace referencia el apodo. La supresión de una fila de una vista suprime la
fila de la tabla en la que se basa la vista si no se ha definido ningún activador
INSTEAD OF para la operación de supresión en esta vista. Si se ha definido un
activador de este tipo, en su lugar se ejecutará el activador.
Invocación
Autorización
Para ejecutar cualquiera de las dos formas de esta sentencia, los privilegios del ID
de autorización de la sentencia deben incluir, como mínimo, una de las
autorizaciones siguientes:
v Privilegio DELETE para la tabla, vista o apodo de donde van a suprimirse filas
v Privilegio CONTROL sobre la tabla, vista o apodo de donde van a suprimirse
filas
v Autorización DATAACCESS
Para ejecutar una sentencia DELETE buscada, los privilegios del ID de autorización
de la sentencia también deben incluir, como mínimo, una de las autorizaciones
siguientes para cada tabla, vista o apodo al que haga referencia una subconsulta:
v Privilegio SELECT
v Privilegio CONTROL
v Autorización DATAACCESS
Sintaxis (delete-con-búsqueda)
DELETE FROM nombre-tabla
nombre-vista cláusula-período
apodo
ONLY ( nombre-tabla )
nombre-vista
( selección completa )
cláusula-correlación columnas-include
cláusula-asignación WHERE condición-búsqueda WITH RR
RS
CS
UR
cláusula-período:
columnas-include:
Sintaxis (delete-con-posición)
DELETE FROM nombre-tabla
nombre-vista
apodo
ONLY ( nombre-tabla )
nombre-vista
Sentencias 1015
DELETE
cláusula-correlación:
AS
nombre-correlación
( nombre-columna )
Descripción
FROM nombre-tabla, nombre-vista, apodo, o (selección completa)
Identifica el objeto de la operación de supresión. El nombre debe identificar
uno de los objetos siguientes:
v Una tabla o una vista que exista en el catálogo en el servidor actual
v Una tabla o una vista en un servidor remoto especificado utilizando un
nombre-objeto-remoto
El objeto no debe ser una tabla de catálogo, una vista de catálogo, una tabla de
consulta materializada mantenida por el sistema o una vista de sólo lectura.
Si nombre-tabla es una tabla con tipo, la sentencia puede suprimir filas de la
tabla o cualquiera de sus subtablas correspondientes.
Si nombre-vista es una vista con tipo, la sentencia puede que elimine las filas de
la vista subyacente o de las vistas subyacentes de las subvistas
correspondientes de la vista. Si nombre-vista es una vista normal con una tabla
subyacente que es una tabla con tipo, puede que la sentencia suprima filas de
la tabla con tipo o cualquiera de sus propias subtablas.
Si el objeto de la operación de actualización es una selección completa, esta
debe ser actualizable, según lo definido en el elemento “Vistas suprimibles” de
Notas de la descripción de la sentencia CREATE VIEW.
Para obtener restricciones adicionales relacionadas con las tablas temporales y
el uso de una vista o selección completa como destino de la operación de
supresión, consulte "Consideraciones para una tabla temporal de período de
sistema" y "Consideraciones para una tabla temporal de período de aplicación"
en la sección Notas.
Sólo puede hacerse referencia a las columnas de la tabla especificada en la
cláusula WHERE. Para una sentencia DELETE con posición, el cursor asociado
también debe haber especificado la tabla o vista en la cláusula FROM sin
utilizar ONLY.
FROM ONLY (nombre-tabla)
Aplicable a las tablas con tipo, la palabra clave ONLY especifica que la
sentencia sólo se debe aplicar a los datos de la tabla especificada y no puede
suprimir las filas de las subtablas correspondientes. Para una sentencia
DELETE con posición, el cursor asociado también debe haber especificado la
tabla en la cláusula FROM utilizando ONLY. Si nombre-tabla no es una tabla
con tipo, la palabra clave ONLY no tiene efecto en la sentencia.
FROM ONLY (nombre-vista)
Aplicable a las vistas con tipo, la palabra clave ONLY especifica que la
sentencia sólo se debe aplicar a los datos de la vista especificada y no puede
suprimir las filas de las subvistas correspondientes. Para una sentencia
DELETE con posición, el cursor asociado también debe haber especificado la
vista en la cláusula FROM utilizando ONLY. Si nombre-vista no es una vista con
tipo, la palabra clave ONLY no tiene efecto en la sentencia.
cláusula-período
Especifica que una cláusula de período se aplica al destino de la operación de
supresión.
Si el destino de la operación de supresión es una vista, se aplican las
condiciones siguientes a la vista:
v La cláusula FROM de la selección completa externa de la definición de vista
debe incluir una referencia, directa o indirectamente, a una tabla temporal de
período de aplicación (SQLSTATE 42724M).
v No debe definirse un activador INSTEAD OF DELETE para la vista
(SQLSTATE 428HY).
FOR PORTION OF BUSINESS_TIME
Especifica que la supresión sólo se aplica a los valores de fila de la parte
correspondiente al período en la fila que especifique la cláusula de
período. El período BUSINESS_TIME debe existir en la tabla (SQLSTATE
4274M). No debe especificarse FOR PORTION OF BUSINESS_TIME si el
valor del registro especial CURRENT TEMPORAL BUSINESS_TIME no es
NULL cuando la opción de vinculación BUSTIMESENSITIVE está
establecida en YES (SQLSTATE 428HY).
FROM valor1 TO valor2
Especifica que la supresión se aplica a filas durante el período
especificado desde valor1 hasta valor2. No se suprime ninguna fila si
valor1 es superior o igual a valor2 o si valor1 o valor2 es el valor nulo
(SQLSTATE 02000).
Para el período especificado con FROM valor1 TO valor2, el período
BUSINESS_TIME en una fila del destino de la supresión tiene uno de
los estados siguientes:
v Se solapa con el principio del período especificado si el valor de la
columna de inicio es inferior a valor1 y el valor de la columna de fin
es superior a valor1.
v Se solapa con el final del período especificado si el valor de la
columna de fin es superior o igual a valor2 y el valor de la columna
de inicio es inferior a valor2.
v Está contenido por completo en el período especificado si el valor
de la columna de inicio para BUSINESS_TIME es superior o igual a
valor1 y el valor para la columna de fin correspondiente es inferior o
igual a valor2.
v Está contenido parcialmente en el período especificado si la fila se
solapa con el principio del período especificado o el fin del período
especificado, pero no con ambos.
v Se solapa por completo con el período especificado si el período de
la fila se solapa con el principio y el fin del período especificado.
v No está contenido en el período si las dos columnas de
BUSINESS_TIME son inferiores o iguales a valor1 o superiores o
iguales a valor2.
Si el período BUSINESS_TIME de una fila no está contenido en el
período especificado, la fila no se suprime. De lo contrario, la
supresión se aplica en función de cómo los valores de las columnas del
período BUSINESS_TIME se solapan con el período especificado, de la
siguiente forma:
v Si el período BUSINESS_TIME de una fila está contenido por
completo en el período especificado, se suprime la fila.
Sentencias 1017
DELETE
INCLUDE
Especifica una lista de columnas que se van a incluir en la tabla de
resultados intermedia de la sentencia DELETE.
nombre-columna
Especifica una columna de la tabla de resultados intermedia de la sentencia
DELETE. El nombre no puede coincidir con el nombre de otra columna
include ni de una columna en nombre-tabla o nombre-vista (SQLSTATE
42711).
tipo-datos
Especifica el tipo de datos de la columna include. El tipo de datos debe ser
uno que reciba soporte de la sentencia CREATE TABLE.
cláusula-asignación
Consulte la descripción de cláusula-asignación bajo la sentencia UPDATE. Se
aplican las mismas normas. Las columnas-include son las únicas columnas que
se pueden definir utilizando la cláusula-asignación (SQLSTATE 42703).
WHERE
Especifica una condición que selecciona las filas que se deben suprimir. Puede
omitirse la cláusula, se puede especificar una condición de búsqueda o
nombrar un cursor. Si se omite la cláusula, se suprimen todas las filas de la
tabla o vista.
condición-búsqueda
Cada nombre-columna de la condición de búsqueda, que no sea una
subconsulta, debe identificar una columna de la tabla o vista.
La condición-búsqueda se aplica a cada fila de la tabla, vista o apodo y las
filas que se suprimen son aquellas para las que el resultado de la
condición-búsqueda es verdadero.
Si la condición de búsqueda contiene una subconsulta, puede considerarse
que esta se ejecuta cada vez que se aplica la condición de búsqueda a una fila
y que los resultados se utilizan para aplicar la condición de búsqueda. De
hecho, una subconsulta sin referencias correlacionadas sólo se ejecuta una
vez, mientras que una subconsulta con una referencia correlacionada puede
tener que ejecutarse una vez para cada fila. Si una subconsulta hace
referencia a una tabla de objetos de una sentencia DELETE o a una tabla
dependiente con una norma de supresión de CASCADE o SET NULL, la
subconsulta se evalúa por completo antes de suprimir cualquier fila.
CURRENT OF nombre-cursor
Identifica un cursor que se ha definido en una sentencia DECLARE
CURSOR del programa. La sentencia DECLARE CURSOR debe preceder a
la sentencia DELETE.
La tabla, vista o apodo que se ha indicado también debe indicarse en la
cláusula FROM de la sentencia SELECT del cursor y la tabla de resultados
del cursor no debe ser de sólo lectura. Para ver una explicación sobre las
tablas de resultados de sólo lectura, consulte “DECLARE CURSOR”.
Cuando se ejecuta la sentencia DELETE, el cursor debe posicionarse en una
fila: dicha fila es la que se suprime. Después de la supresión, el cursor se
posiciona antes de la siguiente fila de la tabla de resultados. Si no hay una
fila siguiente, el cursor se posiciona después de la última fila.
WITH
Especifica el nivel de aislamiento utilizado al localizar las filas que se deben
suprimir.
Sentencias 1019
DELETE
RR Lectura repetible
RS Estabilidad de lectura
CS Estabilidad del cursor
UR Lectura no confirmada
Normas
v Activadores: Las sentencias DELETE pueden dar lugar a que se ejecuten
activadores. Un activador puede dar lugar a que se ejecuten otras sentencias o a
que se generen condiciones de error basadas en las filas suprimidas. Si una
sentencia DELETE de una vista da lugar a que se ejecute un activador INSTEAD
OF, se comprobará la integridad referencial de las actualizaciones que se han
realizado en el activador y no la de las tablas subyacentes de la vista que ha
dado lugar a que se ejecutara el activador.
v Integridad referencial: Si la tabla identificada o la tabla base de la vista
identificada es padre, las filas seleccionadas para la supresión no deberán tener
ningún dependiente en una relación con una norma de supresión de RESTRICT,
y la sentencia DELETE no deberá aplicarse en cascada a las filas descendentes
que tengan dependientes en una relación con una norma de supresión de
RESTRICT.
Si no se impide la operación de supresión por una norma de supresión
RESTRICT, se suprimen las filas seleccionadas. Las filas que son dependientes de
las filas seleccionadas también se ven afectadas:
– Las columnas con posibilidad de contener nulos de las claves foráneas de
cualquier fila que sea dependiente en una relación con una norma de
supresión de SET NULL se establecen en el valor nulo.
– Las filas que sean sus dependientes en una relación con una norma de
supresión de CASCADE también se suprimen y se aplican, a su vez, las
normas anteriores a estas filas.
Se comprueba la norma de supresión de NO ACTION para imponer que las
claves foráneas no nulas hagan referencia a una fila padre existente después de
que se hayan impuesto otras restricciones de referencia.
v Política de seguridad: si se protege la tabla identificada o la tabla base de la
vista identificada con una política de seguridad, el ID de autorización de la
sesión debe tener las credenciales de control de acceso basado en etiquetas
(LBAC) que permiten:
– Acceso de grabación a todas las columnas protegidas (SQLSTATE 42512)
– Acceso de grabación y de lectura a todas las filas que se han seleccionado
para la supresión (SQLSTATE 42519)
Notas
v Si se produce un error durante la ejecución de una sentencia DELETE de
múltiples filas, no se realiza ningún cambio en la base de datos.
v Salvo que ya existan los bloqueos adecuados, se adquieren uno o más bloqueos
exclusivos durante la ejecución de una sentencia DELETE satisfactoria. La
emisión de una sentencia COMMIT o ROLLBACK liberará los bloqueos. Hasta
que se liberen los bloqueos por una operación de confirmación o de
retrotracción, el efecto de la operación de supresión sólo lo percibirán:
Sentencias 1021
DELETE
– Una invocación de una rutina de SQL que tiene un paquete asociado a ella
– Una invocación de una rutina externa con una indicación de acceso a los
datos que no es NO SQL
Si el registro especial CURRENT TEMPORAL BUSINESS_TIME se establece en
un valor no nulo, el destino de la sentencia DELETE no debe ser una vista
definida con WITH CHECK OPTION si la definición de vista incluye una
cláusula WHERE que contiene uno de los elementos de sintaxis siguientes
(SQLSTATE 51046):
– Una subconsulta que hace referencia a una tabla temporal de período de
aplicación (directa o indirectamente)
– Una invocación de una rutina de SQL que tiene un paquete asociado a ella
– Una invocación de una rutina externa con una indicación de acceso a los
datos que no es NO SQL
Una sentencia DELETE para una tabla temporal de período de aplicación que
contiene una cláusula FOR PORTION OF BUSINESS_TIME indica entre qué dos
puntos en el tiempo las supresiones están en vigor. Cuando se especifica FOR
PORTION OF BUSINESS_TIME y el valor de período de una fila, especificado
por los valores de columna de inicio de fila y columna de fin de fila, sólo está
contenido parcialmente en el período especificado desde valor1 hasta valor2, la
fila se suprime y una o dos filas se insertan de forma automática para
representar la parte de la fila que no se ha suprimido. 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 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.
Cuando una tabla temporal de período de aplicación es el destino de una
sentencia DELETE, el valor en vigor para el registro especial CURRENT
TEMPORAL BUSINESS_TIME no es el valor nulo y la opción de vinculación
BUSTIMESENSITIVE está establecida en YES, están implícitos los predicados
adicionales siguientes:
bt_begin <= CURRENT TEMPORAL BUSINESS_TIME
AND bt_end > CURRENT TEMPORAL BUSINESS_TIME
donde bt_begin y bt_end son las columnas inicial y final del período
BUSINESS_TIME de la tabla de destino de la sentencia DELETE.
v Consideraciones sobre tablas temporales de período de aplicación y
activadores: Cuando se suprime una fila y se especifica la cláusula FOR
PORTION OF BUSINESS_TIME, se pueden insertar implícitamente filas
adicionales para reflejar cualquier porción de la fila que no haya sido suprimida.
Los activadores de supresión existentes se activan para las filas suprimidas y los
activadores de inserción existentes se activan para las filas que se han insertado
implícitamente.
Ejemplos
v Ejemplo 1: Suprima el departamento (DEPTNO) ‘D11' de la tabla
DEPARTMENT.
DELETE FROM DEPARTMENT
WHERE DEPTNO = ’D11’
v Ejemplo 2: Suprima todos los departamentos de la tabla DEPARTMENT (es
decir, vacíe la tabla).
DELETE FROM DEPARTMENT
Sentencias 1023
DELETE
DESCRIBE
La sentencia DESCRIBE obtiene información acerca de un objeto.
Con esta sentencia se pueden obtener dos tipos de información. Cada una de ellos
se describe por separado.
v Marcadores de parámetro de entrada de una sentencia preparada. Obtiene
información sobre los marcadores de parámetro de entrada en una sentencia
preparada. Esta información se pone en un descriptor.
v La salida de una sentencia preparada. Obtiene información sobre una sentencia
preparada o información sobre las columnas de lista de selección de una
sentencia SELECT preparada. Esta información se pone en un descriptor.
Sentencias 1025
DESCRIBE INPUT
DESCRIBE INPUT
La sentencia DESCRIBE INPUT obtiene información sobre los marcadores de
parámetro de entrada de una sentencia preparada.
Invocación
Autorización
No se necesita.
Sintaxis
DESCRIBE INPUT nombre-sentencia INTO nombre-descriptor
Descripción
nombre-sentencia
Identifica la sentencia preparada. Cuando se ejecuta la sentencia DESCRIBE
INPUT, el nombre debe identificar una sentencia que el proceso de aplicación
haya preparado en el servidor actual.
Para una sentencia CALL, la información devuelta describe los parámetros de
entrada, definidos como IN o INOUT, del procedimiento. Los marcadores de
parámetro de entrada se consideran siempre como posibilidad de nulos,
independientemente de su uso.
INTO nombre-descriptor
Identifica un área de descriptor de SQL (SQLDA). Antes de ejecutar la
sentencia DESCRIBE INPUT, se debe establecer la variable siguiente en la
SQLDA:
SQLN Especifica el número de apariciones de SQLVAR proporcionadas en la
SQLDA. SQLN se debe establecer en un valor mayor que o igual a cero
antes de que se ejecute la sentencia DESCRIBE INPUT.
SQLDABC
Longitud de la SQLDA en bytes.
SQLD Número de parámetros IN e INOUT del procedimiento.
SQLVAR
Si el valor de SQLD es 0 o mayor que el valor de SQLN, no se asigna
ningún valor a las apariciones de SQLVAR.
Si el valor de SQLD es n, donde n es mayor que 0 pero menor que o igual
al valor de SQLN, se asignan valores a las primeras n apariciones de
SQLVAR. Los valores describen los marcadores de los parámetros de
entrada del procedimiento. La primera aparición de SQLVAR describe el
primer marcador de parámetro de entrada, la segunda aparición de
SQLVAR describe el segundo marcador de parámetro de entrada y así
sucesivamente.
SQLVAR base
SQLTYPE
Código que muestra el tipo de datos del parámetro e indica si
puede o no puede contener valores nulos.
SQLLEN
Valor de longitud que depende del tipo de datos del
parámetro. SQLLEN es 0 para tipos de datos LOB.
SQLNAME
El valor de la variable sqlname se obtiene como se indica a
continuación:
v Si SQLVAR corresponde a un marcador de parámetro que se
encuentra en la lista de parámetros de un procedimiento y
no forma parte de una expresión, sqlname contendrá el
nombre del parámetro si se especificó uno en la sentencia
CREATE PROCEDURE.
v Si SQLVAR corresponde a un marcador de parámetro con
nombre, sqlnma contendrá el nombre del marcador de
parámetro.
v De lo contrario, sqlname contendrá un valor literal numérico
ASCII que representa la posición de SQLVAR dentro de
SQLDA.
SQLVAR secundaria
Estas variables sólo se utilizan si el número de entradas SQLVAR se
dobla para acomodar parámetros LOB, de tipo diferenciado, de tipo
estructurado o de tipo de referencia.
SQLLONGLEN
Atributo de longitud de un parámetro BLOB, CLOB o
DBCLOB.
SQLDATATYPE_NAME
Para cualquier parámetro de tipo definido por el usuario
(diferenciado o estructurado), el gestor de base de datos
establece esta opción en el nombre de tipo definido por el
usuario totalmente calificado. Para un parámetro de tipo de
referencia, el gestor de base de datos establece esta opción en
el nombre de tipo definido por el usuario totalmente calificado
del tipo de destino de la referencia. De lo contrario, el nombre
Sentencias 1027
DESCRIBE INPUT
Notas
v Preparación de la SQLDA: antes de ejecutar la sentencia DESCRIBE INPUT, se
debe asignar la SQLDA y el valor de SQLN debe establecerse en un valor
superior o igual a cero para indicar cuántas apariciones de SQLVAR se
proporcionan en la SQLDA. Es preciso asignar almacenamiento suficiente para
contener las apariciones de SQLN. Para obtener la descripción de los marcadores
de parámetro de entrada en la sentencia preparada, es preciso que el número de
apariciones de SQLVAR no sea inferior al número de marcadores de parámetro
de entrada. Además, si los marcadores de parámetro de entrada incluyen LOB o
tipos estructurados, el número de apariciones de SQLVAR debe duplicar el
número de marcadores de parámetro de entrada.
v Las conversiones de páginas de códigos entre las páginas de código UNIX
ampliado (EUC) y las páginas de códigos DBCS o entre las páginas de código
Unicode y no Unicode pueden producir la expansión o la contracción de las
longitudes de caracteres.
v Si se selecciona un tipo estructurado, pero no se define ninguna transformación
FROM SQL (porque no se ha especificado ningún TRANSFORM GROUP
utilizando el registro especial CURRENT DEFAULT TRANSFORM GROUP
(SQLSTATE 428EM) o porque el grupo mencionado no tiene una función de
transformación FROM SQL definida (SQLSTATE 42744), se devolverá un error.
v Asignación de la SQLDA: Entre las maneras posibles de asignar la SQLDA
están las tres descritas a continuación:
Primera técnica: Asigne una SQLDA con suficientes apariciones de SQLVAR para
acomodar cualquier lista de selección que la aplicación vaya a tener que
procesar. Si la tabla contiene cualquier columna de tipo LOB, tipo diferenciado,
tipo estructurado o de tipo de referencia, el número de las SQLVAR debe ser el
doble que el número máximo de columnas; de lo contrario, el número debe ser
igual al número máximo de columnas. Después de realizar la asignación, la
aplicación puede utilizar esta SQLDA repetidas veces.
Esta técnica utiliza una gran cantidad de almacenamiento que nunca se
desasigna, incluso cuando la mayor parte de su almacenamiento no se utilice
para una lista de selección en particular.
Segunda técnica: Repita los dos siguientes pasos para cada lista de selección
procesada:
1. Ejecute una sentencia DESCRIBE INPUT con una SQLDA que no tenga
apariciones de SQLVAR; es decir, una SQLDA para la que SQLN sea cero. El
valor devuelto para SQLD es el número de columnas de la tabla de
resultados. Este es el número necesario de apariciones de SQLVAR o la mitad
del número necesario. Puesto que no había ninguna entrada SQLVAR, se
emitirá un aviso con SQLSTATE 01005. Si el SQLCODE que se asocia a ese
aviso es +237, +238 o +239, el número de entradas de SQLVAR debe ser el
doble del valor que se devuelve en SQLD. (En la devolución de estos
SQLCODE positivos se da por supuesto que el valor de la opción de enlace
SQLWARN era YES (devolución de SQLCODE positivos). Si SQLWARN se
había establecido en NO, sigue devolviéndose +238 para indicar que el
número de entradas de SQLVAR debe ser el doble del valor que se devuelve
en SQLD.)
2. Asigne una SQLDA con suficientes apariciones de SQLVAR. Después ejecute
la sentencia DESCRIBE de nuevo, utilizado esta SQLDA nueva.
Ejemplo
Ejecute una sentencia DESCRIBE INPUT con una SQLDA que tenga suficientes
apariciones SQLVAR para describir cualquier número de parámetros de entrada
que una sentencia preparada pueda tener. Supongamos que será preciso describir
un máximo de cinco parámetros y que los datos de entrada no contienen LOB.
/* STMT1_STR contiene la sentencia INSERT con la cláusula VALUES */
EXEC SQL PREPARE STMT1_NAME FROM :STMT1_STR;
... /* código para establecer SQLN en 5 y asignar la SQLDA */
EXEC SQL DESCRIBE INPUT STMT1_NAME INTO :SQLDA;
.
.
.
Sentencias 1029
DESCRIBE OUTPUT
DESCRIBE OUTPUT
La sentencia DESCRIBE OUTPUT obtiene información acerca de una sentencia
preparada.
Invocación
Autorización
No se necesita.
Sintaxis
OUTPUT
DESCRIBE nombre-sentencia INTO nombre-descriptor
Descripción
nombre-sentencia
Identifica la sentencia preparada. Cuando se ejecuta la sentencia DESCRIBE
OUTPUT, el nombre debe identificar una sentencia que el proceso de
aplicación haya preparado en el servidor actual.
Si la sentencia preparada es una sentencia SELECT o VALUES INTO, la
información devuelta describe las columnas en la tabla de resultados. Si la
sentencia preparada es una sentencia CALL, la información devuelta describe
los parámetros de salida, definidos como OUT o INOUT, del procedimiento.
INTO nombre-descriptor
Identifica un área de descriptor de SQL (SQLDA). Antes de ejecutar la
sentencia DESCRIBE OUTPUT, se debe establecer la variable siguiente en la
SQLDA:
SQLN Especifica el número de apariciones de SQLVAR proporcionadas en la
SQLDA. SQLN debe establecerse en un valor mayor que o igual a cero
antes de que se ejecute la sentencia DESCRIBE OUTPUT.
Sentencias 1031
DESCRIBE OUTPUT
Notas
v Antes de ejecutar la sentencia DESCRIBE OUTPUT, el valor de SQLN debe
establecerse de manera que indique cuántas apariciones de SQLVAR se
proporcionan en la SQLDA y debe asignarse suficiente almacenamiento para
incluir las apariciones de SQLN. Por ejemplo, para obtener la descripción de las
columnas de la tabla de resultados de una sentencia SELECT preparada, el
número de apariciones de SQLVAR no debe ser menor que el número de
columnas.
v Si se espera un LOB de gran tamaño, tenga en cuenta que el manejo de este LOB
afectará a la memoria de la aplicación. Si se da esta condición, considere la
posibilidad de utilizar localizadores o variables de referencia a archivos.
Modifique la SQLDA después de que se haya ejecutado la sentencia DESCRIBE
OUTPUT pero antes de asignar almacenamiento para que un SQLTYPE de
SQL_TYP_xLOB se cambie por SQL_TYP_xLOB_LOCATOR o
SQL_TYP_xLOB_FILE con los cambios correspondientes en otros campos, como
SQLLEN. Después asigne el almacenamiento basado en SQLTYPE y continúe.
v Las conversiones de páginas de códigos entre páginas de códigos UNIX
ampliado (EUC) y páginas de códigos DBCS, o entre páginas de códigos
Unicode y no Unicode, puede producir la expansión y la contracción de las
longitudes de caracteres.
v Si se selecciona un tipo estructurado, pero no se define ninguna transformación
FROM SQL (porque no se ha especificado ningún TRANSFORM GROUP
utilizando el registro especial CURRENT DEFAULT TRANSFORM GROUP
(SQLSTATE 428EM) o porque el grupo mencionado no tiene una función de
transformación FROM SQL definida (SQLSTATE 42744), se devolverá un error.
v Asignación de la SQLDA: Entre las maneras posibles de asignar la SQLDA
están las tres descritas a continuación:
Primera técnica: Asigne una SQLDA con suficientes apariciones de SQLVAR para
acomodar cualquier lista de selección que la aplicación vaya a tener que
procesar. Si la tabla contiene cualquier columna de tipo LOB, tipo diferenciado,
tipo estructurado o de tipo de referencia, el número de las SQLVAR debe ser el
doble que el número máximo de columnas; de lo contrario, el número debe ser
igual al número máximo de columnas. Después de realizar la asignación, la
aplicación puede utilizar esta SQLDA repetidas veces.
Esta técnica utiliza una gran cantidad de almacenamiento que nunca se
desasigna, incluso cuando la mayor parte de su almacenamiento no se utilice
para una lista de selección en particular.
Segunda técnica: Repita los dos siguientes pasos para cada lista de selección
procesada:
1. Ejecute una sentencia DESCRIBE OUTPUT con una SQLDA que no tenga
apariciones de SQLVAR; es decir, una SQLDA para la que SQLN es cero. El
valor devuelto para SQLD es el número de columnas de la tabla de
resultados. Este es el número necesario de apariciones de SQLVAR o la mitad
del número necesario. Puesto que no había ninguna entrada SQLVAR, se
Ejemplo
... /* código para comprobar que SQLD se mayor que cero, para establecer */
/* SQLN en SQLD, después para volver a asignar SQLDA */
EXEC SQL DESCRIBE STMT1_NAME INTO :sqlda;
Sentencias 1033
DESCRIBE OUTPUT
DISCONNECT
La sentencia DISCONNECT finaliza una o más conexiones cuando no existe
ninguna unidad de trabajo activa (es decir, tras una operación de confirmación o
de retrotracción).
Invocación
Autorización
No se necesita.
Sintaxis
(1)
DISCONNECT nombre-servidor
variable-lenguaje-principal
CURRENT
SQL
ALL
Notas:
1 Observe que un servidor de aplicaciones llamado CURRENT o ALL sólo
puede identificarse mediante una variable del lenguaje principal.
Descripción
nombre-servidor o variable-lenguaje-principal
Identifica el servidor de aplicaciones mediante el nombre-servidor especificado o
mediante una variable-lenguaje-principal que contenga el nombre-servidor.
Si se especifica una variable-lenguaje-principal, debe ser una variable de serie de
caracteres con un atributo de longitud que no sea mayor que 8, y no debe
contener una variable de indicador. El nombre-servidor contenido dentro de la
variable-lenguaje-principal debe alinearse a la izquierda y no debe delimitarse
mediante comillas.
Observe que el nombre-servidor es un alias de base de datos que identifica al
servidor de aplicaciones. Debe aparecer en la lista del directorio local del
peticionario de aplicaciones.
El alias-basedatos especificado o el alias-basedatos contenido en la variable del
lenguaje principal debe identificar una conexión existente del proceso de
aplicación. Si el alias-basedatos no identifica ninguna conexión existente, se
genera un error (SQLSTATE 08003).
Sentencias 1035
DISCONNECT
CURRENT
Identifica la conexión actual del proceso de aplicación. El proceso de aplicación
debe estar en el estado conectado. Si no se genera un error (SQLSTATE 08003).
ALL
Indica que se deben destruir todas las conexiones existentes del proceso de
aplicación. No se produce ningún error ni aviso si no existen conexiones
cuando se ejecuta la sentencia. La palabra clave opcional SQL se incluye para
ser coherente con la sintaxis de la sentencia RELEASE.
Normas
v Generalmente, la sentencia DISCONNECT no se puede ejecutar mientras se está
en una unidad de trabajo. Si se intenta, se genera un error (SQLSTATE 25000).
La excepción a esta norma es si se especifica una sola conexión que se haya de
desconectar y la base de datos no ha participado en una unidad de trabajo
existente. En este caso, no importa si hay una unidad de trabajo activa cuando
se emite la sentencia DISCONNECT.
v La sentencia DISCONNECT no se puede ejecutar nunca en el entorno del
Supervisor del Proceso de transacción (TP) (SQLSTATE 25000). Se utiliza cuando
la opción de precompilador SYNCPOINT se establece en TWOPHASE.
Notas
v Si la sentencia DISCONNECT se realiza satisfactoriamente, se destruye cada
conexión.
Si la sentencia DISCONNECT no es satisfactoria, el estado de la conexión del
proceso de aplicación y los estados de sus conexiones no se cambian.
v Si se utiliza DISCONNECT para destruir la conexión actual, la siguiente
sentencia de SQL ejecutada debe ser CONNECT o SET CONNECTION.
v La semántica de CONNECT Tipo 1 no excluye la utilización de DISCONNECT.
Sin embargo, aunque se puedan utilizar DISCONNECT CURRENT y
DISCONNECT ALL, no dan como resultado una operación de confirmación
como lo haría la sentencia CONNECT RESET.
Si se especifica nombre-servidor o variable-lenguaje-principal en la sentencia
DISCONNECT, debe identificar la conexión actual porque CONNECT Tipo 1
sólo da soporte a una conexión cada vez. Generalmente, DISCONNECT caerá
dentro de una unidad de trabajo con la excepción señalada en “Normas”.
v Es necesario que los recursos creen y mantengan conexiones remotas. Por lo
tanto, una conexión remota que no se vaya a volver a utilizar debe destruirse lo
más pronto posible.
v Las conexiones también se pueden destruir durante una operación de
confirmación porque la opción de conexión esté en vigor. La opción de conexión
podría ser AUTOMATIC, CONDITIONAL o EXPLICIT, que puede establecerse
como una opción del precompilador o a través de la API SET CLIENT en tiempo
de ejecución. Para obtener información acerca de la especificación de la opción
DISCONNECT, consulte el apartado “Bases de datos relacionales distribuidas”.
Ejemplos
v Ejemplo 1: La aplicación ya no necesita la conexión SQL con IBMSTHDB. Debe
ejecutarse la sentencia siguiente después de una operación de confirmación o de
retrotracción para destruir la conexión.
EXEC SQL DISCONNECT IBMSTHDB;
v Ejemplo 2: La aplicación ya no necesita la conexión actual. Debe ejecutarse la
sentencia siguiente después de una operación de confirmación o de retrotracción
para destruir la conexión.
1036 Consulta de SQL - Volumen 2
DISCONNECT
Sentencias 1037
DROP
DROP
La sentencia DROP suprime un objeto. Cualquier objeto que sea dependiente
directa o indirectamente de dicho objeto se suprime o pasa a estar no operativo.
Siempre que se suprime un objeto, se suprime su descripción del catálogo y se
invalidan los paquetes que hacen referencia al objeto.
Invocación
Autorización
Cuando se descartan objetos que admiten nombres de dos partes, los privilegios
del ID de autorización de la sentencia deben incluir, como mínimo, una de las
autorizaciones siguientes:
v Privilegio DROPIN para el esquema del objeto
v Propietario del objeto, tal como está registrado en la columna OWNER de la
vista de catálogo del objeto
v Privilegio CONTROL para el objeto (aplicable sólo a índices, especificaciones de
índice, apodos, paquetes, tablas y vistas)
v Propietario del tipo definido por el usuario, tal como está registrado en la
columna OWNER de la vista de catálogo SYSCAT.DATATYPES (aplicable sólo al
descartar un método asociado a un tipo definido por el usuario)
v Autorización DBADM
Cuando se descarta una tabla temporal de período de sistema, los privilegios del
ID de autorización de la sentencia deben incluir, como mínimo, una de las
autorizaciones siguientes:
v Privilegios para descartar la tabla histórica asociada
v Autorización administrativa
Sintaxis
DROP
Sentencias 1039
DROP
designador-alias
AUDIT POLICY nombre-política
BUFFERPOOL nombre-agrup-almac-interm
DATABASE PARTITION GROUP nombre-grupo-particiones-bd
EVENT MONITOR nombre-supervisor-sucesos
designador-función
RESTRICT
FUNCTION MAPPING nombre-correlación-función
HISTOGRAM TEMPLATE nombre-plantilla
(1)
INDEX nombre-índice
INDEX EXTENSION nombre-extensión-índice RESTRICT
MASK nombre-máscara
designador-método
RESTRICT
MODULE nombre-módulo
NICKNAME apodo
PACKAGE id-paquete
nombre-esquema. VERSION
id-versión
PERMISSION nombre-permiso
designador-procedimiento
RESTRICT
ROLE nombre-rol
SCHEMA nombre-esquema RESTRICT
RESTRICT
SECURITY LABEL nombre-etiqueta-seguridad
RESTRICT
SECURITY LABEL COMPONENT nombre-componente-etiqueta-seguridad
RESTRICT
SECURITY POLICY nombre-política-seguridad
SEQUENCE nombre-secuencia
RESTRICT
SERVER nombre-servidor
RESTRICT
designador-clase-servicio
RESTRICT
STOGROUP nombre-grupo-almacenamiento
TABLE nombre-tabla
TABLE HIERARCHY nombre-tabla-raíz
,
TABLESPACE nombre-espacio-tablas
TABLESPACES
TRANSFORM ALL FOR nombre-tipo
TRANSFORMS nombre-grupo
THRESHOLD nombre-umbral
TRIGGER nombre-activador
TRUSTED CONTEXT nombre-contexto
TYPE nombre-tipo
RESTRICT
TYPE MAPPING nombre-correlación-tipos
USAGE LIST nombre-lista-uso
USER MAPPING FOR nombre-autorización SERVER nombre-servidor
USER
VARIABLE nombre-variable
RESTRICT
VIEW nombre-vista
VIEW HIERARCHY nombre-vista-raíz
WORK ACTION SET nombre-conjunto-acciones-trabajo
WORK CLASS SET nombre-conjunto-clases-trabajo
WORKLOAD nombre-carga-trabajo
WRAPPER nombre-derivador
XSROBJECT nombre-objetoxsr
designador-alias:
FOR TABLE
ALIAS nombre-alias
PUBLIC FOR MODULE
FOR SEQUENCE
designador-función:
FUNCTION nombre-función
( )
,
tipo-datos
SPECIFIC FUNCTION nombre-específico
designador-método:
tipo-datos
SPECIFIC METHOD nombre-específico
designador-procedimiento:
PROCEDURE nombre-procedimiento
( )
,
tipo-datos
SPECIFIC PROCEDURE nombre-específico
designador-clase-servicio:
Notas:
1 Nombre-índice puede ser el nombre de un índice o una especificación de
índice.
Descripción
designador-alias
ALIAS nombre-alias
Identifica el alias que se debe descartar. El nombre-alias debe designar un
alias descrito en el catálogo (SQLSTATE 42704). Se suprime el alias
especificado.
Para TABLE, FOR MODULE o FOR SEQUENCE
Especifica el tipo de objeto del alias.
FOR TABLE
El alias es para una tabla, vista o apodo.
FOR MODULE
El alias es para un módulo.
FOR SEQUENCE
El alias es para una secuencia.
Sentencias 1041
DROP
Sentencias 1043
DROP
Sentencias 1045
DROP
dependiente del apodo. Las vistas que dependen del apodo se marcan como no
operativas. Se invalidan los paquetes que dependen de las especificaciones de
índice o de las vistas no operativas que se han descartado. No afecta a la tabla
de fuente de datos al que el apodo hace referencia.
Si una función o método de SQL depende de un apodo, ese apodo no se puede
descartar (SQLSTATE 42893).
PACKAGE nombre-esquema.id-paquete
Identifica el paquete que se debe descartar. Si no se especifica un nombre de
esquema, el esquema por omisión califica implícitamente el identificador del
paquete. El nombre de esquema y el identificador de paquete, junto con el
identificador de versión especificado implícita o explícitamente, deben
identificar un paquete que esté descrito en el catálogo (SQLSTATE 42704). Se
suprime el paquete especificado. Si el paquete que está descartándose es el
único paquete que nombre-esquema.id-paquete identifican (es decir, si no existen
otras versiones), también se suprimen todos los privilegios para el paquete.
VERSION id-versión
Identifica qué versión del paquete va a descartarse. Si no se especifica un
valor, la versión tomará por omisión una serie de caracteres vacía. Si
existen varios paquetes con el mismo nombre de paquete pero con distinta
versión, sólo puede descartarse una versión del paquete en cada
invocación de la sentencia DROP. Delimite el identificador de versión con
comillas dobles cuando:
v Se genera mediante la opción del precompilador VERSION(AUTO)
v Comienza con un dígito
v Contiene minúsculas o mayúsculas y minúsculas
Si la sentencia se invoca desde el indicador de mandatos del sistema
operativo, preceda cada delimitador de dobles comillas con una barra
inclinada invertida para asegurar que el sistema operativo no divide los
delimitadores.
PERMISSION nombre-permiso
Identifica el permiso de fila que se debe descartar. El nombre debe identificar
un permiso de fila existente en el servidor actual (SQLSTATE 42704). El
nombre no debe identificar el permiso de fila por omisión creado de forma
implícita por la base de datos DB2 (SQLSTATE 42917).
designador-procedimiento
Identifica una instancia de un procedimiento que debe descartarse. Para
obtener más información, consulte el apartado “Designadores de función,
método y procedimiento” en la página 22. La instancia de procedimiento
especificada debe ser un procedimiento descrito en el catálogo. No es posible
descartar un procedimiento que se encuentre en el esquema SYSIBM, SYSFUN,
SYSIBMADM o SYSPROC (SQLSTATE 42832).
RESTRICT
La palabra clave RESTRICT impide que se descarte el procedimiento si una
definición de activador o una definición de rutina de SQL contiene una
sentencia CALL que identifica al procedimiento. La norma restrictiva se
aplicará por omisión a las mismas dependencias que las de la versión 9.5 si
se cumplen las condiciones siguientes:
v Se ha inhabilitado el parámetro de configuración de base de datos
auto_reval.
Sentencias 1047
DROP
designador-clase-servicio
SERVICE CLASS nombre-clase-servicio
Identifica la clase de servicio que debe descartarse. El nombre-clase-servicio
debe identificar una clase de servicio que esté descrita en el catálogo
(SQLSTATE 42704). Para descartar una subclase de servicio, el
nombre-superclase-servicio debe especificarse utilizando la cláusula UNDER.
UNDER nombre-superclase-servicio
Especifica la superclase de servicio de la subclase de servicio al
descartar una subclase de servicio. El nombre-superclase-servicio debe
identificar una superclase de servicio que esté descrita en el catálogo
(SQLSTATE 42704).
RESTRICT
Esta palabra clave aplica la norma que establece que la clase de servicio no
se descartará si existe alguna de las dependencias siguientes:
v La clase de servicio es una superclase de servicio y existe una subclase
de servicio definida por el usuario bajo la clase de servicio (SQLSTATE
5U031). Primero debe descartarse la subclase de servicio.
v La clase de servicio es una superclase de servicio y existe una
correlación de conjuntos de acciones de trabajo con la clase de servicio
(SQLSTATE 5U031). Primero debe descartarse el conjunto de acciones de
trabajo.
v La clase de servicio es una subclase de servicio y existe una correlación
de acciones de trabajo con la clase de servicio (SQLSTATE 5U031).
Primero debe descartarse la acción de trabajo.
v La clase de servicio tiene una correlación de cargas de trabajo
(SQLSTATE 5U031). Primero debe eliminarse la correlación. Elimine la
correlación de cargas de trabajo descartando la carga de trabajo o
modificando la carga de trabajo para que no se correlacione con la clase
de servicio.
v La clase de servicio tiene un umbral asociado (SQLSTATE 5U031).
Primero debe descartarse el umbral.
v La clase de servicio es el destino de una acción REMAP ACTIVITY en
un umbral (SQLSTATE 5U031). Modifique el umbral para establecer otra
subclase de servicio como destino de la acción REMAP ACTIVITY o
descarte el umbral.
v No se inhabilita la clase de servicio (SQLSTATE 5U031). Primero debe
inhabilitarse la clase de servicio.
RESTRICT es el comportamiento por omisión.
STOGROUP nombre-grupo-almacenamiento
Identifica el grupo de almacenamiento que se debe descartar;
nombre-grupo-almacenamiento debe identificar un grupo de almacenamiento que
exista en el servidor actual (SQLSTATE 42704). Este nombre consta de una sola
parte.
RESTRICT
La palabra clave RESTRICT impide que se descarte el grupo de
almacenamiento si existe un espacio de tablas que utiliza el grupo de
almacenamiento (SQLSTATE 42893). RESTRICT es el comportamiento por
omisión.
Sentencias 1049
DROP
Sentencias 1051
DROP
está descartando (estas tablas deben descartarse primero) o si alguna tabla que
reside en el espacio de tablas tiene el atributo RESTRICT ON DROP.
Los objetos cuyos nombres contienen el prefijo 'SYS' son objetos incorporados
y, salvo en el caso de los espacios de tablas SYSTOOLSPACE y
SYSTOOLSTMPSPACE, no se pueden descartar (SQLSTATE 42832).
Un espacio de tablas temporal del sistema (SYSTEM TEMPORARY) no se
puede descartar (SQLSTATE 55026) si es el único espacio de tablas temporal
que existe en la base de datos. No se puede descartar un espacio de tablas
USER TEMPORARY si hay una instancia de una tabla temporal creada o una
tabla temporal declarada creada en el mismo (SQLSTATE 55039). Aunque se
haya descartado una tabla temporal creada, se seguirá considerando que el
espacio de tablas USER TEMPORARY se sigue utilizando hasta que se
descarten todas las instancias de la tabla temporal creada. Las instancias de
una tabla temporal creada se descartan cuando la sesión termina o cuando se
hace referencia a la tabla temporal creada en la sesión. Aunque se haya
descartado una tabla temporal declarada, se considerará al espacio de tablas
USER TEMPORARY en uso hasta que se haya confirmado la unidad de trabajo
que contiene la sentencia DROP TABLE.
Al descartar un espacio de tablas se descartan todos los objetos definidos en el
espacio de tablas. Todos los objetos de base de datos existentes con
dependencias en el espacio de tablas como, por ejemplo, paquetes, restricciones
de referencia, etc. se descartan o invalidan (lo que sea adecuado) y las vistas y
activadores dependientes pasan a estar no operativos.
Los contenedores creados por un usuario no se suprimen. Los directorios de la
vía de acceso del nombre del contenedor creados por el gestor de bases de
datos durante la ejecución de CREATE TABLESPACE se suprimen. Se
suprimen todos los contenedores que están por debajo del directorio de bases
de datos. Cuando se confirma la sentencia DROP TABLESPACE, se suprimen
los contenedores de archivos DMS o los contenedores SMS del espacio de
tablas especificado, si es posible. Si no es posible suprimirlos (por ejemplo,
porque otro agente los tiene abiertos), los archivos se truncan a una longitud
de cero. Una vez terminados todos los contenedores, o cuando se emite el
mandato DEACTIVATE DATABASE, estos archivos de longitud cero se
suprimen.
THRESHOLD nombre-umbral
Identifica el umbral que debe descartarse. El nombre-umbral debe identificar un
umbral que exista en el servidor actual (SQLSTATE 42704). Este nombre consta
de una sola parte. Los umbrales con una cola, por ejemplo
TOTALSCPARTITIONCONNECTIONS y
CONCURRENTDBCOORDACTIVITIES, deben inhabilitarse antes de que se
puedan descartar (SQLSTATE 5U025). El umbral especificado se suprime del
catálogo.
TRIGGER nombre-activador
Identifica el activador que se debe descartar. El nombre-activadores debe
identificar un activador que se haya descrito en el catálogo (SQLSTATE 42704).
Se suprime el activador especificado.
El descarte de activadores hace que algunos paquetes se marquen como no
válidos.
Si nombre-activador especifica un activador INSTEAD OF en una vista, puede
que otro activador dependa de éste a través de una actualización que debe
realizarse para la vista.
Sentencias 1053
DROP
La existencia de objetos que dependen de estos métodos puede dar lugar a que
la operación DROP TYPE no se ejecute satisfactoriamente.
Se invalidan todos los paquetes que dependen de métodos que se han definido
en supertipos del tipo que está descartándose y que pueden elegirse para la
alteración temporal.
Si se hace referencia al tipo en la definición de un permiso de fila o una
máscara de columna, el tipo no se puede descartar (SQLSTATE 42893).
TYPE MAPPING nombre-correlación-tipos
Identifica la correlación de tipos de datos definida por el usuario que se debe
descartar. El nombre-correlación-tipos debe identificar una correlación de tipos de
datos que esté descrita en el catálogo (SQLSTATE 42704). La correlación de
tipos de datos se suprime de la base de datos.
No se descartan objetos adicionales.
USAGE LIST nombre-lista-uso
Identifica la lista de uso que se debe descartar. El nombre-lista-uso, incluido el
calificador implícito o explícito, debe identificar una lista de uso descrita en el
catálogo (SQLSTATE 42704). La memoria asignada para la lista de uso se libera
y no se encuentra bajo control de transacciones.
USER MAPPING FOR nombre-autorización | USER SERVER nombre-servidor
Identifica la correlación de usuarios que se debe descartar. Esta correlación
asocia un nombre de autorización que se utiliza para acceder a la base de
datos federada con un nombre de autorización que se utiliza para acceder a la
fuente de datos. Se identifica el primero de estos dos nombres de autorización
mediante el nombre-autorización o se hace referencia mediante el registro
especial USER. El nombre-servidor identifica la fuente de datos que el segundo
nombre de autorización utiliza para tener acceso.
El nombre-autorización debe aparecer en la lista del catálogo (SQLSTATE 42704).
El nombre-servidor debe identificar una fuente de datos que está descrita en el
catálogo (SQLSTATE 42704). Se suprime la correlación del usuario.
No se descartan objetos adicionales.
VARIABLE nombre-variable
Identifica la variable global que se debe descartar. El nombre-variable debe
identificar una variable global que exista en el servidor actual (SQLSTATE
42704).
Si se hace referencia a la variable en la definición de un permiso de fila o una
máscara de columna, la variable no se puede descartar (SQLSTATE 42893).
RESTRICT
La palabra clave RESTRICT impide que se descarte la variable global si a
esta se hace referencia en una definición de rutina de SQL, definición de
Sentencias 1055
DROP
SYSDEFAULTUSERWORKLOAD o SYSDEFAULTADMWORKLOAD
(SQLSTATE 42832). Para poder descartar una carga de trabajo, es preciso
inhabilitarla y que no tenga ninguna ocurrencia de carga de trabajo activa
asociada (SQLSTATE 5U023). Para descartar una carga de trabajo con un
umbral asociado (SQLSTATE 5U031), debe descartar el umbral en primer lugar.
La carga de trabajo especificada se suprime del catálogo.
WRAPPER nombre-derivador
Identifica el derivador que se debe descartar. El nombre-derivador debe
identificar un derivador que esté descrito en el catálogo (SQLSTATE 42704). Se
suprime el derivador.
Se descartan todas las definiciones de servidor, correlaciones de función
definidas por el usuario y correlaciones de tipo de datos definidas por el
usuario que dependen del derivador. También se descartan todas las
correlaciones de función definidas por el usuario, apodos, correlaciones de tipo
de datos definidas por el usuario y correlaciones de usuario que son
dependientes de las definiciones de servidor. Se descarta cualquier
especificación de índice dependiente de estos apodos descartados y se marca
como no operativa cualquier vista dependiente de estos apodos. Se invalidan
todos los paquetes dependientes de los objetos descartados y vistas no
operativas. Todos los procedimientos federados que dependen de la definición
del servidor también se descartan.
XSROBJECT nombre-objetoxsr
Identifica el objeto XSR que se descartará. El nombre-objetoxsr debe identificar
un objeto XSR que se describe en el catálogo (SQLSTATE 42704).
Se descartan las restricciones de comprobación que hacen referencia al objeto
XSR. Se marcan como inoperativos todos los activadores y vistas que hacen
referencia al objeto XSR. Los paquetes dependen de un objeto XSR descartado
se invalidan.
En un entorno de base de datos particionada, se puede emitir esta sentencia
sobre un objeto XSR conectándose a cualquier partición.
Normas
Dependencias: Tabla 31 en la página 1059 muestra las dependencias que tienen los
objetos entre sí. No todas las dependencias se graban explícitamente en el catálogo.
Por ejemplo, no existe ningún registro de las restricciones de las que depende un
paquete. Se muestran cuatro tipos de dependencias distintas:
R Semántica de restricción. El objeto principal no puede descartarse mientras
exista el objeto que depende del él.
C Semántica en cascada. El descarte del objeto principal hace que el objeto
que depende de él (objeto dependiente) se descarte también. Sin embargo,
si el objeto dependiente no puede descartarse debido a que tiene una
dependencia de restricción en otro objeto, la operación de descartar el
objeto principal fallará.
X Semántica de no operativo. El descarte del objeto principal hace que el
objeto que depende de él pase a estar no operativo. Permanece no
operativo hasta que un usuario lleva a cabo una acción explícita.
A Semántica de invalidación y revalidación automática. El descarte del objeto
principal hace que el objeto que depende del mismo pase a ser no válido.
El gestor de bases de datos intenta revalidar el objeto no válido.
Sentencias 1057
DROP
Sentencias 1059
DROP
DROP ALIAS - R - R - - R - - - A R - - C - - X - - - - X - - - -
3 3 3 3
DROP - - - - - - - - - - - - - - - R - - - - - - - - - - -
BUFFERPOOL
DROP - - - - - - - - - - - - - - - C - - - - - - - - - - -
DATABASE
PARTITION
GROUP
DROP R R R R - R R R - - X R - - R - - R - - - - R - - - -
7 7
FUNCTION
DROP - - - - - - - - - - A - - - - - - - - - - - - - - - -
FUNCTION
MAPPING
DROP INDEX R - - - - - - - - - A - - - - - - - - - C - R - - - -
37 17
DROP INDEX - R - R R - - - - - - - - - - - - - - - - - - - - - -
EXTENSION
DROP MASK - - - - - - - - - - A - - - - - - - - - - - - - - - -
39
DROP METHOD R R R R - R - R - - X, - - - R - - R - - - - R - - - -
7
A
30
DROP - R - R C - - R - - A - - - C - - - - - - - X - - - -
11 16
NICKNAME
DROP - - - - - - - - - - A - - - - - - - - - - - - - - - -
40
PERMISSION
DROP - R - R - - - R - - A - - - - - - R - - - - - - - - -
7 7
PROCEDURE
DROP - R - - - - - R - - A - - - - - - R - - - - - - - - -
SEQUENCE
DROP SERVER - C C - - - - - C - A - - - - - - - - C - C - - - - -
21 19 19
DROP TABLE C R - R C - - - - - A - - - R, - - X - - - - X - - - -
9 16 16
HIERARCHY C
11
DROP - - - - C - - - - - - - - - C, - - - - - - - - - - - -
6
TABLESPACE R
6
DROP - R - - - - - - - - X - - - - - - - - - - - - - - - -
TRANSFORM
DROP TRIGGER - - - - - - - - - - A - - - - - - X - - - - - - - - -
1 26
DROP TYPE R R - R - R - - - - A - - - R - - R R - - - R - - - -
13 5 12 18 13 4 14
DROP VARIABLE - - R R - - R R - - A R - - - - - R - - - - R - - - -
DROP VIEW - R - R - - R - - - A R - - - - - X - - - - X - - - -
2 16 15
DROP VIEW - R - R - - - - - - A - - - - - - X - - - - X - - - -
2 16 16
HIERARCHY
DROP WORK - - - - - - - - - - - - - - - - - - - - - - - - R - -
36
CLASS SET
DROP WRAPPER - - C - - - - - - - - - C - - - - - - C - - - - - - -
DROP C - - - - - - - - - A - - - - - - X - - - - X - - - -
XSROBJECT
REVOKE un - C, - - - - R C, - - A R - - C, - - X - - - - X - - - -
privilegio10 R 38
R 1 38
X 8
25 25 8
1
Esta dependencia está implícita en la dependencia de una tabla con estas
restricciones, activadores o clave de distribución.
2
Si un paquete tiene una sentencia INSERT, UPDATE o DELETE que actúa
en una vista, el paquete tiene una utilización de inserción, actualización o
supresión en la tabla base principal de la vista. En el caso de UPDATE, el
Sentencias 1061
DROP
Si un paquete tiene una sentencia que actúa en una tabla con tipo, la
creación o el descarte de cualquier tabla de la misma jerarquía de tablas
invalidará el paquete.
10
Las dependencias no existen en el nivel de columna porque los privilegios
en las columnas no se pueden revocar individualmente.
Si un paquete, un activador o una vista incluye la utilización de OUTER(Z)
en la cláusula FROM, existe una dependencia en el privilegio SELECT en
cada subtabla o subvista de Z. De modo similar, si un paquete, un
activador o una vista incluye la utilización de DEREF(Y) donde Y es un
tipo de referencia con una vista o tabla de destino Z, hay una dependencia
del privilegio SELECT sobre cada subtabla o subvista de Z.
11
Una tabla de consulta materializada depende de las tablas o apodos
subyacentes que se han especificado en la selección completa de la
definición de tabla.
La semántica de la cascada se aplica a las tablas de consulta materializada
dependientes.
Una subtabla depende de sus supertablas hasta la tabla raíz. Una
supertabla no puede descartarse hasta que se han descartado todas sus
subtablas.
Una tabla histórica depende de la tabla temporal de período de sistema a
la que está asociada. La semántica en cascada se aplica a la tabla histórica
cuando se descarta la tabla temporal de período de sistema de la que
depende.
12
Un paquete puede depender de tipos estructurados como resultado de
utilizar el predicado TYPE o la expresión de tratamiento de subtipos
(TREAT expresión AS tipo-datos). El paquete depende de los subtipos de
cada tipo estructurado especificado en el lado derecho del predicado TYPE
o de la expresión TREAT. El descarte o la creación de un tipo estructurado
que altera los subtipos de los que el paquete depende causa la
invalidación.
Se invalidan todos los paquetes que dependen de métodos que se han
definido en supertipos del tipo que está descartándose y que pueden
elegirse para la alteración temporal.
13
Una restricción de comprobación o un activador depende de un tipo si el
tipo se utiliza en cualquier parte dentro de la restricción o del activador.
No hay dependencia de los subtipos de un tipo estructurado utilizado en
un predicado TYPE dentro de una restricción de comprobación o un
activador.
14
Una vista depende de un tipo si el tipo se utiliza en cualquier parte dentro
de la definición de vista (esto incluye el tipo de la vista con tipo). No hay
dependencia de los subtipos de un tipo estructurado utilizado en un
predicado TYPE dentro de una definición de vista.
15
Una subvista depende de su supervista hasta la vista raíz. No se puede
descartar una supervista hasta que se hayan descartado todas sus
subvistas. Consulte el número 16 para obtener dependencias de vista
adicionales.
16
Un activador o una vista también depende de la tabla de destino o vista de
destino de una operación de eliminación de referencia o función DEREF.
Un activador o una vista con una cláusula FROM que incluya OUTER(Z)
Sentencias 1063
DROP
27
No se puede descartar una declaración de método de un método original
al que otros métodos alteran temporalmente (SQLSTATE 42893).
28
Si el método del cuerpo de método que está creándose se ha declarado de
modo que altere temporalmente a otro método, se invalidan todos los
paquetes que dependen del método alterado temporalmente y de los
métodos que alteran temporalmente a este método en los supertipos del
método que está creándose.
29
Cuando se crea un nuevo subtipo de un tipo existente, se invalidan todos
los paquetes que dependen de los métodos que se han definido en los
supertipos del tipo que está creándose y que pueden elegirse para la
alteración temporal (por ejemplo, no los métodos de mutación o de
observación).
30
Si el método específico del cuerpo de método que está descartándose se ha
declarado de modo que altere temporalmente a otro método, se invalidan
todos los paquetes que dependen del método alterado temporalmente y de
los métodos que alteran temporalmente a este método en los supertipos
del método específico que está descartándose.
31
El SQL dinámico colocado en la antememoria tiene la misma semántica
que los paquetes.
32
Cuando se descarta una tabla base remota utilizando la sentencia DROP
TABLE, se descartan el apodo y la tabla base remota.
33
Una clave primaria o las claves exclusivas a las que una clave foránea no
hace referencia no restringen la modificación de un nombre local de apodo
ni del tipo local.
34
Un XSROBJECT puede ser inoperativo para la descomposición como
consecuencia de los cambios realizados en una tabla asociada con el
esquema XML para descomposición. Los cambios que pueden afectar a la
descomposición son los siguientes: descartar la tabla o una columna de la
tabla, o cambiar una columna de la tabla. El estado de descomposición de
un esquema XML se puede restablecer ejecutando una sentencia ALTER
XSROBJECT para habilitar o inhabilitar la descomposición del esquema
XML.
35
Sentencias 1065
DROP
38
La revocación de un privilegio queda restringida si provoca que un objeto
quede descartado o invalidado y un permiso o máscara depende de él. Por
ejemplo, si tiene una vista que depende de una tabla, y un permiso o
máscara que hace referencia a la vista, REVOKE SELECT en la tabla
invalida la vista, aunque provoca un error.
39
Los paquetes se invalidan cuando una tabla en la que se ha definido el
permiso habilitado tiene el control de acceso de nivel de fila activado. Los
paquetes no se verán afectados cuando se descarta un permiso que está
inhabilitado o que se ha definido en una tabla con el control de acceso a
filas desactivado.
40
Los paquetes se invalidan cuando una tabla en la que se ha definido el
permiso habilitado tiene el control de acceso de nivel de fila activado. Los
paquetes no se verán afectados cuando se descarta un permiso que está
inhabilitado o que se ha definido en una tabla con el control de acceso a
filas desactivado.
Tabla 32. Objetos dependientes afectados por auto_reval
Sentencia Objetos dependientes afectados
ALTER NICKNAME (modificación del nombre local o el Tipo de anclaje, función, método, procedimiento, tipo
tipo local) definido por el usuario, variable, vista
ALTER TABLE ALTER COLUMN Tipo de anclaje, función, método, procedimiento,
activador4, tipo definido por el usuario variable, vista,
XSROBJECT
ALTER TABLE DROP COLUMN2 Tipo de anclaje, función, método,, índice, procedimiento,
activador4, tipo definido por el usuario variable, vista,
XSROBJECT
ALTER TABLE RENAME COLUMN1, 3
Tipo de anclaje, función, método,, índice, procedimiento,
activador4, tipo definido por el usuario variable, vista,
XSROBJECT
ALTER TYPE ADD ATTRIBUTE Vista
ALTER TYPE DROP ATTRIBUTE Vista
DROP ALIAS Tipo de anclaje, función, método, procedimiento,
activador, tipo definido por el usuario, variable, vista
DROP FUNCTION (ALTER MODULE DROP Función, correlación de función, extensión de índice,
FUNCTION) método, procedimiento, activador, variable, vista
DROP METHOD Función, correlación de función, extensión de índice,
método, procedimiento, activador, variable, vista
DROP NICKNAME Tipo de anclaje, función, método, activador, tipo definido
por el usuario, variable, vista
DROP PROCEDURE (ALTER MODULE DROP Función, método, procedimiento, activador
PROCEDURE)
DROP SEQUENCE Función, método, procedimiento, activador, variable, vista
DROP TABLE Tipo de anclaje, función, método, procedimiento,
activador4, tipo definido por el usuario variable, vista,
XSROBJECT
DROP TABLE HIERARCHY Función, método, procedimiento, activador, variable, vista
DROP TRIGGER Activador
DROP TYPE (ALTER MODULE DROP TYPE) Tipo de anclaje, tipo de cursor, función, método,
procedimiento, extensión de índice, activador, tipo
definido por el usuario, variable, vista
1
La semántica de revalidación inmediata se aplica a estas sentencias (para
las sentencias CREATE, sólo si se especifica OR REPLACE) con
independencia de la configuración del parámetro de configuración de base
de datos auto_reval.
2
Los objetos dependientes de la lista se revalidarán la siguiente vez que se
utilice el objeto, salvo en el caso de los objetos siguientes, que se
revalidarán inmediatamente como parte de la sentencia:
v ANCHOR TYPE
v CURSOR TYPE
v VIEW (donde la lista de selección sólo costa de SELECT * y no contiene
ninguna columna de vista definida explícitamente).
En el caso de una revalidación de vista inmediata, la lista de nombres de
columnas para la lista de selección se volverá a establecer durante la
revalidación.
3
Los objetos dependientes de la lista volverá a validarse la próxima vez que
se utilice el objeto, excepto en el caso de los objetos siguientes, que se
revalidarán inmediatamente como parte de la sentencia:
v Tipo definido por el usuario
v VIEW (donde la lista de selección sólo costa de SELECT * y no contiene
ninguna columna de vista definida explícitamente).
En el caso de una revalidación de vista inmediata, la lista de nombres de
columnas para la lista de selección se volverá a establecer durante la
revalidación.
Sentencias 1067
DROP
Notas
v Es válido descartar una función definida por el usuario mientras se está
utilizando. También, un cursor puede abrirse en una sentencia que contenga una
referencia a una función definida por el usuario y mientras el cursor está abierto
la función puede descartarse sin provocar que fallen las lecturas del cursor.
v Si se está ejecutando un paquete que depende de una función definida por el
usuario, no es posible que otro ID de autorización descarte la función hasta que
el paquete complete su unidad de trabajo actual. En dicho momento, se descarta
la función y el paquete se convierte en no operativo. La siguiente petición de
este paquete dará como resultado un error indicando que el paquete debe
volverse a enlazar explícitamente.
v La eliminación del cuerpo de una función (que es muy diferente de descartar la
función) puede producirse mientras se está ejecutando una aplicación que
necesite el cuerpo de la función. Esto puede ocasionar o no que la sentencia
falle, según si el gestor de bases de datos tenga que cargar todavía el cuerpo de
la función en el almacenamiento para la sentencia.
v Además de las dependencias registradas para cualquier UDF especificada
explícitamente, se registran las dependencias siguientes cuando se solicitan
transformaciones implícitamente:
1. Cuando el parámetro de tipo estructurado o el resultado de una función o
método solicita una transformación, se registra una dependencia para la
función o método respecto a la función de transformación necesaria TO SQL
o FROM SQL.
2. Cuando una sentencia de SQL incluida en un paquete solicita una función de
transformación, se registra una dependencia para el paquete respecto a la
función de transformación TO SQL o FROM SQL indicada.
Debido a que estas describen los únicos casos en que se registran dependencias
debido a la invocación implícita de transformaciones, las funciones, métodos y
paquetes son los únicos objetos que pueden tener una dependencia respecto a
funciones de transformación invocadas implícitamente. En cambio, las llamadas
explícitas a funciones de transformación (en vistas y activadores, por ejemplo) sí
que producen las dependencias habituales de estos otros tipos de objetos
respecto a funciones de transformación. Como resultado, una sentencia DROP
TRANSFORM puede también fallar debido a estas dependencias de tipo
"explícito" que los objetos tienen respecto a las transformaciones que están
descartando (SQLSTATE 42893).
v Debido a que los catálogos de dependencias no distinguen entre el depender de
una función en calidad de transformación y el depender de una función por
llamada explícita, es recomendable no escribir llamadas explícitas a funciones de
transformación. En tal caso, no es posible descartar la propiedad de
Sentencias 1069
DROP
Las sentencias DROP TABLE T1 y DROP TABLE T2 fallan porque RP1 depende de T2
y RP2 depende de T1. El usuario con autorización SECADM debe descartar uno
de los permisos de fila en primer lugar y, a continuación, emitir la sentencia
DROP TABLE.
Ejemplos
v Ejemplo 1: Descarte la tabla TDEPT.
DROP TABLE TDEPT
v Ejemplo 2: Elimine la vista VDEPT.
DROP VIEW VDEPT
v Ejemplo 3: El ID de autorización HEDGES intenta descartar un alias.
DROP ALIAS A1
Sentencias 1071
DROP
Sentencias 1073
END DECLARE SECTION
Invocación
Autorización
No se necesita.
Sintaxis
END DECLARE SECTION
Descripción
Las variables del lenguaje principal a las que se hace referencia en las sentencias de
SQL se deben declarar en una sección de declaración de variable del lenguaje
principal en todos los lenguajes de sistema principal, distintos de REXX. Además,
la declaración de cada variable debe preceder a la primera referencia a la variable.
EXECUTE
La sentencia EXECUTE ejecuta una sentencia de SQL preparada.
Invocación
Autorización
Para todas las variables globales utilizadas como expresión en la cláusula USING o
en la expresión para un índice-matriz, los privilegios del ID de autorización de la
sentencia deben incluir una de las autorizaciones siguientes:
v el privilegio READ sobre la variable global que no está definida en un módulo
v el privilegio EXECUTE sobre el módulo de la variable global que está definida
en un módulo
Para todas las variables globales utilizadas como destino-asignación, los privilegios
del ID de autorización de la sentencia deben incluir una de las autorizaciones
siguientes:
v el privilegio WRITE sobre la variable global que no está definida en un módulo
v el privilegio EXECUTE sobre el módulo de la variable global que está definida
en un módulo
Sintaxis
EXECUTE nombre-sentencia
,
INTO destino-asignación
DESCRIPTOR nombre-descriptor-resultado
,
USING variable-lenguaje-principal-entrada
(1)
expresión
DESCRIPTOR nombre-descriptor-entrada
Sentencias 1075
EXECUTE
destino-asignación:
nombre-variable-global
nombre-variable-lenguaje-principal
nombre-parámetro-SQL
nombre-variable-SQL
nombre-variable-transición
nombre-variable-matriz [ índice-matriz ]
referencia-campo
Notas:
1 Una expresión distinta de la variable-lenguaje-principal sólo se puede utilizar
cuando la sentencia EXECUTE se emplea dentro de una sentencia de SQL
compuesto (compilado).
Descripción
nombre-sentencia
Identifica la sentencia preparada que se debe ejecutar. El nombre-sentencia debe
identificar una sentencia que se ha preparado anteriormente, y la sentencia que
se ha preparado anteriormente no puede ser una sentencia SELECT.
INTO
Incluye una lista de destinos que se utilizan para recibir valores de los
marcadores de parámetro de salida en la sentencia preparada. Cada asignación
a un destino se realiza secuencialmente y siguiendo la lista. Si se produce un
error en cualquier asignación, no se asigna el valor al destino y no se asignan
más valores a los destinos. Cualquier valor que ya se haya asignado a los
destinos continúa asignado.
En el caso de una sentencia CALL dinámica, los marcadores de parámetro que
aparecen en los argumentos OUT e INOUT para el procedimiento son
marcadores de parámetro de salida. Si en la sentencia aparece algún marcador
de parámetro de salida, debe especificarse la cláusula INTO (SQLSTATE
07007).
destino-asignación
Identifica uno o varios destinos para la asignación de los valores de salida.
El primer valor de la fila del resultado se asigna al primer destino de la
lista, el segundo valor al segundo destino, etcétera.
Si el tipo de datos de un destino-asignación es un tipo de fila, debe haber
exactamente un destino-asignación especificado (SQLSTATE 428HR), el
número de columnas debe coincidir con el número de campos en el tipo de
fila y los tipos de datos de las columnas de la fila captada deben poder
asignarse a los campos correspondientes del tipo de fila (SQLSTATE 42821).
Si el tipo de datos de un destino-asignación es un elemento de matriz, debe
haber exactamente un destino-asignación especificado.
nombre-variable-global
Identifica la variable global que es el sujeto de la asignación.
nombre-variable-lenguaje-principal
Identifica la variable del lenguaje principal que es el sujeto de la
asignación. Para los valores de salida LOB, el destino puede ser una
variable del lenguaje principal normal (si es lo suficientemente grande),
una variable de localizador LOB o una variable de referencia a archivos
LOB.
nombre-parámetro-SQL
Identifica el parámetro de rutina que es el destino de la asignación.
nombre-variable-SQL
Identifica la variable de SQL que es el sujeto de la asignación. Las
variables de SQL se deben declarar antes de utilizarlas.
nombre-variable-transición
Identifica la columna que se debe actualizar en la fila de transición. Un
nombre-variable-transición debe identificar una columna en la tabla
sujeto de un activador, calificado opcionalmente por un nombre de
correlación que identifica el nuevo valor.
nombre-variable-matriz
Identifica una variable de SQL, un parámetro de SQL o una variable
global con tipo de matriz.
índice-matriz
Expresión que especifica qué elemento de la matriz será el destino
de la asignación. Para una matriz común, la expresión de
índice-matriz se debe poder asignar a INTEGER (SQLSTATE 428H1)
y no puede ser un valor nulo. Su valor debe estar entre 1 y la
cardinalidad máxima definida para la matriz (SQLSTATE 2202E).
Para una matriz asociativa, la expresión de índice-matriz se debe
poder asignar al tipo de datos de índice de la matriz asociativa
(SQLSTATE 428H1) y no puede ser un valor nulo.
referencia-campo
Identifica el campo de un valor de tipo de fila que es el destino de la
asignación. La referencia-campo debe especificarse como un nombre-campo
calificado donde el calificador identifica el valor de fila donde está
definido el campo.
DESCRIPTOR nombre-descriptor-resultado
Identifica una SQLDA de salida que debe contener una descripción válida
de las variables del lenguaje principal.
Antes de procesar la sentencia EXECUTE, el usuario debe establecer los
campos siguientes en la SQLDA de entrada:
v SQLN para indicar el número de apariciones de SQLVAR
proporcionadas en la SQLDA
v SQLDABC para indicar el número de bytes de almacenamiento
asignados para la SQLDA
v SQLD para indicar el número de variables utilizadas en la SQLDA al
procesar la sentencia
v Las apariciones de SQLVAR, para indicar los atributos de las variables.
SQLDA debe tener suficiente almacenamiento para contener todas las
apariciones de SQLVAR. Por lo tanto, el valor de SQLDABC debe ser
mayor o igual que 16 + SQLN*(N), donde N es la longitud de una
aparición SQLVAR.
Si deben incluirse datos de salida de tipo de datos estructurados o LOB,
deberán existir dos entradas de SQLVAR para cada marcador de parámetro
de salida.
SQLD debe establecerse en un valor mayor o igual que cero y menor o
igual que SQLN.
Sentencias 1077
EXECUTE
USING
Incluye una lista de variables o expresiones para los que se sustituyen valores
para los marcadores de parámetro de entrada en la sentencia preparada.
En el caso de una sentencia CALL dinámica, los marcadores de parámetro que
aparecen en los argumentos IN e INOUT para el procedimiento son
marcadores de parámetro de entrada. Para todas las demás sentencias
dinámicas, todos los marcadores de parámetro son marcadores de parámetro
de entrada. Si en la sentencia aparece algún marcador de parámetro de
entrada, debe especificarse la cláusula USING (SQLSTATE 07004).
variable-lenguaje-principal-entrada, ...
Identifica una variable del lenguaje principal que se declara en el programa
de acuerdo a las normas para la declaración de variables del lenguaje
principal. El número de variables debe ser el mismo que el número de
marcadores de parámetro de entrada de la sentencia preparada. La variable
número n corresponde al marcador de parámetro número n de la sentencia
preparada. Las variables de localizador y las variables de referencia a
archivo, cuando deben utilizarse, pueden proporcionarse como la fuente de
los valores de los marcadores de parámetro.
expresión
Identifica una expresión que se utilizará como entrada para el marcador de
parámetro de entrada correspondiente de la sentencia preparada. Una
expresión distinta de una variable-lenguaje-principal sólo se puede especificar
cuando la sentencia EXECUTE se emite dentro de una sentencia de SQL
compuesto (compilado).
DESCRIPTOR nombre-descriptor-entrada
Identifica una SQLDA de entrada que debe contener una descripción
válida de variables del lenguaje principal.
Antes de procesar la sentencia EXECUTE, el usuario debe establecer los
campos siguientes en la SQLDA de entrada:
v SQLN para indicar el número de apariciones de SQLVAR
proporcionadas en la SQLDA
v SQLDABC para indicar el número de bytes de almacenamiento
asignados para la SQLDA
v SQLD para indicar el número de variables utilizadas en la SQLDA al
procesar la sentencia
v Las apariciones de SQLVAR, para indicar los atributos de las variables.
SQLDA debe tener suficiente almacenamiento para contener todas las
apariciones de SQLVAR. Por lo tanto, el valor de SQLDABC debe ser
mayor o igual que 16 + SQLN*(N), donde N es la longitud de una
aparición SQLVAR.
Si deben incluirse datos de entrada de tipo de datos estructurados o LOB,
deberán existir dos entradas de SQLVAR para cada marcador de
parámetro.
SQLD debe establecerse en un valor mayor o igual que cero y menor o
igual que SQLN.
Notas
v Antes de ejecutarse la sentencia preparada, cada marcador de parámetro de
entrada se sustituye eficazmente por el valor de su variable o expresión
correspondiente. Para un marcador de parámetro con tipo, los atributos de la
expresión o variable de destino son aquellos determinados por la especificación
Sentencias 1079
EXECUTE
como, por ejemplo, PREPARE o EXECUTE IMMEDIATE. Una vez creadas, las
secciones de las sentencias de SQL dinámico pueden volver a crearse por medio
de una preparación implícita de la sentencia que realiza el sistema si la sección
original se ha suprimido por razones relacionadas con la gestión del espacio o si
ha dejado de ser válida debido a que se han realizado cambios en el entorno.
Cada sentencia de SQL se coloca en antememoria en el nivel de la base de datos
y las aplicaciones pueden compartirla. Las sentencias de SQL estático se
comparten entre las aplicaciones que utilizan el mismo paquete; las sentencias
de SQL dinámico se comparten entre las aplicaciones que utilizan el mismo
entorno de compilación y exactamente el mismo texto de sentencia. El texto de
cada sentencia de SQL que una aplicación emite se coloca en antememoria
localmente dentro de la aplicación para poder utilizarlo si se necesita una
preparación implícita. Cada sentencia PREPARE del programa de aplicación
puede poner en antememoria una sentencia. Todas las sentencias EXECUTE
IMMEDIATE de un programa de aplicación comparten el mismo espacio y sólo
existe una sentencia colocada en antememoria para todas estas sentencias
EXECUTE IMMEDIATE al mismo tiempo. Si se emite múltiples veces la misma
sentencia PREPARE o cualquier sentencia EXECUTE IMMEDIATE con una
sentencia de SQL distinta cada vez, sólo se pondrá en antememoria la última
sentencia para volverla a utilizar. La utilización óptima de la antememoria
consiste en emitir varias sentencias PREPARE distintas una vez durante el inicio
de la aplicación y en emitir posteriormente una sentencia EXECUTE o OPEN en
función de las necesidades.
Cuando se colocan en antememoria sentencias de SQL dinámico, se puede
reutilizar una sentencia en varias unidades de trabajo sin tener que volver a
preparar la sentencia, a menos que las sentencias SQL preparadas en un paquete
estén vinculadas con la opción KEEPDYNAMIC NO. El sistema vuelve a compilar la
sentencia, si es necesario, cuando se producen cambios en el entorno.
Los sucesos siguientes son ejemplos de cambios en el entorno o en objetos de
datos que pueden dar lugar a que las sentencias dinámicas colocadas en
antememoria se preparen implícitamente en la siguiente petición PREPARE,
EXECUTE, EXECUTE IMMEDIATE u OPEN:
– ALTER FUNCTION
– ALTER METHOD
– ALTER NICKNAME
– ALTER PROCEDURE
– ALTER SERVER
– ALTER TABLE
– ALTER TABLESPACE
– ALTER TYPE
– CREATE FUNCTION
– CREATE FUNCTION MAPPING
– CREATE INDEX
– CREATE METHOD
– CREATE PROCEDURE
– CREATE TABLE
– CREATE TEMPORARY TABLESPACE
– CREATE TRIGGER
– CREATE TYPE
– DROP (todos los objetos)
Sentencias 1081
EXECUTE
Ejemplos
EXECUTE IMMEDIATE
La sentencia EXECUTE IMMEDIATE prepara una forma ejecutable de una
sentencia de SQL a partir de una forma de serie de caracteres de la sentencia y
ejecuta la sentencia de SQL.
Invocación
Esta sentencia sólo puede incorporarse en un programa de aplicación. Se trata de
una sentencia ejecutable que no puede prepararse de forma dinámica.
Autorización
Las normas de autorización son las que se han definido para la sentencia de SQL
especificada.
Sintaxis
EXECUTE IMMEDIATE expresión
Descripción
expresión
Expresión que devuelve la serie de sentencia que se va a ejecutar. La expresión
debe devolver un tipo de serie de caracteres que sea inferior al tamaño de
sentencia máximo de 2.097.152 bytes. Tenga en cuenta que un CLOB(2097152)
puede contener una sentencia de tamaño máximo, pero VARCHAR no puede.
La serie de caracteres de la sentencia debe ser una de las sentencias de SQL
siguientes:
v ALTER
v CALL
v COMMENT
v COMMIT
v SQL compuesto (compilado)
v SQL compuesto (en línea)
v CREATE
v DECLARE GLOBAL TEMPORARY TABLE
v DELETE
v DROP
v EXPLAIN
v FLUSH EVENT MONITOR
v FLUSH PACKAGE CACHE
v GRANT
v INSERT
Sentencias 1083
EXECUTE IMMEDIATE
v LOCK TABLE
v MERGE
v REFRESH TABLE
v RELEASE SAVEPOINT
v RENAME
v REVOKE
v ROLLBACK
v SAVEPOINT
v SET COMPILATION ENVIRONMENT
v SET CURRENT DECFLOAT ROUNDING MODE
v SET CURRENT DEFAULT TRANSFORM GROUP
v SET CURRENT DEGREE
v SET CURRENT EXPLAIN MODE
v SET CURRENT EXPLAIN SNAPSHOT
v SET CURRENT FEDERATED ASYNCHRONY
v SET CURRENT IMPLICIT XMLPARSE OPTION
v SET CURRENT ISOLATION
v SET CURRENT LOCALE LC_MESSAGES
v SET CURRENT LOCALE LC_TIME
v SET CURRENT LOCK TIMEOUT
v SET CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION
v SET CURRENT MDC ROLLOUT MODE
v SET CURRENT OPTIMIZATION PROFILE
v SET CURRENT QUERY OPTIMIZATION
v SET CURRENT REFRESH AGE
v SET CURRENT TEMPORAL BUSINESS_TIME
v SET CURRENT TEMPORAL SYSTEM_TIME
v SET ENCRYPTION PASSWORD
v SET EVENT MONITOR STATE (solamente si el comportamiento de
ejecución de DYNAMICRULES está en vigor para el paquete)
v SET INTEGRITY
v SET PASSTHRU
v SET PATH
v SET ROLE (solamente si el comportamiento de ejecución de
DYNAMICRULES está en vigor para el paquete)
v SET SCHEMA
v SET SERVER OPTION
v SET SESSION AUTHORIZATION
v SET SQL_CCFLAGS
v SET USAGE LIST STATE (solamente si el comportamiento de ejecución de
DYNAMICRULES está en vigor para el paquete)
v SET variable
v TRANSFER OWNERSHIP (solamente si el comportamiento de ejecución de
DYNAMICRULES está en vigor para el paquete)
v TRUNCATE (solamente si el comportamiento de ejecución de
DYNAMICRULES está en vigor para el paquete)
v UPDATE
La serie de sentencia no debe incluir marcadores de parámetro ni referencias a
variables del lenguaje principal, y no debe empezar por EXEC SQL. No debe
contener un terminador de sentencia, a excepción de las sentencias de SQL
compuesto, que pueden contener puntos y coma (;) para separar sentencias
dentro del bloque compuesto. En algunas sentencias CREATE y ALTER se
utiliza una sentencia de SQL compuesto, por lo que dichas sentencias también
pueden contener puntos y coma.
Cuando se ejecuta una sentencia EXECUTE IMMEDIATE, la serie de sentencia
se analiza y se comprueba si hay errores. Si la sentencia de SQL no es válida,
no se ejecuta y en la SQLCA se informa acerca de la condición de error que
evita que pueda ejecutarse. Si la sentencia de SQL es válida, pero se produce
un error durante su ejecución, dicha condición de error se informa a la
SQLCA.
Notas
v El almacenamiento de sentencias en antememoria afecta al funcionamiento de la
sentencia EXECUTE IMMEDIATE.
Ejemplo
Sentencias 1085
EXPLAIN
EXPLAIN
La sentencia EXPLAIN captura información sobre el plan de acceso elegido para la
sentencia explicable proporcionada y coloca esta información en las tablas de
Explain.
Una sentencia explicable puede ser una sentencia XQuery válida o una de las
siguientes sentencias de SQL: CALL, SQL compuesto (dinámico), DELETE,
INSERT, MERGE, REFRESH, SELECT, SELECT INTO, SET INTEGRITY, UPDATE,
VALUES o VALUES INTO.
Invocación
Autorización
Sintaxis
EXPLAIN PLAN SELECTION
ALL FOR SNAPSHOT WITH REOPT ONCE
(1) WITH
PLAN
SET QUERYNO = entero SET QUERYTAG = constante-serie
FOR sentencia-sql-explicable
XQUERY 'sentencia-xquery-explicable'
Notas:
1 Sólo se da soporte a la opción PLAN para la tolerancia de la sintaxis de
sentencias EXPLAIN existentes de DB2 para z/OS. No hay ninguna tabla
PLAN. La especificación de PLAN es equivalente a especificar PLAN
SELECTION.
Descripción
PLAN SELECTION
Indica que la información de la fase de selección del plan de la compilación de
consultas debe insertarse en las tablas de Explain.
ALL
La especificación de ALL es equivalente a especificar PLAN SELECTION.
PLAN
La opción PLAN proporciona la tolerancia de la sintaxis para las aplicaciones
de bases de datos existentes de otros sistemas. La especificación de PLAN es
equivalente a especificar PLAN SELECTION.
FOR SNAPSHOT
Esta cláusula indica que sólo debe tomarse una instantánea de explicación y
colocarla en la columna SNAPSHOT de la tabla EXPLAIN_STATEMENT. No se
captura ninguna otra información distinta de la que se encuentra en las tablas
EXPLAIN_INSTANCE y EXPLAIN_STATEMENT.
WITH SNAPSHOT
Esta cláusula indica que, además de la información de explicación normal, se
debe tomar una instantánea de explicación.
El comportamiento por omisión de la sentencia EXPLAIN es reunir únicamente
información de explicación normal y no la instantánea de explicación.
por omisión (no se especifican FOR SNAPSHOT ni WITH SNAPSHOT)
Coloca la información de explicación en las tablas de Explain.
WITH REOPT ONCE
Esta cláusula indica que la sentencia explicable especificada se debe volver a
optimizar mediante los valores para variables del lenguaje principal,
marcadores de parámetro, registros especiales o variables globales que se
utilizaron anteriormente para volver a optimizar esta sentencia con REOPT
ONCE. Las tablas de Explain se llenarán con los datos del nuevo plan de
acceso. Si el usuario tiene autorización DBADM, o la variable de registro de
base de datos DB2_VIEW_REOPT_VALUES se ha establecido en YES, la tabla
EXPLAIN_PREDICATE también se rellenará con los valores si se han utilizado
para reoptimizar la sentencia.
SET QUERYNO = entero
Asocia el entero, a través de la columna QUERYNO de la tabla
EXPLAIN_STATEMENT, con la sentencia explicable. El valor entero suministrado
debe ser un valor positivo.
Si no se especifica esta cláusula para una sentencia EXPLAIN dinámica, se
asigna un valor por omisión de uno (1). Para una sentencia EXPLAIN estática,
el valor por omisión asignado es el número de sentencia asignado por el
precompilador.
SET QUERYTAG = constante-serie
Asocia la constante-serie, a través de la columna QUERYTAG de la tabla
EXPLAIN_STATEMENT, con la sentencia explicable. La constante-serie puede ser
cualquier serie de caracteres de hasta 20 bytes de longitud. Si el valor
suministrado es inferior a 20 bytes de longitud, el valor se rellena por la
derecha con blancos hasta la longitud necesaria.
Si no se especifica esta cláusula para una sentencia EXPLAIN, se utilizan
blancos como el valor por omisión.
Sentencias 1087
EXPLAIN
FOR sentencia-sql-explicable
Especifica la sentencia de SQL que se debe explicar. Esta sentencia puede ser
cualquier sentencia CALL, SQL compuesto (dinámico), DELETE, INSERT,
MERGE, REFRESH, SELECT, SELECT INTO, SET INTEGRITY, UPDATE,
VALUES o VALUES INTO SQL válida. Si la sentencia EXPLAIN está
incorporada en un programa, la sentencia-sql-explicable puede contener
referencias a las variables del lenguaje principal (estas variables deben estar
definidas en el programa). De manera similar, si EXPLAIN se prepara de forma
dinámica, la sentencia-sql-explicable puede contener marcadores de parámetro.
La sentencia-sql-explicable debe ser una sentencia de SQL válida que podría
prepararse y ejecutarse independientemente de la sentencia EXPLAIN. No
puede ser un nombre de sentencia ni una variable del lenguaje principal. Las
sentencias de SQL que hacen referencia a los cursores definidos a través de
CLP no se pueden utilizar con esta sentencia.
Para explicar el SQL dinámico dentro de una aplicación, toda la sentencia
EXPLAIN debe estar preparada dinámicamente.
FOR XQUERY 'sentencia-xquery-explicable'
Especifica la sentencia de XQUERY que se debe explicar. Esta sentencia puede
ser cualquier sentencia XQUERY válida.
Si la sentencia EXPLAIN está incorporada en un programa, la
'sentencia-xquery-explicable' puede contener referencias a variables del lenguaje
principal, siempre y cuando las variables del lenguaje principal no se utilicen
en el nivel superior de la sentencia XQUERY, sino que se pasen a través de una
función XMLQUERY, mediante un predicado XMLEXISTS, o una función
XMLTABLE. Las variables del lenguaje principal deben definirse en el
programa.
De manera similar, si EXPLAIN se prepara de forma dinámica, la
'sentencia-xquery-explicable' puede contener marcadores de parámetro, siempre y
cuando se siguen las mismas restricciones que para pasar variables del
lenguaje principal.
Como alternativa, se puede utilizar db2-fn:sqlquery de la función XQUERY de
DB2 para incorporar sentencias de SQL con referencias a variables del lenguaje
principal y marcadores de parámetro.
La sentencia-xquery-explicable debe ser una sentencia de XQUERY válida que
podría prepararse y ejecutarse independientemente de la sentencia EXPLAIN.
Las sentencias de consulta que hacen referencia a los cursores definidos a
través de CLP no se pueden utilizar con esta sentencia.
Notas
v El recurso Explain utiliza los ID siguientes como esquema al calificar tablas de
Explain que se están llenando de datos:
– El ID de autorización de sesión SQL dinámico
– El ID de autorización de sentencia para SQL estático
El esquema se puede asociar con un conjunto de tablas de Explain o alias que
apuntan a un conjunto de tablas de Explain en un esquema distinto. Si no se
encuentran tablas de Explain en el esquema, el recurso Explain comprueba la
existencia de tablas de Explain en el esquema SYSTOOLS e intenta utilizar
dichas tablas.
v La tabla siguiente muestra la interacción de las palabras clave de instantánea y
la información de explicación.
Sentencias 1089
EXPLAIN
Ejemplos
v Ejemplo 1: Explique una sentencia SELECT simple y póngale el distintivo
QUERYNO = 13.
EXPLAIN PLAN SET QUERYNO = 13
FOR SELECT C1
FROM T1
v Ejemplo 2: Explique una sentencia SELECT simple y póngale el distintivo
QUERYTAG = 'TEST13'.
EXPLAIN PLAN SELECTION SET QUERYTAG = ’TEST13’
FOR SELECT C1
FROM T1
v Ejemplo 3: Explique una sentencia SELECT simple y póngale los distintivos
QUERYNO = 13 y QUERYTAG = 'TEST13'.
EXPLAIN PLAN SELECTION SET QUERYNO = 13 SET QUERYTAG = ’TEST13’
FOR SELECT C1
FROM T1
v Ejemplo 4: Intente obtener información de explicación cuando no existan tablas
de Explain.
EXPLAIN ALL FOR SELECT C1
FROM T1
FETCH
La sentencia FETCH coloca un cursor en la siguiente fila de su tabla de resultados
y asigna los valores de dicha fila a las variables de destino.
Invocación
Autorización
Sintaxis
FETCH nombre-cursor
FROM nombre-variable-cursor
INTO destino-asignación
USING DESCRIPTOR nombre-descriptor
Sentencias 1091
FETCH
destino-asignación
nombre-variable-global
nombre-variable-lenguaje-principal
nombre-parámetro-SQL
nombre-variable-SQL
nombre-variable-transición
nombre-variable-matriz [ índice-matriz ]
referencia-campo
Descripción
nombre-variable-cursor
Identifica el cursor que se va a utilizar en una operación de lectura. El
nombre-variable-cursor debe identificar una variable de cursor que esté en el
ámbito. Cuando se ejecuta la sentencia FETCH, el cursor subyacente del
nombre-variable-cursor debe estar en estado abierto. Una sentencia FETCH que
utiliza un nombre-variable-cursor sólo se puede utilizar en una sentencia de SQL
compuesto (compilado).
INTO destino-asignación
Identifica uno o varios destinos para la asignación de los valores de salida. El
primer valor de la fila del resultado se asigna al primer destino de la lista, el
segundo valor al segundo destino, etcétera. Cada asignación que se realiza
para un destino-asignación se realiza secuencialmente y siguiendo la lista. Si se
produce un error en cualquier asignación, no se asigna el valor al destino y no
se asignan más valores a los destinos. Cualquier valor que ya se haya asignado
a los destinos continúa asignado.
Cuando el tipo de datos de cada destino-asignación no es un tipo de fila, se
asigna el valor 'W' al campo SQLWARN3 del SQLCA si el número de
destinos-asignación es menor que el número de valores de la columna de
resultados.
Si el tipo de datos de un destino-asignación es un tipo de fila, debe haber
exactamente un destino-asignación especificado (SQLSTATE 428HR), el número
de columnas debe coincidir con el número de campos en el tipo de fila y los
tipos de datos de las columnas de la fila captada deben poder asignarse a los
campos correspondientes del tipo de fila (SQLSTATE 42821).
Si el tipo de datos de un destino-asignación es un elemento de matriz, debe
haber exactamente un destino-asignación especificado.
nombre-variable-global
Identifica la variable global que es el sujeto de la asignación.
nombre-variable-lenguaje-principal
Identifica la variable del lenguaje principal que es el sujeto de la
asignación. Para los valores de salida LOB, el destino puede ser una
variable del lenguaje principal normal (si es lo suficientemente grande),
una variable de localizador LOB o una variable de referencia a archivos
LOB.
nombre-parámetro-SQL
Identifica el parámetro que es el sujeto de la asignación.
nombre-variable-SQL
Identifica la variable de SQL que es el sujeto de la asignación. Las variables
de SQL se deben declarar antes de utilizarlas.
nombre-variable-transición
Identifica la columna que se debe actualizar en la fila de transición. Un
nombre-variable-transición debe identificar una columna en la tabla sujeto de
un activador, calificado opcionalmente por un nombre de correlación que
identifica el nuevo valor.
nombre-variable-matriz
Identifica una variable de SQL, un parámetro de SQL o una variable global
con tipo de matriz.
[índice-matriz]
Expresión que especifica qué elemento de la matriz será el destino de
la asignación. Para una matriz común, la expresión de índice-matriz se
debe poder asignar a INTEGER (SQLSTATE 428H1) y no puede ser un
valor nulo. Su valor debe estar entre 1 y la cardinalidad máxima
definida para la matriz (SQLSTATE 2202E). Para una matriz asociativa,
la expresión de índice-matriz se debe poder asignar al tipo de datos de
índice de la matriz asociativa (SQLSTATE 428H1) y no puede ser un
valor nulo.
referencia-campo
Identifica el campo de un valor de tipo de fila que es el destino de la
asignación. La referencia-campo debe especificarse como un nombre-campo
calificado donde el calificador identifica el valor de fila donde está definido
el campo.
USING DESCRIPTOR nombre-descriptor
Identifica una SQLDA que debe contener una descripción válida de cero o más
variables del lenguaje principal.
Antes de procesar la sentencia FETCH, el usuario debe establecer los campos
siguientes en la SQLDA:
v SQLN para indicar el número de apariciones de SQLVAR proporcionadas en
la SQLDA.
v SQLDABC para indicar el número de bytes de almacenamiento asignado
para la SQLDA.
v SQLD para indicar el número de variables utilizadas en SQLDA al procesar
la sentencia.
v Las apariciones de SQLVAR, para indicar los atributos de las variables.
SQLDA debe tener suficiente almacenamiento para contener todas las
apariciones de SQLVAR. Por lo tanto, el valor de SQLDABC debe ser mayor o
igual que 16 + SQLN*(N), donde N es la longitud de una aparición SQLVAR.
Si las columnas resultantes de LOB o de tipo estructurado necesitan
acomodarse, debe haber dos entradas SQLVAR para cada elemento de la lista
de selección (o columna de la tabla de resultados).
SQLD debe establecerse en un valor mayor o igual que cero y menor o igual
que SQLN.
Cada asignación que se realiza para una variable se realiza de acuerdo con normas
específicas. Si el número de variables es menor que el número de valores de la fila,
el campo SQLWARN3 de la SQLDA se establece en 'W'. Tenga en cuenta que no
hay ningún aviso si hay más variables que el número de columnas del resultado.
Sentencias 1093
FETCH
Notas
v Posición del cursor: un cursor abierto tiene tres posiciones posibles:
– Antes de una fila
– En una fila
– Después de la última fila.
Un cursor sólo puede estar en una fila como resultado de una sentencia FETCH.
Si el cursor está situado actualmente en la última fila o después de ella en la
tabla de resultados:
– SQLCODE se establece en +100 y SQLSTATE se establece en '02000'.
– El cursor se sitúa después de la última fila.
– Los valores no se asignan a destinos de asignación.
Si el cursor está situado actualmente antes de una fila, se volverá a situar en
dicha fila y se asignarán los valores a los destinos tal como especifican las
cláusulas INTO o USING.
Si el cursor está situado actualmente en una fila que no es la última, se situará
en la siguiente fila y se asignarán los valores de dicha fila a los destinos tal
como se especifica en la cláusula INTO o USING.
Si un cursor está en una fila, dicha fila se llama la fila actual del cursor. Un
cursor al que se haga referencia en una sentencia UPDATE o DELETE debe estar
situado en una fila.
Es posible que se produzca un error que haga que el estado del cursor sea
imprevisible.
v Cuando se recuperan datos con localizadores de LOB en situaciones en que no
es necesario conservar el localizador entre una sentencia FETCH y otra, es
aconsejable emitir una sentencia FREE LOCATOR antes de emitir la siguiente
sentencia FETCH, ya que los recursos del localizador son limitados.
v Es posible que FETCH no devuelva un aviso. También es posible que el aviso
devuelto corresponda a una fila recuperada anteriormente. Esto se produce
como resultado de las optimizaciones como, por ejemplo, la utilización de tablas
temporales del sistema o de operadores de desplazamiento descendente.
v El almacenamiento de sentencias en antememoria afecta al funcionamiento de la
sentencia EXECUTE IMMEDIATE.
v DB2 CLI da soporte a capacidades de búsqueda adicionales. Por ejemplo cuando
la tabla de resultados de un cursor es de sólo lectura, se puede utilizar la
función SQLFetchScroll() para situar el cursor en cualquier punto dentro de
dicha tabla de resultados.
v Para un cursor actualizable, se obtiene un bloqueo en una fila cuando se capta.
v Si la definición del cursor contiene una sentencia de cambio de datos de SQL o
invoca una rutina que modifica datos de SQL, un error durante la operación de
recuperación no hace que las filas modificadas se retrotraigan, aunque el error
haga que se cierre el cursor.
Ejemplos
v Ejemplo 1: En este ejemplo C, la sentencia FETCH coloca los resultados de la
sentencia SELECT en las variables de programa dnum, dname y mnum. Cuando ya
no quedan más filas para leer, se devuelve la condición de no encontrado.
mientras (SQLCODE==0) {
EXEC SQL FETCH C1 INTO :dnum, :dname, :mnum;
}
Sentencias 1095
FLUSH BUFFERPOOLS
FLUSH BUFFERPOOLS
La sentencia FLUSH BUFFERPOOLS graba las páginas sucias de todas las
agrupaciones de almacenamientos intermedios de una base de datos concreta de
forma síncrona en el disco. En entornos DB2 pureScale, las páginas sucias de la
agrupación de almacenamientos intermedios del grupo también se graban de
forma síncrona en el disco.
Invocación
Autorización
Los privilegios que ostenta el ID de autorización de la sentencia deben incluir la
autorización SQLADM, DBADM, SYSMAINT, SYSCTRL o SYSADM.
Sintaxis
FLUSH BUFFERPOOL ALL
BUFFERPOOLS
Descripción
ALL
Vacía las páginas sucias de todas las agrupaciones de almacenamientos
intermedios (locales y grupos).
Notas
v Proceso de páginas sucias: sólo se graban en el disco las páginas sucias que
están en las agrupaciones de almacenamientos intermedios cuando la sentencia
empieza el proceso. Las páginas sucias que se añaden a las agrupaciones de
almacenamientos intermedios antes de que la sentencia acabe el proceso no se
graban en el disco.
v Sintaxis alternativa: se puede especificar BUFFERPOOL en lugar de
BUFFERPOOLS.
Invocación
Autorización
Sintaxis
FLUSH EVENT MONITOR nombre-supervisor-sucesos
BUFFER
Descripción
nombre-supervisor-sucesos
Nombre del supervisor de sucesos. Este nombre consta de una sola parte. Se
trata de un identificador ordinario.
BUFFER
Indica que se deben grabar los almacenamientos intermedios del supervisor de
sucesos. Si se especifica BUFFER, no se generan los registros parciales. Sólo se
graban los datos que ya están presentes en los almacenamientos intermedios
del supervisor de sucesos.
Notas
v Cuando se desecha el supervisor de sucesos no se restauran los valores del
supervisor de sucesos. Esto significa que el registro del supervisor de sucesos
que se habría generado si no se hubiese desechado, se seguirá generando
cuando se active el suceso del supervisor normal.
v La sentencia FLUSH EVENT MONITOR no provoca que se generen y graben
errores para el supervisor de sucesos UNIT OF WORK.
Sentencias 1097
FLUSH OPTIMIZATION PROFILE CACHE
Invocación
Autorización
Sintaxis
ALL
FLUSH OPTIMIZATION PROFILE CACHE
nombre-perfil-optimización
Descripción
nombre-perfil-optimización
Especifica el nombre del perfil de optimización que se debe desechar de la
antememoria de perfiles de optimización. Si el nombre especificado no está
calificado, se utilizará el valor del registro CURRENT DEFAULT SCHEMA
como calificador implícito.
ALL
Especifica que todos los perfiles de todas las particiones de base de datos
activas se deben desechar de la antememoria de perfiles de optimización.
Notas
v La sentencia FLUSH OPTIMIZATION PROFILE CACHE elimina todos o un solo
perfil de optimización de la antememoria de perfiles de optimización. También
causa la invalidación lógica de cualquier sentencia de SQL dinámico en
antememoria que se haya preparado con el perfil de optimización en cuestión.
v Cuando se realiza la siguiente petición para la misma sentencia de SQL, se
vuelven a generar planes de acceso nuevos para los planes dinámicos
invalidados.
v Los paquetes que hacen referencia a un perfil de optimización eliminado de la
antememoria de perfiles de optimización por esta sentencia se deben volver a
enlazar explícitamente para permitir que se generen nuevos planes de acceso.
Ejemplos
v Ejemplo 1: El perfil de optimización "Rick"."Foo" se desecha de la antememoria
de perfiles de optimización.
SET CURRENT SCHEMA = ’"Rick"’
FLUSH OPTIMIZATION PROFILE CACHE "Foo"
v Ejemplo 2: El perfil de optimización JOHN.ALL se elimina de la antememoria
de perfiles de optimización.
SET CURRENT SCHEMA = ’"Rick"’
FLUSH OPTIMIZATION PROFILE CACHE JOHN.ALL
Mensajes
v No se emitirá ningún error si la antememoria de perfiles de optimización está
vacía o si los perfiles de optimización especificados (ya sea explícita o
implícitamente) no existen en la antememoria de perfiles de optimización.
Sentencias 1099
FLUSH PACKAGE CACHE
Invocación
Autorización
Sintaxis
FLUSH PACKAGE CACHE DYNAMIC
Notas
v Esta sentencia afecta a todas las entradas de SQL dinámico colocadas en
antememoria que están en la antememoria de paquetes de todas las particiones
de base de datos activas.
v Puesto que las sentencias de SQL dinámico colocadas en antememoria se
invalidan, la antememoria de paquetes que se utiliza para la entrada colocada en
antememoria se liberará si la entrada no está utilizándose cuando se ejecuta la
sentencia FLUSH PACKAGE CACHE.
v Cualquier sentencia de SQL dinámico colocada en antememoria que actualmente
esté utilizándose podrá seguir existiendo en la antememoria del paquete hasta
que el usuario actual ya no la necesite; el nuevo usuario siguiente de la misma
sentencia hará que DB2 realice una preparación implícita de la sentencia y el
nuevo usuario ejecutará la nueva versión de la sentencia de SQL dinámico
colocada en antememoria.
FOR
La sentencia FOR ejecuta una sentencia o grupo de sentencias para cada fila de
una tabla.
Invocación
Autorización
Sintaxis
FOR nombre-bucle-for AS
etiqueta:
ASENSITIVE WITHOUT HOLD (1)
nombre-cursor CURSOR FOR
INSENSITIVE WITH HOLD
sentencia-rutina-SQL:
sentencia-procedimiento-SQL ;
sentencia-función-SQL ;
sentencia-función-SQL:
Sentencias 1101
FOR
CALL
FOR
selección completa
,
WITH expresión-tabla-común
GET DIAGNOSTICS
IF
INSERT
ITERATE
LEAVE
MERGE
delete-buscada
update-buscada
SET Variable
SIGNAL
WHILE
Notas:
1 Esta opción sólo puede utilizarse en el contexto de un procedimiento de SQL
o una sentencia de SQL compuesto (compilado).
Descripción
etiqueta
Especifica la etiqueta de la sentencia FOR. Si se especifica la etiqueta inicial,
esa etiqueta puede utilizarse en sentencias LEAVE e ITERATE. Si se especifica
una etiqueta final, ésta deberá ser igual que la etiqueta inicial.
nombre-bucle-for
Especifica una etiqueta para la sentencia compuesta implícita que se genera
para implementar la sentencia FOR. Sigue las normas para la etiqueta de una
sentencia compuesta excepto en que no se puede utilizar con una sentencia
ITERATE o LEAVE en la sentencia FOR. El nombre-bucle-for se utiliza para
calificar los nombres de columna devueltos por la sentencia-select especificada.
nombre-cursor
Designa el cursor utilizado para seleccionar filas de la tabla de resultados de la
sentencia SELECT. Si no se especifica, DB2 genera un nombre de cursor
exclusivo. Para obtener una descripción de ASENSITIVE, INSENSITIVE,
WITHOUT HOLD o WITH HOLD, consulte “DECLARE CURSOR”.
sentencia-select
Especifica la sentencia SELECT del cursor. Todas las columnas de la lista de
selección deben tener un nombre y no pueden existir dos columnas con el
mismo nombre.
En un activador, una función, un método o una sentencia de SQL compuesto
(en línea), la sentencia-select sólo debe constar de una selección completa con
expresiones de tabla comunes opcionales.
sentencia-procedimiento-SQL
Especifica una o varias sentencias que se deben invocar para cada fila de la
tabla. La sentencia-procedimiento-SQL sólo se puede aplicar en el contexto de un
procedimiento de SQL o dentro de una sentencia de SQL compuesto
(compilado). Consulte sentencia-procedimiento-SQL en la sentencia de “SQL
compuesto (compilado)”.
sentencia-función-SQL
Especifica una o varias sentencias que se deben invocar para cada fila de la
Normas
v La lista de selección debe constar de nombres de columna exclusivos y los
objetos especificados en la sentencia-select deben existir cuando se crea el
procedimiento, o deben ser un objeto creado en una sentencia de procedimiento
SQL anterior.
v El cursor especificado en una sentencia-for no puede estar referenciado fuera de
la sentencia-for y no se puede especificar en una sentencia OPEN, FETCH ni
CLOSE.
Ejemplo
Sentencias 1103
FREE LOCATOR
FREE LOCATOR
La sentencia FREE LOCATOR elimina la asociación entre una variable localizadora
y su valor.
Invocación
Autorización
No se necesita.
Sintaxis
,
Descripción
LOCATOR nombre-variable, ...
Identifica una o varias variables localizadoras que deben declararse de acuerdo
con las normas para la declaración de variables localizadoras.
La variable-localizadora debe tener actualmente un localizador asignado a ella.
Es decir, deberá haberse asignado un localizador durante esta unidad de
trabajo (por medio de una sentencia CALL, FETCH, SELECT INTO o VALUES
INTO) y no deberá haberse liberado posteriormente (por medio de una
sentencia FREE LOCATOR); de lo contrario, se devolverá un error (SQLSTATE
0F001).
Si se especifica más de un localizador, se liberan todos los localizadores que se
pueden liberar, sin tener en cuenta los errores detectados en otros localizadores
de la lista.
Ejemplo
GET DIAGNOSTICS
La sentencia GET DIAGNOSTICS se utiliza para obtener información acerca del
entorno de ejecución actual, incluida la información relacionada con la sentencia de
SQL anterior (distinta de una sentencia GET DIAGNOSTICS) que se ha ejecutado.
Parte de la información que está disponible por medio de la sentencia GET
DIAGNOSTICS también está disponible en el SQLCA.
Invocación
Autorización
No se necesita.
Sintaxis
GET DIAGNOSTICS información-sentencia
información-condición
información-sentencia:
variable-SQL-1 = DB2_RETURN_STATUS
DB2_SQL_NESTING_LEVEL
ROW_COUNT
información-condición:
Descripción
información-sentencia
Devuelve información sobre la última sentencia de SQL ejecutada.
variable-SQL-1
Identifica la variable que es el sujeto de la asignación. La variable no debe
ser una variable global. Las variables de SQL se pueden definir en una
sentencia compuesta. El tipo de datos de la variable debe ser compatible
con el tipo de datos especificado en la Tabla 33 en la página 1107.
DB2_RETURN_STATUS
Identifica el valor de estado devuelto por el procedimiento asociado a la
sentencia de SQL ejecutada anteriormente, siempre que la sentencia fuera
Sentencias 1105
GET DIAGNOSTICS
Notas
v La sentencia GET DIAGNOSTICS no cambia el contenido del área de
diagnósticos (SQLCA). Las variables especiales SQLSTATE o SQLCODE
declaradas en un procedimiento de SQL se establecen en el SQLSTATE o
SQLCODE devuelto por la ejecución de la sentencia GET DIAGNOSTICS.
v Tipos de datos para elementos: La tabla siguiente muestra los tipos de datos
SQL para cada elemento de diagnóstico. Cuando un elemento de diagnóstico se
asigna a una variable, el tipo de datos de la variable debe ser compatible con el
tipo de datos del elemento de diagnóstico solicitado.
Tabla 33. Tipos de datos para los elementos GET DIAGNOSTICS
Tipo de información Elemento Tipo de datos
Información de sentencia DB2_RETURN_STATUS INTEGER
Información de sentencia DB2_SQL_NESTING_LEVEL INTEGER
Información de sentencia ROW_COUNT DECIMAL(31,0)
Información de condición DB2_TOKEN_STRING VARCHAR(1000)
Información de condición MESSAGE_TEXT VARCHAR(32672)
Ejemplos
v Ejemplo 1: en un procedimiento de SQL, ejecute una sentencia GET
DIAGNOSTICS para determinar cuántas filas se actualizaron.
CREATE PROCEDURE sqlprocg (IN deptnbr VARCHAR(3))
LANGUAGE SQL
BEGIN
DECLARE SQLSTATE CHAR(5);
DECLARE rcount INTEGER;
UPDATE CORPDATA.PROJECT
SET PRSTAFF = PRSTAFF + 1.5
WHERE DEPTNO = deptnbr;
GET DIAGNOSTICS rcount = ROW_COUNT;
-- En este momento, rcount contiene el número de filas que se actualizaron.
...
END
v Ejemplo 2: dentro de un procedimiento de SQL, procese el valor de estado
devuelto por la invocación de un procedimiento denominado TRYIT, el cual
puede devolver explícitamente un valor positivo, lo que indica un error de
usuario, o encontrar errores de SQL que producirían un valor de estado de
retorno negativo. Si el procedimiento se ejecuta satisfactoriamente, devuelve un
valor igual a cero.
CREATE PROCEDURE TESTIT ()
LANGUAGE SQL
A1:BEGIN
DECLARE RETVAL INTEGER DEFAULT 0;
...
CALL TRYIT;
GET DIAGNOSTICS RETVAL = DB2_RETURN_STATUS;
IF RETVAL <> 0 THEN
...
LEAVE A1;
Sentencias 1107
GET DIAGNOSTICS
ELSE
...
END IF;
END A1
GOTO
La sentencia GOTO se utiliza para definir una bifurcación a una etiqueta definida
por el usuario dentro de un procedimiento de SQL.
Invocación
Autorización
No se necesita.
Sintaxis
GOTO etiqueta
Descripción
etiqueta
Especifica una sentencia con etiqueta donde debe continuar el proceso. La
sentencia con etiqueta y la sentencia GOTO deben estar en el mismo ámbito:
v Si la sentencia GOTO se define en una sentencia FOR, la etiqueta se debe
definir dentro de la misma sentencia FOR, que no sea una sentencia FOR
anidada ni una sentencia compuesta anidada.
v Si la sentencia GOTO se define en una sentencia compuesta, la etiqueta se
debe definir dentro de la misma sentencia compuesta, que no sea una
sentencia FOR anidada ni una sentencia compuesta anidada.
v Si la sentencia GOTO se define en un manejador de condiciones, la etiqueta
se debe definir en el mismo manejador de condiciones, de acuerdo con las
demás normas sobre el ámbito
v Si la sentencia GOTO se define fuera de un manejador de condiciones, la
etiqueta no se debe definir dentro de un manejador.
Si la etiqueta no está definida dentro de un ámbito que sea accesible para la
sentencia GOTO, se produce un error (SQLSTATE 42736).
Notas
v Es aconsejable utilizar la sentencia GOTO de forma moderada. Esta sentencia
interfiere en las secuencias normales de proceso, lo que hace que la rutina sea
más difícil de leer y actualizar. Antes de utilizar una sentencia GOTO, determine
si en su lugar puede utilizarse otra sentencia, tal como IF o LEAVE, para eludir
la necesidad de utilizar una sentencia GOTO.
Ejemplo
Sentencias 1109
GOTO
Invocación
Autorización
Sintaxis
GRANT
ACCESSCTRL
BINDADD
CONNECT
CREATETAB
CREATE_EXTERNAL_ROUTINE
CREATE_NOT_FENCED_ROUTINE
CREATE_SECURE_OBJECT
DATAACCESS
WITH DATAACCESS WITH ACCESSCTRL
DBADM • • •
WITHOUT DATAACCESS WITHOUT ACCESSCTRL
EXPLAIN
IMPLICIT_SCHEMA
LOAD
QUIESCE_CONNECT
SECADM
SQLADM
WLMADM
ON DATABASE TO nombre-autorización
USER
GROUP
ROLE
PUBLIC
Sentencias 1111
GRANT (autorizaciones de bases de datos)
Descripción
ACCESSCTRL
Otorga la autorización de control de acceso. La autorización ACCESSCTRL
permite a quien la posee lo siguiente:
v Otorgar y revocar las autorizaciones de bases de datos siguientes:
BINDADD, CONNECT, CREATETAB, CREATE_EXTERNAL_ROUTINE,
CREATE_NOT_FENCED_ROUTINE, EXPLAIN, IMPLICIT_SCHEMA,
LOAD, QUIESE_CONNECT, SQLADM, WLMADM
v Otorgar y revocar todos los privilegios de nivel de objeto
La autorización ACCESSCTRL no puede otorgarse a PUBLIC (SQLSTATE
42508).
BINDADD
Otorga la autorización para crear paquetes. El creador de un paquete tiene
automáticamente el privilegio CONTROL en dicho paquete y conserva este
privilegio incluso si se revoca posteriormente la autorización BINDADD.
CONNECT
Otorga la autorización para acceder a la base de datos.
CREATETAB
Otorga la autorización para crear tablas base. El creador de una tabla base
tiene automáticamente el privilegio CONTROL en dicha tabla. El creador
conserva este privilegio incluso si posteriormente se revoca la autorización
CREATETAB.
No se necesita ninguna autorización explícita para la creación de vistas. Una
vista se puede crear en cualquier momento si el ID de autorización de la
sentencia utilizada para crear la vista tiene el privilegio CONTROL o SELECT
en cada tabla base de la vista.
CREATE_EXTERNAL_ROUTINE
Otorga la autorización para registrar rutinas externas. Deberá tenerse cuidado
de que las rutinas que se registran de esta forma no generen efectos
secundarios negativos. (Para obtener más información, consulte la descripción
de la cláusula THREADSAFE en las sentencias de rutina CREATE o ALTER.)
Cuando una rutina externa se ha registrado, esta sigue existiendo, aunque
posteriormente se invoque CREATE_EXTERNAL_ROUTINE.
CREATE_NOT_FENCED_ROUTINE
Otorga la autorización para registrar rutinas que se ejecutan en el proceso del
gestor de bases de datos. Deberá tenerse cuidado de que las rutinas que se
registran de esta forma no generen efectos secundarios negativos. (Para obtener
más información, vea la descripción de la cláusula FENCED en las sentencias
de rutina CREATE o ALTER).
Cuando una rutina se ha registrado como no delimitada, sigue ejecutándose de
esta forma, aunque posteriormente se invoque
CREATE_NOT_FENCED_ROUTINE.
CREATE_EXTERNAL_ROUTINE se otorga automáticamente a un
nombre-autorización al que se haya otorgado la autorización
CREATE_NOT_FENCED_ROUTINE.
CREATE_SECURE_OBJECT
Otorga autorización para crear activadores seguros y funciones seguras.
También otorga autorización para alterar el atributo seguro de esos objetos.
DATAACCESS
Otorga la autorización para acceder a los datos. La autorización DATAACCESS
permite a quien la posee lo siguiente:
v Seleccionar, insertar, actualizar, suprimir y cargar datos
v Ejecutar cualquier paquete
v Ejecutar cualquier rutina (excepto rutinas de auditoría)
La autorización DATAACCESS no puede otorgarse a PUBLIC (SQLSTATE
42508).
DBADM
Otorga la autorización de administrador de bases de datos. Un administrador
de bases de datos posee prácticamente todos los privilegios sobre casi todos los
objetos de la base de datos. Las únicas excepciones son aquellos privilegios que
forman parte de las autorizaciones de control de acceso, acceso a los datos y
administrador de seguridad. DBADM no se puede otorgar a PUBLIC.
EXPLAIN
Otorga autorización para explicar sentencias. La autorización EXPLAIN
permite a quien la posee explicar, preparar y describir sentencias de SQL
dinámico y estáticas sin necesidad de acceder a los datos.
IMPLICIT_SCHEMA
Otorga la autorización para crear implícitamente un esquema.
LOAD
Otorga autorización para cargar en la base de datos. Esta autorización
proporciona al usuario el derecho a utilizar el programa de utilidad LOAD
para la base de datos. DATAACCESS y DBADM también tienen esta
autorización por omisión. Sin embargo, si un usuario sólo tiene autorización
LOAD (no DATAACCESS), también se requerirá que el usuario tenga
privilegios de nivel de tabla. Además del privilegio LOAD, el usuario debe
tener:
v Privilegio INSERT sobre la tabla para realizar una carga en la modalidad
INSERT, TERMINATE (para finalizar un LOAD INSERT anterior) o
RESTART (para reiniciar un LOAD INSERT anterior)
v Privilegio INSERT y DELETE sobre la tabla para realizar una carga en la
modalidad REPLACE, TERMINATE (para finalizar un LOAD REPLACE
anterior) o RESTART (para reiniciar un LOAD REPLACE anterior)
v Privilegio INSERT para la tabla de excepciones, si esa tabla se utiliza como
parte de LOAD
QUIESCE_CONNECT
Otorga la autorización para acceder a la base de datos mientras está
inmovilizada.
SECADM
Otorga la autorización de administrador de seguridad. La autorización permite
realizar las operaciones siguientes a quien la posee:
v Crear y descartar objetos de seguridad como, por ejemplo, políticas de
auditoría, roles, etiquetas de seguridad, componentes de etiqueta de
seguridad, políticas de seguridad y contextos fiables
v Otorgar y revocar autorizaciones, exenciones, privilegios, roles y etiquetas de
seguridad.
v Otorgar y revocar el privilegio SETSESSIONUSER
v Ejecutar TRANSFER OWNERSHIP en objetos propiedad de otros
Sentencias 1113
GRANT (autorizaciones de bases de datos)
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Si el plug-in de seguridad vigente para la instancia no puede determinar el
estado del nombre-autorización, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización como ROLE en la base de datos y como
GROUP o USER de acuerdo con el plug-in de seguridad vigente, se devuelve
un error (SQLSTATE 56092).
– Si se define nombre-autorización según el plug-in de seguridad vigente como
USER y GROUP, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización sólo como USER de acuerdo con el plug-in
de seguridad vigente, o si no está definido, se presupone USER.
– Si se define el nombre-autorización sólo como GROUP de acuerdo con el
plug-in de seguridad vigente, se presupone GROUP.
Notas
v Las autorizaciones ACCESSCTRL, CREATE_SECURE_OBJECT, DATAACCESS,
DBADM o SECADM no pueden otorgarse al grupo especial PUBLIC. Por lo
tanto, otorgar las autorizaciones ACCESSCTRL, CREATE_SECURE_OBJECT,
DBADM, DATAACCESS o SECADM a un rol nombre-rol generará errores si
nombre-rol se ha otorgado a PUBLIC directa o indirectamente (SQLSTATE 42508).
– El rol nombre-rol se otorga directamente a PUBLIC si se ha emitido la
siguiente sentencia:
GRANT ROLE nombre-rol TO PUBLIC
– El rol nombre-rol se otorga indirectamente a PUBLIC si se han emitido las
siguientes sentencias:
GRANT ROLE nombre-rol TO ROLE nombre2-rol
GRANT ROLE nombre2-rol TO PUBLIC
v Alternativas de sintaxis: Las siguientes alternativas se admiten para mantener la
compatibilidad con versiones anteriores de productos DB2 y otros productos de
base de datos.
– CREATE_NOT_FENCED puede especificarse en lugar de
CREATE_NOT_FENCED_ROUTINE
– Puede especificarse SYSTEM en lugar de DATABASE
v Privilegios que se otorgan a un grupo: un privilegio que se otorga a un grupo no
se utiliza para comprobar la autorización de:
– Las sentencias de DML estáticas de un paquete
– Una tabla base mientras se procesa una sentencia CREATE VIEW
– Una tabla base mientras se procesa una sentencia CREATE TABLE para una
tabla de consulta materializada
– Rutina de creación de SQL
– Creación de activador
Ejemplos
v Ejemplo 1: Otorgue a los usuarios WINKEN, BLINKEN y NOD la autorización
para conectarse a la base de datos.
GRANT CONNECT ON DATABASE TO USER WINKEN, USER BLINKEN, USER NOD
v Ejemplo 2: Otorgue la autorización BINDADD en la base de datos a un grupo
denominado D024. Hay un grupo y un usuario llamados D024 en el sistema.
GRANT BINDADD ON DATABASE TO GROUP D024
Sentencias 1115
GRANT (autorizaciones de bases de datos)
GRANT (exención)
Este formato de la sentencia GRANT otorga a un usuario, grupo o rol una
exención para una norma de acceso para una política de seguridad de control de
acceso basado en etiquetas (LBAC) especificada.
Cuando el usuario que mantiene la exención accede a los datos de una tabla
protegida por esa política de seguridad, la norma indicada no se impondrá al
decidir si se puede acceder a los datos.
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 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
Sintaxis
GRANT EXEMPTION ON RULE DB2LBACREADARRAY
DB2LBACREADSET
DB2LBACREADTREE
DB2LBACWRITEARRAY WRITEDOWN
WRITEUP
DB2LBACWRITESET
DB2LBACWRITETREE
ALL
Descripción
EXEMPTION ON RULE
Otorga una exención en una norma de acceso.
DB2LBACREADARRAY
Otorga una en la norma DB2LBACREADARRAY predefinida.
DB2LBACREADSET
Otorga una exención en la norma DB2LBACREADSET predefinida.
DB2LBACREADTREE
Otorga una en la norma DB2LBACREADTREE predefinida.
DB2LBACWRITEARRAY
Otorga una exención en la norma DB2LBACWRITEARRAY predefinida.
Sentencias 1117
GRANT (exención)
WRITEDOWN
Especifica que la exención sólo se aplica a la grabación hacia abajo.
WRITEUP
Especifica que la exención sólo se aplica a la grabación hacia arriba.
DB2LBACWRITESET
Otorga una exención en la norma DB2LBACWRITESET predefinida.
DB2LBACWRITETREE
Otorga una exención en la norma DB2LBACWRITETREE predefinida.
ALL
Otorga una exención en todas las normas predefinidas.
FOR nombre-política
Identifica la política de seguridad para la que se otorga la exención. La
exención sólo será efectiva para las tablas que estén protegidas por esta política
de seguridad. El nombre debe identificar a una política de seguridad ya
descrita en el catálogo (SQLSTATE 42704).
TO Especifica a quién se le otorga la exención.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol. El nombre
de rol debe existir en el servidor actual (SQLSTATE 42704).
nombre-autorización,...
Lista los ID de autorización de uno o más usuarios, grupos o roles.
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Si el plug-in de seguridad vigente para la instancia no puede determinar el
estado del nombre-autorización, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización como ROLE en la base de datos y como
GROUP o USER de acuerdo con el plug-in de seguridad vigente, se devuelve
un error (SQLSTATE 56092).
– Si se define nombre-autorización según el plug-in de seguridad vigente como
USER y GROUP, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización sólo como USER de acuerdo con el plug-in
de seguridad vigente, o si no está definido, se presupone USER.
– Si se define el nombre-autorización sólo como GROUP de acuerdo con el
plug-in de seguridad vigente, se presupone GROUP.
– Si se define el nombre-autorización en la base de datos sólo como ROLE, se
presupone ROLE.
v Si la política de seguridad no está definida para que tenga en cuenta el acceso a
través de grupos o roles, se ignorará cualquier exención otorgada a un grupo o
rol cuando se intente el acceso.
Notas
v Por omisión, cuando se crea una política de seguridad, sólo se tienen en cuenta
las exenciones otorgadas a un usuario individual. Para que se tengan en cuenta
los grupos o los roles para la política de seguridad, deberá emitir la sentencia
ALTER SECURITY POLICY y especificar USE GROUP AUTHORIZATION o USE
ROLE AUTHORIZATION que sea de aplicación.
Ejemplos
v Ejemplo 1: Otorgar una exención en la norma de acceso DB2LBACREADSET para
la política de seguridad DATA_ACCESS del usuario WALID.
GRANT EXEMPTION ON RULE DB2LBACREADSET FOR DATA_ACCESS TO USER WALID
v Ejemplo 2: Otorga una exención en la norma de acceso DB2LBACWRITEARRAY
con la opción WRITEDOWN para la política de seguridad DATA_ACCESS al
usuario BOBBY.
GRANT EXEMPTION ON RULE DB2LBACWRITEARRAY WRITEDOWN
FOR DATA_ACCESS TO USER BOBBY
v Ejemplo 3: Otorga una exención en la norma de acceso DB2LBACWRITEARRAY
con la opción WRITEUP para la política de seguridad DATA_ACCESS al usuario
BOBBY.
GRANT EXEMPTION ON RULE DB2LBACWRITEARRAY WRITEUP
FOR DATA_ACCESS TO USER BOBBY
Sentencias 1119
GRANT (privilegios de variable global)
Invocación
Autorización
Sintaxis
PRIVILEGES
GRANT ALL ON VARIABLE nombre-variable
,
READ
WRITE
TO nombre-autorización
USER WITH GRANT OPTION
GROUP
ROLE
PUBLIC
Descripción
ALL PRIVILEGES
Otorga todos los privilegios sobre la variable global especificada.
READ
Otorga el privilegio para leer el valor de la variable global especificada.
WRITE
Otorga el privilegio para asignar un valor a la variable global especificada.
ON VARIABLE nombre-variable
Identifica la variable global sobre la que va a otorgarse uno o más privilegios.
El nombre-variable, incluyendo un calificador implícito o explícito, debe
identificar una variable global que existe en el servidor actual y que no es una
variable de módulo (SQLSTATE 42704).
TO Especifica a quién se otorgan los privilegios.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica a un grupo.
ROLE
Especifica que el nombre-autorización identifique un rol existente en el
servidor actual (SQLSTATE 42704).
nombre-autorización,...
Lista los ID de autorización de uno o más usuarios, grupos o roles. La lista
de los ID de autorización no puede incluir el ID de autorización del
usuario que emite la sentencia (SQLSTATE 42502).
PUBLIC
Otorga los privilegios especificados a un conjunto de usuarios (ID de
autorización). Para obtener más información, consulte “Autorizaciones,
privilegios y propiedad de objetos”.
WITH GRANT OPTION
Permite que el nombre-autorización especificado pueda otorgar los privilegios a
otros usuarios. Si se omite la cláusula WITH GRANT OPTION, los
nombre-autorización especificados no pueden otorgar los privilegios a otros
usuarios a menos que dicha autorización se haya recibido de alguna otra
fuente.
Normas
v Por cada nombre-autorización especificado, si no se especifica ninguna de las
palabras clave USER, GROUP o ROLE:
– Si el plug-in de seguridad vigente para la instancia no puede determinar el
estado del nombre-autorización, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización como ROLE en la base de datos y como
GROUP o USER en el sistema operativo, se devuelve un error (SQLSTATE
56092).
– Si se define el nombre-autorización como USER y GROUP de acuerdo con el
plug-in de seguridad vigente, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización sólo como USER de acuerdo con el plug-in
de seguridad vigente, o si no está definido, se supone USER.
– Si se define el nombre-autorización sólo como GROUP de acuerdo con el
plug-in de seguridad vigente, se asume GROUP.
– Si se define el nombre-autorización en la base de datos sólo como ROLE,
entonces se supone ROLE.
Notas
v Privilegios que se otorgan a un grupo: un privilegio que se otorga a un grupo no
se utiliza para comprobar la autorización de:
– Las sentencias de DML estáticas de un paquete
– Una tabla base mientras se procesa una sentencia CREATE VIEW
– Una tabla base mientras se procesa una sentencia CREATE TABLE para una
tabla de consulta materializada
– Rutina de creación de SQL
– Creación de activador
Ejemplo
Sentencias 1121
GRANT (privilegios de variable global)
Invocación
Autorización
Sintaxis
GRANT CONTROL ON INDEX nombre-índice
TO nombre-autorización
USER
GROUP
ROLE
PUBLIC
Descripción
CONTROL
Otorga el privilegio para descartar el índice. Esta es la autorización CONTROL
para los índices, que se otorga automáticamente a los creadores de índices.
ON INDEX nombre-índice
Identifica el índice para el cual se debe otorgar el privilegio CONTROL.
TO Especifica a quién se otorgan los privilegios.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol. El nombre
de rol debe existir en el servidor actual (SQLSTATE 42704).
nombre-autorización,...
Lista los ID de autorización de uno o varios usuarios, grupos o roles.
La lista de los ID de autorización no puede incluir el ID de autorización
del usuario que emite la sentencia (SQLSTATE 42502).
Sentencias 1123
GRANT (privilegios de índice)
PUBLIC
Otorga los privilegios a un conjunto de usuarios (ID de autorización). Para
obtener más información, consulte el apartado “Autorizaciones, privilegios
y propiedad de objetos”.
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Si el plug-in de seguridad vigente para la instancia no puede determinar el
estado del nombre-autorización, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización como ROLE en la base de datos y como
GROUP o USER de acuerdo con el plug-in de seguridad vigente, se devuelve
un error (SQLSTATE 56092).
– Si se define nombre-autorización según el plug-in de seguridad vigente como
USER y GROUP, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización sólo como USER de acuerdo con el plug-in
de seguridad vigente, o si no está definido, se presupone USER.
– Si se define el nombre-autorización sólo como GROUP de acuerdo con el
plug-in de seguridad vigente, se presupone GROUP.
– Si se define el nombre-autorización en la base de datos sólo como ROLE, se
presupone ROLE.
Notas
v Privilegios que se otorgan a un grupo: un privilegio que se otorga a un grupo no
se utiliza para comprobar la autorización de:
– Las sentencias de DML estáticas de un paquete
– Una tabla base mientras se procesa una sentencia CREATE VIEW
– Una tabla base mientras se procesa una sentencia CREATE TABLE para una
tabla de consulta materializada
– Rutina de creación de SQL
– Creación de activador
Ejemplo
Invocación
Autorización
Sintaxis
GRANT EXECUTE ON MODULE nombre-módulo
TO nombre-autorización
USER WITH GRANT OPTION
GROUP
ROLE
PUBLIC
Descripción
EXECUTE
Otorga el privilegio para hacer referencia a objetos de módulo no publicados.
Esto incluye el privilegio para:
v Ejecutar cualquier rutina publicada definida en el módulo.
v Leer y grabar en cualquier variable global publicada definida en el módulo.
v Hacer referencia a cualquier tipo definido por el usuario publicado que esté
definido en el módulo.
v Hacer referencia a cualquier condición publicada definida en el módulo.
ON MODULE nombre-módulo
Identifica el módulo sobre el que se ha otorgado el privilegio. El
nombre-módulo debe identificar un módulo que exista en el servidor actual
(SQLSTATE 42704).
TO Indica a quién se otorga el privilegio.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
Sentencias 1125
GRANT (privilegios de módulo)
ROLE
Especifica que el nombre-autorización identifica un nombre de rol. El nombre
de rol debe existir en el servidor actual (SQLSTATE 42704).
nombre-autorización,...
Lista uno o varios ID de autorización.
PUBLIC
Otorga el privilegio a un conjunto de usuarios (ID de autorización). Para
obtener más información, consulte el apartado “Autorizaciones, privilegios
y propiedad de objetos”.
WITH GRANT OPTION
Permite que los nombres-autorización especificados puedan otorgar el privilegio
EXECUTE a otros usuarios. Si se omite la cláusula WITH GRANT OPTION, los
nombre-autorización especificados no pueden otorgar los privilegios EXECUTE a
otros usuarios a menos que dicha autorización se haya recibido de alguna otra
fuente.
Notas
v Privilegios que se otorgan a un grupo: un privilegio que se otorga a un grupo no
se utiliza para comprobar la autorización de:
– Las sentencias de DML estáticas de un paquete
– Una tabla base mientras se procesa una sentencia CREATE VIEW
– Una tabla base mientras se procesa una sentencia CREATE TABLE para una
tabla de consulta materializada
– Rutina de creación de SQL
– Creación de activador
Ejemplo
Otorgar el privilegio EXECUTE para el módulo MYMODA al usuario JONES:
GRANT EXECUTE
ON MODULE MYMODA
TO JONES
Invocación
Autorización
Sintaxis
,
GRANT BIND
CONTROL
(1)
EXECUTE
(2)
ON PACKAGE id-paquete
nombre-esquema.
TO nombre-autorización
USER WITH GRANT OPTION
GROUP
ROLE
PUBLIC
Notas:
1 RUN se puede utilizar como sinónimo de EXECUTE.
2 PROGRAM puede utilizarse como sinónimo de PACKAGE.
Descripción
BIND
Otorga el privilegio para enlazar un paquete. El privilegio BIND permite a un
usuario volver a emitir el mandato BIND para ese paquete o bien emitir el
mandato REBIND. También permite a un usuario crear una nueva versión de
un paquete existente.
Sentencias 1127
GRANT (privilegios de paquete)
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
Notas
v Los privilegios de paquete se aplican a todas las versiones de un paquete (es
decir, a todos los paquetes que comparten el mismo ID de paquete y esquema
de paquete). No es posible restringir el acceso sólo a una única versión. Puesto
que el privilegio CONTROL se otorga implícitamente al usuario que enlaza el
paquete, si dos usuarios distintos enlazan dos versiones de un paquete, a ambos
usuarios se otorgará implícitamente acceso al paquete del otro.
v Privilegios que se otorgan a un grupo: un privilegio que se otorga a un grupo no
se utiliza para comprobar la autorización de:
– Las sentencias de DML estáticas de un paquete
– Una tabla base mientras se procesa una sentencia CREATE VIEW
– Una tabla base mientras se procesa una sentencia CREATE TABLE para una
tabla de consulta materializada
– Rutina de creación de SQL
– Creación de activador
Ejemplos
v Ejemplo 1: Otorgue el privilegio EXECUTE en PACKAGE CORPDATA.PKGA a
PUBLIC.
GRANT EXECUTE
ON PACKAGE CORPDATA.PKGA
TO PUBLIC
v Ejemplo 2: Otorgue (GRANT) el privilegio EXECUTE en el paquete
CORPDATA.PKGA a un usuario denominado EMPLOYEE. No hay ningún
grupo ni usuario llamado EMPLOYEE.
GRANT EXECUTE ON PACKAGE
CORPDATA.PKGA TO EMPLOYEE
o bien
GRANT EXECUTE ON PACKAGE
CORPDATA.PKGA TO USER EMPLOYEE
Sentencias 1129
GRANT (rol)
GRANT (rol)
Este formato de la sentencia GRANT otorga roles a usuarios, grupos u otros roles.
Invocación
Autorización
Sintaxis
,
ROLE
GRANT nombre-rol
TO nombre-autorización
USER WITH ADMIN OPTION
GROUP
ROLE
PUBLIC
Descripción
ROLE nombre-rol,...
Identifica uno o más roles a otorgar. Cada nombre-rol debe identificar un rol
existente en el servidor actual (SQLSTATE 42704).
TO Especifica a quién se otorga el rol.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica a un grupo.
ROLE
Especifica que el nombre-autorización identifique un rol existente en el
servidor actual (SQLSTATE 42704).
nombre-autorización,...
Lista los ID de autorización de uno o más usuarios, grupos o roles. La lista
de los ID de autorización no puede incluir el ID de autorización del
usuario que emite la sentencia (SQLSTATE 42502).
PUBLIC
Otorga los roles especificados a un conjunto de usuarios (ID de
autorización). Para obtener más información, consulte “Autorizaciones,
privilegios y propiedad de objetos”.
WITH ADMIN OPTION
Permite al nombre-autorización especificado revocar el nombre-rol a otros o
asociar un comentario al rol. No permite que el nombre-autorización descarte el
rol.
Normas
v Por cada nombre-autorización especificado, si no se especifica ninguna de las
palabras clave USER, GROUP o ROLE:
– Si el plug-in de seguridad vigente para la instancia no puede determinar el
estado del nombre-autorización, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización como ROLE en la base de datos y como
GROUP o USER en el sistema operativo, se devuelve un error (SQLSTATE
56092).
– Si se define el nombre-autorización como USER y GROUP de acuerdo con el
plug-in de seguridad vigente, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización sólo como USER de acuerdo con el plug-in
de seguridad vigente, o si no está definido, se supone USER.
– Si se define el nombre-autorización sólo como GROUP de acuerdo con el
plug-in de seguridad vigente, se asume GROUP.
– Si se define el nombre-autorización en la base de datos sólo como ROLE,
entonces se supone ROLE.
v Las jerarquías de roles pueden crearse otorgando un rol a otro rol. Sin embargo,
los ciclos no se permiten (SQLSTATE 428GF). Por ejemplo, si el rol R1 se otorga
a otro rol R2, el rol R2 (u algún otro rol Rn que contenga R2) no podría volverse
a otorgar a R1 ya que esto ocasionaría un ciclo.
Notas
v Cuando el rol R1 se otorga a otro rol R2, R2 contiene R1.
v La autorización DBADM no puede otorgarse a PUBLIC. Por tanto:
– La acción de otorgar el rol R1 a PUBLIC falla (SQLSTATE 42508) si el rol R1
retiene la autorización DBADM directa o indirectamente.
- El rol R1 retiene la autorización DBADM directamente si se ha emitido la
siguiente sentencia:
GRANT DBADM ON DATABASE TO ROLE R1
- El rol R1 retiene la autorización DBADM indirectamente si se han emitido
las siguientes sentencias:
GRANT DBADM ON DATABASE TO ROLE R2
Sentencias 1131
GRANT (rol)
Ejemplos
v Ejemplo 1: Otorgue el rol INTERN al rol DOCTOR y el rol DOCTOR al rol
SPECIALIST.
GRANT ROLE INTERN TO ROLE DOCTOR
Invocación
Autorización
Para otorgar todos los privilegios EXECUTE de rutina del esquema o tipo, los
privilegios del ID de autorización de la sentencia deben incluir, como mínimo, una
de las autorizaciones siguientes:
v WITH GRANT OPTION para EXECUTE en todas las rutinas existentes y futuras
(del tipo especificado) dentro del esquema especificado
v Autorización ACCESSCTRL o SECADM
Sintaxis
GRANT EXECUTE ON designador-función
FUNCTION *
esquema.
designador-método
METHOD * FOR nombre-tipo
*
esquema.
designador-procedimiento
PROCEDURE *
esquema.
TO nombre-autorización
USER WITH GRANT OPTION
GROUP
ROLE
PUBLIC
Sentencias 1133
GRANT (privilegios de rutina)
designador-función:
FUNCTION nombre-función
( )
,
tipo-datos
SPECIFIC FUNCTION nombre-específico
designador-método:
designador-procedimiento:
PROCEDURE nombre-procedimiento
( )
,
tipo-datos
SPECIFIC PROCEDURE nombre-específico
Descripción
EXECUTE
Otorga el privilegio para ejecutar la función, el método o el procedimiento
definido por el usuario que se identifica.
designador-función
Identifica de forma exclusiva la función para la que se concede el privilegio.
Para obtener más información, consulte el apartado “Designadores de función,
método y procedimiento” en la página 22.
FUNCTION esquema.*
Identifica todas las funciones del esquema, incluida cualquier función que
pueda crearse en el futuro. En las sentencias de SQL dinámico, si no se
especifica un esquema, se utilizará el esquema del registro especial CURRENT
SCHEMA. En las sentencias de SQL estático, si no se especifica un esquema, se
utilizará el esquema de la opción de precompilación/enlace QUALIFIER.
designador-método
Identifica de forma exclusiva el método para el que se concede el privilegio.
Para obtener más información, consulte el apartado “Designadores de función,
método y procedimiento” en la página 22.
METHOD *
Identifica todos los métodos del tipo nombre-tipo, incluido cualquier método
que pueda crearse en el futuro.
FOR nombre-tipo
Especifica el nombre del tipo en el que se encuentra el método
especificado. El nombre debe identificar un tipo que ya esté descrito en el
catálogo (SQLSTATE 42704). En las sentencias de SQL dinámico, el valor
Normas
v No es posible otorgar el privilegio EXECUTE para una función o método que se
ha definido con el esquema 'SYSIBM' o 'SYSFUN' (SQLSTATE 42832).
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Si el plug-in de seguridad vigente para la instancia no puede determinar el
estado del nombre-autorización, se devuelve un error (SQLSTATE 56092).
Sentencias 1135
GRANT (privilegios de rutina)
Notas
v Los privilegios para una rutina definida en un módulo se otorgan en el nivel de
módulo mediante la sentencia GRANT (privilegios de módulo). El privilegio
EXECUTE en el módulo permite el acceso a todos los objetos del módulo.
v Privilegios que se otorgan a un grupo: un privilegio que se otorga a un grupo no
se utiliza para comprobar la autorización de:
– Las sentencias de DML estáticas de un paquete
– Una tabla base mientras se procesa una sentencia CREATE VIEW
– Una tabla base mientras se procesa una sentencia CREATE TABLE para una
tabla de consulta materializada
– Rutina de creación de SQL
– Creación de activador
Ejemplos
v Ejemplo 1: Otorgue el privilegio EXECUTE para la función CALC_SALARY al
usuario JONES. Se da por supuesto que, en el esquema, sólo existe una función
con el nombre de función CALC_SALARY.
GRANT EXECUTE ON FUNCTION CALC_SALARY TO JONES
v Ejemplo 2: Otorgue el privilegio EXECUTE para el procedimiento
VACATION_ACCR a todos los usuarios del servidor actual.
GRANT EXECUTE ON PROCEDURE VACATION_ACCR TO PUBLIC
v Ejemplo 3: Otorgue el privilegio EXECUTE para la función DEPT_TOTALS al
ayudante de administración y otorgue al ayudante la capacidad de otorgar el
privilegio EXECUTE para esta función a otros usuarios. La función tiene el
nombre específico DEPT85_TOT. Se da por supuesto que el esquema tiene más
de una función denominada DEPT_TOTALS.
GRANT EXECUTE ON SPECIFIC FUNCTION DEPT85_TOT
TO ADMIN_A WITH GRANT OPTION
v Ejemplo 4: Otorgue el privilegio EXECUTE para la función NEW_DEPT_HIRES a
HR (Recursos humanos). La función tiene dos parámetros de entrada de tipo
Sentencias 1137
GRANT (privilegios de esquema)
Invocación
Autorización
Sintaxis
,
TO nombre-autorización
USER WITH GRANT OPTION
GROUP
ROLE
PUBLIC
Descripción
ALTERIN
Otorga el privilegio para modificar o comentar todos los objetos del esquema.
El propietario de un esquema creado explícitamente recibe automáticamente el
privilegio ALTERIN.
CREATEIN
Otorga el privilegio para crear objetos en el esquema. Siguen necesitándose las
demás autorizaciones o privilegios necesarios para crear el objeto (como
CREATETAB). El propietario de un esquema creado explícitamente recibe
automáticamente el privilegio CREATEIN. En un esquema creado
implícitamente se otorga automáticamente el privilegio CREATEIN a PUBLIC.
DROPIN
Otorga el privilegio para descartar todos los objetos del esquema. El
propietario de un esquema creado explícitamente recibe automáticamente el
privilegio DROPIN.
ON SCHEMA nombre-esquema
Identifica el esquema en el que se deben otorgar los privilegios.
TO Especifica a quién se otorgan los privilegios.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol. El nombre
de rol debe existir en el servidor actual (SQLSTATE 42704).
nombre-autorización,...
Lista los ID de autorización de uno o varios usuarios, grupos o roles.
La lista de los ID de autorización no puede incluir el ID de autorización
del usuario que emite la sentencia (SQLSTATE 42502).
PUBLIC
Otorga los privilegios a un conjunto de usuarios (ID de autorización). Para
obtener más información, consulte el apartado “Autorizaciones, privilegios
y propiedad de objetos”.
WITH GRANT OPTION
Permite que los nombres-autorización especificados otorguen (GRANT) los
privilegios a otros.
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Si el plug-in de seguridad vigente para la instancia no puede determinar el
estado del nombre-autorización, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización como ROLE en la base de datos y como
GROUP o USER de acuerdo con el plug-in de seguridad vigente, se devuelve
un error (SQLSTATE 56092).
– Si se define nombre-autorización según el plug-in de seguridad vigente como
USER y GROUP, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización sólo como USER de acuerdo con el plug-in
de seguridad vigente, o si no está definido, se presupone USER.
– Si se define el nombre-autorización sólo como GROUP de acuerdo con el
plug-in de seguridad vigente, se presupone GROUP.
– Si se define el nombre-autorización en la base de datos sólo como ROLE, se
presupone ROLE.
v En general, la sentencia GRANT procesará la operación de otorgar privilegios
que el ID de autorización de la sentencia tenga permitido otorgar, devolviendo
un aviso (SQLSTATE 01007) si no se han otorgado uno o varios privilegios. Si no
se ha otorgado ningún privilegio, se devuelve un error (SQLSTATE 42501). (Si el
paquete que se ha utilizado para procesar la sentencia se ha compilado
previamente con LANGLEVEL establecido en SQL92E o MIA, se devolverá un
mensaje de aviso (SQLSTATE 01007), a menos que el usuario que otorga
privilegios no disponga de ningún privilegio para el objeto de la operación de
concesión de privilegios.)
Sentencias 1139
GRANT (privilegios de esquema)
Notas
v Otorgación sobre SYSPUBLIC: se pueden otorgar privilegios sobre el esquema
reservado SYSPUBLIC. Si se otorga el privilegio CREATEIN, el usuario podrá
crear un alias público, mientras que si se otorga el privilegio DROPIN el usuario
podrá descartar cualquier alias público.
v Privilegios que se otorgan a un grupo: un privilegio que se otorga a un grupo no
se utiliza para comprobar la autorización de:
– Las sentencias de DML estáticas de un paquete
– Una tabla base mientras se procesa una sentencia CREATE VIEW
– Una tabla base mientras se procesa una sentencia CREATE TABLE para una
tabla de consulta materializada
– Rutina de creación de SQL
– Creación de activador
Ejemplos
v Ejemplo 1: Otorgue al usuario JSINGLETON la posibilidad de crear objetos en el
esquema CORPDATA.
GRANT CREATEIN ON SCHEMA CORPDATA TO JSINGLETON
v Ejemplo 2: Otorgue al usuario IHAKES la posibilidad de crear y descartar
objetos en el esquema CORPDATA.
GRANT CREATEIN, DROPIN ON SCHEMA CORPDATA TO IHAKES
Invocación
Autorización
Sintaxis
GRANT SECURITY LABEL nombre-etiqueta-seguridad
,
FOR ALL ACCESS
TO nombre-autorización
USER FOR READ ACCESS
GROUP FOR WRITE ACCESS
ROLE
Descripción
SECURITY LABEL nombre-etiqueta-seguridad
Otorga la etiqueta de seguridad nombre-etiqueta-seguridad. Se debe calificar el
nombre con una política de seguridad (SQLSTATE 42704) y debe identificar
una etiqueta de seguridad que exista en el servidor actual (SQLSTATE 42704).
TO Especifica a quién se le otorga la etiqueta de seguridad especificada.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol. El nombre
de rol debe existir en el servidor actual (SQLSTATE 42704).
nombre-autorización,...
Lista los ID de autorización de uno o más usuarios, grupos o roles.
FOR ALL ACCESS
Indica que la etiqueta de seguridad se otorgará a los accesos de lectura y
grabación.
FOR READ ACCESS
Indica que la etiqueta de seguridad se otorgará solamente para el acceso de
lectura.
Sentencias 1141
GRANT (etiqueta de seguridad)
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Si el plug-in de seguridad vigente para la instancia no puede determinar el
estado del nombre-autorización, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización como ROLE en la base de datos y como
GROUP o USER de acuerdo con el plug-in de seguridad vigente, se devuelve
un error (SQLSTATE 56092).
– Si se define nombre-autorización según el plug-in de seguridad vigente como
USER y GROUP, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización sólo como USER de acuerdo con el plug-in
de seguridad vigente, o si no está definido, se presupone USER.
– Si se define el nombre-autorización sólo como GROUP de acuerdo con el
plug-in de seguridad vigente, se presupone GROUP.
– Si se define el nombre-autorización en la base de datos sólo como ROLE, se
presupone ROLE.
v Para cualquier política de seguridad, se puede otorgar como máximo a
nombre-autorización una etiqueta de seguridad de esa política para el acceso de
lectura y una para el acceso de grabación. Si el otorgado ya mantiene una
etiqueta de seguridad para el tipo de acceso (lectura o grabación) indicado y que
forma parte de la política de seguridad que califica a nombre-etiqueta-seguridad, se
devuelve un error (SQLSTATE 428GR).
v Si la política de seguridad no está definida para que tenga en cuenta el acceso a
través de grupos o roles, se ignorará cualquier etiqueta de seguridad otorgada a
un grupo o rol cuando se intente el acceso.
v Si un nombre-autorización mantiene diferentes etiquetas de seguridad para los
accesos de lectura y de grabación, las etiquetas de seguridad deben cumplir los
criterios siguientes (SQLSTATE 428GQ):
– Si algún componente de las etiquetas de seguridad es del tipo ARRAY, el
valor de ese componente debe ser el mismo en ambas etiquetas de seguridad.
– Si algún componente de las etiquetas de seguridad es del tipo SET, cada
elemento del valor de ese componente en la etiqueta de seguridad de
grabación debe formar parte también del valor de ese componente en la
etiqueta de seguridad de lectura.
– Si algún componente de las etiquetas de seguridad es del tipo TREE, cada
elemento del valor de ese componente en la etiqueta de seguridad de
grabación debe ser el mismo o un descendiente de uno de los elementos del
valor de ese mismo componente en la etiqueta de seguridad de lectura.
Notas
v Por omisión, cuando se crea una política de seguridad, sólo se tienen en cuenta
las etiquetas de seguridad otorgadas a un usuario individual. Para que se tengan
en cuenta los grupos o los roles para la política de seguridad, deberá emitir la
sentencia ALTER SECURITY POLICY y especificar USE GROUP
AUTHORIZATION o USE ROLE AUTHORIZATION que sea de aplicación.
Ejemplo
Sentencias 1143
GRANT (privilegios de secuencia)
Invocación
Autorización
Sintaxis
,
TO nombre-autorización
USER WITH GRANT OPTION
GROUP
ROLE
PUBLIC
Descripción
USAGE
Otorga el privilegio para poder hacer referencia a una secuencia utilizando una
expresión-nextval o expresión-prevval.
ALTER
Otorga el privilegio de modificar propiedades de secuencia utilizando la
sentencia ALTER SEQUENCE.
ON SEQUENCE nombre-secuencia
Identifica la secuencia para la que van a otorgarse los privilegios especificados.
El nombre de la secuencia, incluido un calificador de esquema implícito o
explícito, debe identificar de forma exclusiva a una secuencia existente en el
servidor actual. Si no existe ninguna secuencia con este nombre, se devuelve
un error (SQLSTATE 42704).
TO Especifica a quién se otorgan los privilegios especificados.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol. El nombre
de rol debe existir en el servidor actual (SQLSTATE 42704).
nombre-autorización,...
Lista los ID de autorización de uno o varios usuarios, grupos o roles.
PUBLIC
Otorga los privilegios especificados a un conjunto de usuarios (ID de
autorización). Para obtener más información, consulte el apartado
“Autorizaciones, privilegios y propiedad de objetos”.
WITH GRANT OPTION
Permite que el nombre-autorización especificado pueda otorgar los privilegios
indicados a otros usuarios.
Si se omite WITH GRANT OPTION, el nombre-autorización especificado sólo
puede otorgar los privilegios indicados a otros si:
v tienen autorización SYSADM o DBADM, o bien
v han recibido la capacidad de otorgar los privilegios especificados desde
alguna otra fuente.
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Si el plug-in de seguridad vigente para la instancia no puede determinar el
estado del nombre-autorización, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización como ROLE en la base de datos y como
GROUP o USER de acuerdo con el plug-in de seguridad vigente, se devuelve
un error (SQLSTATE 56092).
– Si se define nombre-autorización según el plug-in de seguridad vigente como
USER y GROUP, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización sólo como USER de acuerdo con el plug-in
de seguridad vigente, o si no está definido, se presupone USER.
– Si se define el nombre-autorización sólo como GROUP de acuerdo con el
plug-in de seguridad vigente, se presupone GROUP.
– Si se define el nombre-autorización en la base de datos sólo como ROLE, se
presupone ROLE.
v En general, la sentencia GRANT procesará la operación de otorgar privilegios
que el ID de autorización de la sentencia tenga permitido otorgar, devolviendo
un aviso (SQLSTATE 01007) si no se han otorgado uno o varios privilegios. Si no
se ha otorgado ningún privilegio, se devuelve un error (SQLSTATE 42501). (Si el
paquete que se ha utilizado para procesar la sentencia se ha compilado
previamente con LANGLEVEL establecido en SQL92E o MIA, se devolverá un
mensaje de aviso (SQLSTATE 01007), a menos que el usuario que otorga
privilegios no disponga de ningún privilegio para el objeto de la operación de
concesión de privilegios.)
Notas
v Privilegios que se otorgan a un grupo: un privilegio que se otorga a un grupo no
se utiliza para comprobar la autorización de:
– Las sentencias de DML estáticas de un paquete
– Una tabla base mientras se procesa una sentencia CREATE VIEW
Sentencias 1145
GRANT (privilegios de secuencia)
– Una tabla base mientras se procesa una sentencia CREATE TABLE para una
tabla de consulta materializada
– Rutina de creación de SQL
– Creación de activador
Ejemplos
v Ejemplo 1: Otorgue a cualquier usuario el privilegio USAGE para una secuencia
denominada ORG_SEQ.
GRANT USAGE ON SEQUENCE ORG_SEQ TO PUBLIC
v Ejemplo 2: Otorgue al usuario BOBBY la capacidad de modificar una secuencia
denominada GENERATE_ID y otorgar este privilegio a otros usuarios.
GRANT ALTER ON SEQUENCE GENERATE_ID TO BOBBY WITH GRANT OPTION
Invocación
Autorización
Sintaxis
GRANT PASSTHRU ON SERVER nombre-servidor TO
nombre-autorización
USER
GROUP
ROLE
PUBLIC
Descripción
nombre-servidor
Designa la fuente de datos para la cual se está otorgando el privilegio que
debe utilizarse en la modalidad de paso a través. nombre-servidor debe
identificar una fuente de datos que esté descrita en el catálogo.
TO Especifica a quién se otorga el privilegio.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol. El nombre
de rol debe existir en el servidor actual (SQLSTATE 42704).
nombre-autorización,...
Lista los ID de autorización de uno o varios usuarios, grupos o roles.
La lista de los ID de autorización no puede incluir el ID de autorización
del usuario que emite la sentencia (SQLSTATE 42502).
PUBLIC
Otorga a un conjunto de usuarios (ID de autorización) el privilegio de
realizar un paso a través de nombre-servidor. Para obtener más información,
consulte el apartado “Autorizaciones, privilegios y propiedad de objetos”.
Sentencias 1147
GRANT (privilegios de servidor)
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Si el plug-in de seguridad vigente para la instancia no puede determinar el
estado del nombre-autorización, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización como ROLE en la base de datos y como
GROUP o USER de acuerdo con el plug-in de seguridad vigente, se devuelve
un error (SQLSTATE 56092).
– Si se define nombre-autorización según el plug-in de seguridad vigente como
USER y GROUP, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización sólo como USER de acuerdo con el plug-in
de seguridad vigente, o si no está definido, se presupone USER.
– Si se define el nombre-autorización sólo como GROUP de acuerdo con el
plug-in de seguridad vigente, se presupone GROUP.
– Si se define el nombre-autorización en la base de datos sólo como ROLE, se
presupone ROLE.
Ejemplos
v Ejemplo 1: Otorgue a R. Smith y a J. Jones el privilegio de paso a través para la
fuente de datos SERVALL. Sus ID de autorización son RSMITH y JJONES.
GRANT PASSTHRU ON SERVER SERVALL
TO USER RSMITH,
USER JJONES
v Ejemplo 2: Otorgue el privilegio de realizar un paso a través para la fuente de
datos EASTWING a un grupo cuyo ID de autorización es D024. Existe un
usuario cuyo ID de autorización también es D024.
GRANT PASSTHRU ON SERVER EASTWING TO GROUP D024
Invocación
Autorización
Sintaxis
,
USER nombre-autorización
GROUP
Descripción
SETSESSIONUSER ON
Otorga el privilegio para asumir la identidad de un nuevo ID de autorización.
USER nombre-autorización-sesión
Especifica el ID de autorización que el nombre-autorización será capaz de
asumir, mediante la sentencia SET SESSION AUTHORIZATION. El
nombre-autorización-sesión debe identificar a un usuario, no a un grupo.
PUBLIC
Especifica que el otorgado podrá asumir cualquier ID válido de autorización,
mediante la sentencia SET SESSION AUTHORIZATION.
TO Especifica a quién se otorga el privilegio.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica a un grupo.
nombre-autorización,...
Lista los ID de autorización de uno o varios usuarios o grupos.
La lista de los ID de autorización no puede incluir el ID de autorización
del usuario que emite la sentencia (SQLSTATE 42502).
Sentencias 1149
GRANT (privilegio SETSESSIONUSER)
Normas
v Para cada nombre-autorización especificado, si no se especifica USER ni GROUP,
entonces:
– Si el plug-in de seguridad vigente para la instancia no puede determinar el
estado del nombre-autorización, se devuelve un error (SQLSTATE 56092).
– Si se define nombre-autorización según el plug-in de seguridad vigente como
USER y GROUP, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización sólo como USER de acuerdo con el plug-in
de seguridad vigente, o si no está definido, se presupone USER.
– Si se define el nombre-autorización sólo como GROUP de acuerdo con el
plug-in de seguridad vigente, se presupone GROUP.
Notas
v Privilegios que se otorgan a un grupo: un privilegio que se otorga a un grupo no
se utiliza para comprobar la autorización de:
– Las sentencias de DML estáticas de un paquete
– Una tabla base mientras se procesa una sentencia CREATE VIEW
– Una tabla base mientras se procesa una sentencia CREATE TABLE para una
tabla de consulta materializada
– Rutina de creación de SQL
– Creación de activador
Ejemplos
v Ejemplo 1: La sentencia siguiente otorga al usuario PAUL la posibilidad de
configurar la autorización de la sesión al usuario WALID, y por lo tanto ejecutar
sentencias como WALID.
GRANT SETSESSIONUSER ON USER WALID
TO USER PAUL
v Ejemplo 2: La sentencia siguiente otorga al usuario GUYLAINE la posibilidad de
configurar la autorización de la sesión para el usuario BOBBY. También le otorga
la posibilidad de configurar la autorización de la sesión para los usuarios RICK
y KEVIN.
GRANT SETSESSIONUSER ON USER BOBBY, USER RICK, USER KEVIN
TO USER GUYLAINE
v Ejemplo 3: La sentencia siguiente otorga al usuario WALID y a todos los que
pertenezcan a los grupos ADMINS y ACCTG la posibilidad de configurar la
autorización de la sesión a cualquier usuario.
GRANT SETSESSIONUSER ON PUBLIC TO USER WALID, GROUP ADMINS, ACCTG
Invocación
Autorización
Sintaxis
GRANT USE OF TABLESPACE nombre-espacio-tablas TO
nombre-autorización
USER WITH GRANT OPTION
GROUP
ROLE
PUBLIC
Descripción
USE
Otorga el privilegio para especificar, de forma explícita o por omisión, el
espacio de tablas al crear una tabla. La opción GRANT otorga
automáticamente el privilegio USE al creador de un espacio de tablas.
OF TABLESPACE nombre-espacio-tablas
Identifica el espacio de tablas para el que debe otorgarse el privilegio USE. El
espacio de tablas no puede ser SYSCATSPACE (SQLSTATE 42838) ni un
espacio de tablas temporal del sistema (SQLSTATE 42809).
TO Especifica a quién se otorga el privilegio USE.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol. El nombre
de rol debe existir en el servidor actual (SQLSTATE 42704).
nombre-autorización
Lista los ID de autorización de uno o varios usuarios, grupos o roles.
Sentencias 1151
GRANT (privilegios de espacio de tablas)
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Si el plug-in de seguridad vigente para la instancia no puede determinar el
estado del nombre-autorización, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización como ROLE en la base de datos y como
GROUP o USER de acuerdo con el plug-in de seguridad vigente, se devuelve
un error (SQLSTATE 56092).
– Si se define nombre-autorización según el plug-in de seguridad vigente como
USER y GROUP, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización sólo como USER de acuerdo con el plug-in
de seguridad vigente, o si no está definido, se presupone USER.
– Si se define el nombre-autorización sólo como GROUP de acuerdo con el
plug-in de seguridad vigente, se presupone GROUP.
– Si se define el nombre-autorización en la base de datos sólo como ROLE, se
presupone ROLE.
Ejemplo
Invocación
Autorización
Sintaxis
PRIVILEGES
GRANT ALL
,
ALTER
CONTROL
DELETE
INDEX
INSERT
REFERENCES
,
( nombre-columna )
SELECT
UPDATE
,
( nombre-columna )
TABLE
ON nombre-tabla
(1)
nombre-vista
apodo
Sentencias 1153
GRANT (privilegios de tabla, vista o apodo)
TO nombre-autorización
USER WITH GRANT OPTION
GROUP
ROLE
PUBLIC
Notas:
1 Los privilegios ALTER, INDEX y REFERENCES no son aplicables a las vistas.
Descripción
ALL o ALL PRIVILEGES
Otorga todos los privilegios adecuados, excepto CONTROL, en la tabla base,
vista o apodo llamado en la cláusula ON.
Si el ID de autorización de la sentencia tiene el privilegio CONTROL sobre la
tabla, vista o apodo, o la autorización ACCESSCTRL o SECADM, se otorgan
todos los privilegios aplicables al objeto (excepto CONTROL). De lo contrario,
los privilegios otorgados son todos los privilegios otorgables que el ID de
autorización de la sentencia tenga en la tabla, vista o apodo identificado.
Si no se especifica ALL, debe especificarse una o varias palabras clave en la
lista de privilegios.
ALTER
Otorga el privilegio para:
v Añadir columnas a una definición de tabla base.
v Crear o descartar una clave primaria o una restricción de unicidad en una
tabla base.
v Crear o descartar una clave foránea en una tabla base.
También es necesario el privilegio REFERENCES en cada columna de la
tabla padre.
v Crear o descartar una restricción de comprobación en una tabla base.
v Crear un activador en una tabla base.
v Añadir, restablecer o descartar una opción de columna para un apodo.
v Cambiar un nombre de columna de apodo o tipo de datos.
v Añadir o cambiar un comentario en una tabla base o en un apodo.
CONTROL
Otorga:
v Todos los privilegios adecuados de la lista, es decir:
– ALTER, CONTROL, DELETE, INSERT, INDEX, REFERENCES, SELECT y
UPDATE para tablas base
– CONTROL, DELETE, INSERT, SELECT y UPDATE para vistas
– ALTER, CONTROL, INDEX y REFERENCES para apodos
v La posibilidad de otorgar los privilegios mencionados anteriormente
(excepto CONTROL) a otros.
v La posibilidad de descartar la tabla base, vista o apodo.
Esta posibilidad no puede extenderse a otros sobre la base de poseer el
privilegio CONTROL. La única manera en que puede extenderse es
otorgando el privilegio CONTROL en sí y sólo puede realizarse con un ID
de autorización con autoridad ACCESSCTRL o SECADM.
Sentencias 1155
GRANT (privilegios de tabla, vista o apodo)
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Si el plug-in de seguridad vigente para la instancia no puede determinar el
estado del nombre-autorización, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización como ROLE en la base de datos y como
GROUP o USER de acuerdo con el plug-in de seguridad vigente, se devuelve
un error (SQLSTATE 56092).
– Si se define nombre-autorización según el plug-in de seguridad vigente como
USER y GROUP, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización sólo como USER de acuerdo con el plug-in
de seguridad vigente, o si no está definido, se presupone USER.
– Si se define el nombre-autorización sólo como GROUP de acuerdo con el
plug-in de seguridad vigente, se presupone GROUP.
– Si se define el nombre-autorización en la base de datos sólo como ROLE, se
presupone ROLE.
v En general, la sentencia GRANT procesará la operación de otorgar privilegios
que el ID de autorización de la sentencia tenga permitido otorgar, devolviendo
un aviso (SQLSTATE 01007) si no se han otorgado uno o varios privilegios. Si no
se ha otorgado ningún privilegio, se devuelve un error (SQLSTATE 42501). (Si el
paquete que se ha utilizado para procesar la sentencia se ha compilado
previamente con LANGLEVEL establecido en SQL92E o MIA, se devolverá un
mensaje de aviso (SQLSTATE 01007), a menos que el usuario que otorga
privilegios no disponga de ningún privilegio para el objeto de la operación de
concesión de privilegios.) Si se especifica el privilegio CONTROL, los privilegios
sólo se otorgarán si el ID de autorización de la sentencia tiene autorización
ACCESSCTRL o SECADM (SQLSTATE 42501).
Notas
v Los privilegios se pueden otorgar independientemente a cada nivel de una
jerarquía de tablas. Un usuario con un privilegio sobre una supertabla puede
afectar a las subtablas. Por ejemplo, una actualización que especifique la
Sentencias 1157
GRANT (privilegios de tabla, vista o apodo)
Ejemplos
v Ejemplo 1: Otorgue todos los privilegios de la tabla WESTERN_CR a PUBLIC.
GRANT ALL ON WESTERN_CR
TO PUBLIC
v Ejemplo 2: Otorgue los privilegios adecuados de la tabla CALENDAR para que
los usuarios PHIL y CLAIRE puedan leerla e insertar nuevas entradas en ella.
No les permita cambiar ni eliminar ninguna de las entradas existentes.
GRANT SELECT, INSERT ON CALENDAR
TO USER PHIL, USER CLAIRE
v Ejemplo 3: Otorgue todos los privilegios de la tabla COUNCIL al usuario
FRANK y la posibilidad de extender todos los privilegios a otros.
GRANT ALL ON COUNCIL
TO USER FRANK WITH GRANT OPTION
v Ejemplo 4: Otorgue (GRANT) el privilegio SELECT en la tabla
CORPDATA.EMPLOYEE a un usuario llamado JOHN. Hay un usuario llamado
JOHN y no hay ningún grupo llamado JOHN.
GRANT SELECT ON CORPDATA.EMPLOYEE TO JOHN
o
GRANT SELECT
ON CORPDATA.EMPLOYEE TO USER JOHN
v Ejemplo 5: Otorgue (GRANT) el privilegio SELECT en la tabla
CORPDATA.EMPLOYEE a un grupo llamado JOHN. Hay un grupo llamado
JOHN y ningún usuario llamado JOHN.
GRANT SELECT ON CORPDATA.EMPLOYEE TO JOHN
o
GRANT SELECT ON CORPDATA.EMPLOYEE TO GROUP JOHN
v Ejemplo 6: Otorgue (GRANT) los privilegios INSERT y SELECT en la tabla T1 a
un grupo llamado D024 y a un usuario llamado D024.
GRANT INSERT, SELECT ON TABLE T1
TO GROUP D024, USER D024
En este caso, tanto los miembros del grupo D024 como el usuario D024 tendrían
permitido insertar (INSERT) y seleccionar (SELECT) en la tabla T1. También, se
añadirían dos filas a la vista de catálogo SYSCAT.TABAUTH.
v Ejemplo 7: Otorgue (GRANT) INSERT, SELECT y CONTROL en la tabla
CALENDAR al usuario FRANK. FRANK debe poder pasar los privilegios a
otros.
Sentencias 1159
GRANT (privilegios de carga de trabajo)
Invocación
Autorización
Sintaxis
GRANT USAGE ON WORKLOAD nombre-carga-trabajo
TO nombre-autorización
USER
GROUP
ROLE
PUBLIC
Descripción
USAGE
Otorga el privilegio para utilizar una carga de trabajo. Las unidades de trabajo
que somete un usuario sólo se correlacionarán con una carga de trabajo en la
que el usuario tenga un privilegio USAGE. Un usuario con autorización
SYSADM o DBADM tiene automáticamente un privilegio USAGE sobre
cualquier carga de trabajo que exista en el servidor actual.
ON WORKLOAD nombre-carga-trabajo
Identifica la carga de trabajo a la que va a otorgarse el privilegio USAGE. Este
nombre consta de una sola parte. El nombre-carga-trabajo debe identificar una
carga de trabajo que exista en el servidor actual (SQLSTATE 42704). El nombre
no puede ser 'SYSDEFAULTADMWORKLOAD' (SQLSTATE 42832).
TO Especifica a quién se otorga el privilegio USAGE.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica a un grupo.
ROLE
Especifica que el nombre-autorización identifique un rol existente en el
servidor actual (SQLSTATE 42704).
nombre-autorización,...
Lista los ID de autorización de uno o más usuarios, grupos o roles. La lista
de los ID de autorización no puede incluir el ID de autorización del
usuario que emite la sentencia (SQLSTATE 42502).
PUBLIC
Otorga el privilegio USAGE a un conjunto de usuarios (ID de
autorización). Para obtener más información, consulte “Autorizaciones,
privilegios y propiedad de objetos”.
Normas
v Por cada nombre-autorización especificado, si no se especifica ninguna de las
palabras clave USER, GROUP o ROLE:
– Si el plug-in de seguridad vigente para la instancia no puede determinar el
estado del nombre-autorización, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización como ROLE en la base de datos y como
GROUP o USER en el sistema operativo, se devuelve un error (SQLSTATE
56092).
– Si se define el nombre-autorización como USER y GROUP de acuerdo con el
plug-in de seguridad vigente, se devuelve un error (SQLSTATE 56092).
– Si se define el nombre-autorización sólo como USER de acuerdo con el plug-in
de seguridad vigente, o si no está definido, se supone USER.
– Si se define el nombre-autorización sólo como GROUP de acuerdo con el
plug-in de seguridad vigente, se asume GROUP.
– Si se define el nombre-autorización en la base de datos sólo como ROLE,
entonces se supone ROLE.
Notas
v La sentencia GRANT no surte efecto hasta después de que se confirme, incluso
para la conexión que emite la sentencia.
v Si la base de datos se crea con la opción RESTRICT, el privilegio USAGE de la
carga de trabajo de usuario por omisión, SYSDEFAULTUSERWORKLOAD, debe
otorgarse de modo explícito por medio de un usuario que tenga autorización
DBADM. Si la base de datos se crea sin la opción RESTRICT, el privilegio
USAGE de SYSDEFAULTUSERWORKLOAD se otorgará a PUBLIC en el
momento de creación de la base de datos.
Ejemplo
Sentencias 1161
GRANT (privilegios de objeto XSR)
Invocación
Autorización
Sintaxis
GRANT USAGE ON XSROBJECT nombre-objetoxsr TO PUBLIC
Descripción
ON XSROBJECT nombre-objetoxsr
Este nombre identifica el objeto XSR sobre el que se ha otorgado el privilegio
USAGE. El nombre-objetoxsr (incluido el calificador de esquema implícito o
explícito) debe designar de forma exclusiva un objeto XSR existente en el
servidor actual. Si no existe ningún objeto XSR con este nombre, se devuelve
un error (SQLSTATE 42704).
TO PUBLIC
Otorga el privilegio USAGE a un conjunto de usuarios (ID de autorización).
Para obtener más información, consulte el apartado “Autorizaciones,
privilegios y propiedad de objetos”.
Ejemplo
IF
La sentencia IF selecciona una vía de ejecución de acuerdo con la evaluación de
una condición.
Invocación
Autorización
Sintaxis
IF condición-búsqueda THEN sentencia-rutina-SQL
ELSEIF condición-búsqueda THEN sentencia-rutina-SQL
END IF
ELSE sentencia-rutina-SQL
sentencia-rutina-SQL:
sentencia-procedimiento-SQL ;
sentencia-función-SQL ;
Descripción
condición-búsqueda
Especifica la condición para la cual debe invocarse una sentencia de SQL. Si la
condición es desconocida o falsa, el proceso continúa en la siguiente condición
de búsqueda, hasta que una condición sea verdadera o el proceso llegue a la
cláusula ELSE.
sentencia-procedimiento-SQL
Especifica la sentencia que debe invocarse si la condición-búsqueda anterior es
Sentencias 1163
IF
Ejemplo
INCLUDE
La sentencia INCLUDE inserta declaraciones en un programa fuente.
Invocación
Autorización
No se necesita.
Sintaxis
INCLUDE SQLCA
SQLDA
nombre
Descripción
SQLCA
Indica que se debe incluir la descripción de un área de comunicaciones SQL
(SQLCA).
SQLDA
Indica que se debe incluir la descripción de un área de descriptores SQL
(SQLDA).
nombre
Identifica un archivo externo que contiene el texto que se debe incluir en el
programa fuente que se está precompilando. Puede ser un identificador de
SQL sin ninguna extensión de nombre de archivo o un literal entre comillas
simples (' '). Un identificador SQL asume la extensión del nombre de archivo
del archivo fuente que se está precompilando. Si no se proporciona ninguna
extensión de nombre de archivo mediante un literal entrecomillado, entonces
no se asume ninguna.
Notas
v Cuando se precompila un programa, la sentencia INCLUDE se sustituye por las
sentencias fuente. Por lo tanto, la sentencia INCLUDE debe especificarse en un
punto del programa en el que las sentencias fuente resultantes sean aceptables
para el compilador.
v El archivo fuente externo debe estar escrito en el lenguaje del sistema principal
especificado por nombre. Si es superior a 18 bytes o contiene caracteres que no
están permitidos en un identificador de SQL, debe ir entre comillas simples. Las
sentencias INCLUDE nombre pueden anidarse, aunque no cíclicamente (por
ejemplo, si A y B son módulos y A contiene una sentencia INCLUDE nombre, no
es válido que A llame a B y que, a continuación, B llame a A).
v Si la opción de precompilación LANGLEVEL se establece en el valor SQL92E, no
debe especificarse INCLUDE SQLCA. Las variables SQLSTATE y SQLCODE
pueden estar definidas en la sección de declaraciones de variables del lenguaje
principal.
Sentencias 1165
INCLUDE
Ejemplo
mientras (SQLCODE==0) {
EXEC SQL FETCH C1 INTO :dnum, :dname, :mnum;
(Imprimir resultados)
INSERT
La sentencia INSERT inserta filas en una tabla, apodo o vista, o en las tablas,
apodos o vistas subyacentes de la selección completa especificada.
Invocación
Autorización
Además, para cada tabla, vista o apodo al que se haga referencia en cualquier
selección completa utilizada en la sentencia INSERT, los privilegios del ID de
autorización de la sentencia deben incluir, como mínimo, una de las autorizaciones
siguientes:
v Privilegio SELECT
v Privilegio CONTROL
v Autorización DATAACCESS
Sintaxis
INSERT INTO nombre-tabla
nombre-vista ,
apodo
( selección completa ) ( nombre-columna )
Sentencias 1167
INSERT
columnas-include
VALUES expresión
NULL
DEFAULT
,
( expresión )
NULL
DEFAULT
expresión-fila
selección completa
,
WITH expresión-tabla-común
WITH RR
RS
CS
UR
columnas-include:
Descripción
INTO nombre-tabla, nombre-vista, apodo o (selección completa)
Identifica el objeto de la operación de inserción. El nombre debe identificar uno
de los objetos siguientes:
v Una tabla, una vista o un apodo que exista en el servidor de aplicaciones
v Una tabla o una vista en un servidor remoto especificado utilizando un
nombre-objeto-remoto
El objeto no debe ser una tabla de catálogo, una tabla de consulta
materializada mantenida por el sistema, una vista de una tabla de catálogo o
una vista de sólo lectura, a menos que esté definido un activador INSTEAD OF
para la operación de inserción de la vista sujeto. Las filas que se insertan en un
apodo se colocan en el objeto de fuente de datos al que hace referencia el
apodo.
Si el objeto de la operación de actualización es una selección completa, esta
debe ser insertable, según lo definido en el elemento “Vistas insertables” de
Notas de la descripción de la sentencia CREATE VIEW.
Si el objeto de la operación de inserción es un apodo, los valores de variable de
indicador ampliado DEFAULT y UNASSIGNED no deben utilizarse
(SQLSTATE 22539).
Sentencias 1169
INSERT
VALUES
Especifica una o varias filas de valores que se deben insertar.
Cada fila especificada en la cláusula VALUES debe ser asignable a la lista de
columnas implícita o explícita y las columnas identificadas en la cláusula
INCLUDE, a menos que se utilice una variable de fila. Cuando se especifica
una lista de valores de fila en paréntesis, el primer valor se inserta en la
primera columna de la lista, el segundo valor en la segunda columna, etc.
Cuando se especifica una expresión de fila, el número de campos en el tipo de
fila debe coincidir con el número de nombres en la lista de columnas implícitas
o explícitas.
expresión
Una expresión puede ser cualquier expresión que esté definida en
“Expresiones”. Si la expresión es un tipo de fila, no debe aparecer en
paréntesis. Si la expresión es una variable, la variable de lenguaje principal
puede incluir una variable de indicador (o, en el caso de una estructura de
sistema principal, una matriz de indicador) que esté habilitada para las
variables de indicador ampliado. Si las variables de indicador ampliado
están habilitadas y la expresión es más que una sola variable de lenguaje
principal o una variable de lenguaje principal que se vaya a convertir de
forma explícita, los valores DEFAULT (-5) o UNASSIGNED (-7) de variable
de indicador ampliado (SQLSTATE 22539) no deben utilizarse.
NULL
Especifica el valor nulo y sólo debe especificarse para las columnas con
posibilidad de nulos.
DEFAULT
Especifica que se debe utilizar el valor por omisión. El resultado de
especificar DEFAULT depende del modo en que se haya definido la
columna, del siguiente modo:
v Si la columna se definió como columna generada basándose en una
expresión, el sistema genera el valor de la columna de acuerdo con esa
expresión.
v Si se utiliza la cláusula IDENTITY, el gestor de bases de datos genera el
valor.
v Si se utiliza la cláusula ROW CHANGE TIMESTAMP, el gestor de bases
de datos genera el valor para cada fila insertada como una indicación de
fecha y hora que es exclusiva para cada partición de tabla en la partición
de base de datos.
v Si se utiliza la cláusula WITH DEFAULT, el valor insertado será el valor
tal como se ha definido para la columna (consulte cláusula-por-omisión en
“CREATE TABLE”).
v Si se utiliza la cláusula NOT NULL y no la cláusula GENERATED, o no
se utiliza WITH DEFAULT o se utiliza DEFAULT NULL, no se puede
especificar la palabra clave DEFAULT para esa columna (SQLSTATE
23502).
v Cuando la inserción se realice en un apodo, la palabra clave DEFAULT
se pasará por medio de la sentencia INSERT a la fuente de datos sólo si
la fuente de datos da soporte a la palabra clave DEFAULT en su sintaxis
de lenguaje de consulta.
expresión-fila
Especifica cualquier expresión de fila del tipo descrito en “Expresiones de
fila” que no incluye un nombre de columna. El número de campos de la
Normas
v Activadores: Las sentencias INSERT pueden dar lugar a que se ejecuten
activadores. Un activador puede dar lugar a que se ejecuten otras sentencias o a
que se generen condiciones de error basadas en los valores insertados. Si una
operación de inserción en una vista da lugar a que se ejecute un activador
INSTEAD OF, se comprobarán la validez, la integridad referencial y las
restricciones de las actualizaciones que se han realizado en el activador y no las
de la vista que ha dado lugar a la ejecución del activador o sus tablas
subyacentes.
v Valores por omisión: El valor insertado en cualquier columna que no esté en la
lista de columnas es el valor por omisión de la columna o nulo. Las columnas
Sentencias 1171
INSERT
que no permiten valores nulos y no están definidas con NOT NULL WITH
DEFAULT deben incluirse en la lista de columnas. De manera similar, si se
inserta en una vista, el valor insertado en cualquier columna de la tabla base que
no esté en la vista es el valor por omisión de la columna o nulo. De ahí que
todas las columnas de la tabla base que no estén en la vista deben ser un valor
por omisión o permitir valores nulos. El único valor que se puede insertar en
una columna generada que se ha definido con la cláusula GENERATED
ALWAYS es DEFAULT (SQLSTATE 428C9).
v Longitud: Si el valor de inserción de una columna es un número, la columna
debe ser una columna numérica con la capacidad de representar la parte entera
del número. Si el valor de inserción de una columna es una serie, la columna
debe ser una columna de serie con un atributo de longitud que como mínimo
sea tan grande como la longitud de la serie, o una columna de indicación de
fecha y hora si la serie representa una fecha, hora o indicación de fecha y hora.
v Asignación: Los valores de inserción se asignan a las columnas de acuerdo con
normas de asignación específicas.
v Validez: Si la tabla nombrada, o la tabla base de la vista nombrada, tiene uno o
varios índices de unicidad, cada fila insertada en la tabla debe ajustarse a las
restricciones impuestas por dichos índices. Si se nombra una vista cuya
definición incluye WITH CHECK OPTION, cada fila insertada en la vista debe
ajustarse a la definición de la vista. Para obtener información acerca de las
normas que rigen esta situación, consulte “CREATE VIEW”.
v Integridad de referencia: Para cada restricción definida en una tabla, cada valor
de inserción que no sea nulo de la clave foránea debe ser igual al valor de clave
primaria de la tabla padre.
v Restricción de comprobación: Los valores de inserción deben cumplir las
condiciones de control de las restricciones de comprobación definidas en la tabla.
En una sentencia INSERT para una tabla con restricciones de comprobación
definidas, se evalúan las condiciones de restricción una vez para cada fila que se
inserta.
v Valores XML: Un valor que se inserta en una columna XML debe ser un
documento XML con el formato correcto (SQLSTATE 2200M).
v Política de seguridad: si se protege la tabla identificada o la tabla base de la
vista identificada con una política de seguridad, el ID de autorización de la
sesión debe tener las credenciales de control de acceso basado en etiquetas
(LBAC) que permiten:
– Acceso de grabación a todas las columnas protegidas para las que se ha
proporcionado explícitamente un valor de datos (SQLSTATE 42512)
– Acceso de grabación para cualquier valor explícito proporcionado para una
columna DB2SECURITYLABEL para las políticas de seguridad que se han
creado con la opción RESTRICT NOT AUTHORIZED WRITE SECURITY
LABEL (SQLSTATE 23523)
El ID de autorización de la sesión también debe tener otorgada una etiqueta de
seguridad para acceso de grabación para la política de seguridad si se utiliza un
valor implícito para una columna DB2SECURITYLABEL (SQLSTATE 23523), lo
cual puede suceder cuando:
– No se proporciona explícitamente un valor para la columna
DB2SECURITYLABEL
– Se proporciona explícitamente un valor para la columna
DB2SECURITYLABEL pero el ID de autorización de la sesión no tiene acceso
de grabación para dicho valor y la política de seguridad se crea con la opción
OVERRIDE NOT AUTHORIZED WRITE SECURITY LABEL
Notas
v Tras la ejecución de una sentencia INSERT, el valor de la tercera variable de la
parte SQLERRD(3) de la SQLCA indica el número de filas que se han pasado a
la operación de inserción. En el contexto de una sentencia de procedimiento de
SQL, el valor puede recuperarse utilizando la variable ROW_COUNT de la
sentencia GET DIAGNOSTICS. SQLERRD(5) contiene la cuenta de todas las
operaciones de inserción, actualización y supresión activadas.
v Salvo que ya existan los bloqueos adecuados, se adquieren uno o varios
bloqueos exclusivos durante la ejecución de una sentencia INSERT satisfactoria.
Hasta que se liberen los bloqueos, sólo se puede acceder a una fila insertada:
– El proceso de aplicación que ha realizado la inserción.
– Otro proceso de aplicación que utilice el nivel de aislamiento UR a través del
cursor de sólo lectura, la sentencia SELECT INTO o la subselección utilizada
en una subconsulta.
v Para obtener más información acerca del bloqueo, consulte la descripción de las
sentencias COMMIT, ROLLBACK y LOCK TABLE.
v Si una aplicación se ejecuta en una base de datos particionada y se enlaza con la
opción INSERT BUF, las sentencias INSERT con VALUES que no se procesan
utilizando EXECUTE IMMEDIATE pueden ponerse en el almacenamiento
intermedio. DB2 supone que tales sentencias INSERT se procesan dentro de un
bucle de la lógica de la aplicación. En lugar de ejecutar la sentencia hasta que se
completa, intenta almacenar los nuevos valores de fila en uno o varios
almacenamientos intermedios. Como resultado las inserciones reales de las filas
en la tabla se efectúan posteriormente, de manera asíncrona con la lógica de
INSERT de la aplicación. Tenga en cuenta que esta inserción asíncrona puede
generar un error relacionado con una sentencia INSERT que se devuelva a otra
sentencia de SQL que siga a INSERT en la aplicación.
Esto tiene la posibilidad de mejorar significativamente el rendimiento de
INSERT, pero se utiliza mejor con datos limpios, debido a la naturaleza
asíncrona del manejo de errores.
v Cuando se insertar una fila en una tabla que tiene una columna de identidad,
DB2 genera un valor para la columna de identidad.
– Para una columna de identidad definida como GENERATED ALWAYS, DB2
genera siempre el valor.
– Para una columna definida como GENERATED BY DEFAULT, si no se
especifica explícitamente un valor (con una cláusula VALUES o subselección),
DB2 genera un valor.
El primer valor generado por DB2 es el valor de la especificación START WITH
para la columna de identidad.
Sentencias 1173
INSERT
En este ejemplo, EMPID se define como una columna de identidad y, por tanto,
el valor insertado en esta columna es generado por DB2.
v Las normas para insertar en una columna de identidad utilizando una
subselección son similares a las normas para una inserción mediante una
cláusula VALUES. Sólo se puede especificar un valor para una columna de
identidad si esta está definida como GENERATED BY DEFAULT.
Por ejemplo, suponga que T1 y T2 son tablas que tienen la misma definición, y
ambas contienen las columnas intcol1 e identcol2 (las dos son de tipo INTEGER y
la segunda columna tiene el atributo de identidad). Considere la inserción
siguiente:
INSERT INTO T2
SELECT *
FROM T1
En la tabla del ejemplo anterior, formada por una sola columna que tiene el
atributo de identidad, para insertar varias filas con una única sentencia INSERT
puede utilizarse esta sentencia:
INSERT INTO IDTABLE
VALUES (DEFAULT), (DEFAULT), (DEFAULT), (DEFAULT)
v Cuando DB2 genera un valor para una columna de identidad, ese valor
generado caduca; la próxima vez que sea necesario un valor, DB2 generará uno
nuevo. Esto es válido aunque falle o se cancele una sentencia INSERT en la que
interviene una columna de identidad.
Por ejemplo, suponga que se ha creado un índice de unicidad para la columna
de identidad. Si al generar un valor para una columna de identidad se detecta
una violación de clave duplicada, se produce un error (SQLSTATE 23505) y se
considera que el valor generado para la columna de identidad ha caducado. Esto
puede ocurrir si la columna de identidad está definida como GENERATED BY
DEFAULT y el sistema intenta generar un nuevo valor, pero el usuario ha
especificado explícitamente valores para la columna de identidad en sentencias
INSERT anteriores. En este caso, el volver a emitir la misma sentencia INSERT
puede producir un resultado satisfactorio. DB2 generará el valor siguiente para
la columna de identidad y es posible que este valor siguiente sea exclusivo, y
que la sentencia INSERT tenga éxito.
v Si al generar un valor para una columna de identidad se excede el valor máximo
de la columna (o el valor mínimo en el caso de una secuencia descendente), se
produce un error (SQLSTATE 23522). En este caso, el usuario debe descartar la
tabla y crear una nueva con una columna de identidad que tenga un rango
mayor (es decir, cambiar el tipo de datos o valor de incremento de la columna
para permitir un rango mayor de valores).
Por ejemplo, una columna de identidad puede haberse definido con el tipo de
datos SMALLINT, y posteriormente agotarse los valores que se pueden asignar a
la columna. Para redefinir la columna de identidad como INTEGER, es necesario
descargar los datos, descartar la tabla y volver a crearla con una nueva
Sentencias 1175
INSERT
Ejemplos
v Ejemplo 1: Inserte un nuevo departamento con las siguientes especificaciones en
la tabla DEPARTMENT:
– El número de departamento (DEPTNO) es ‘E31’
– El nombre de departamento (DEPTNAME) es ‘ARCHITECTURE’
– Dirigido por (MGRNO) una persona con el número ‘00390’
– Informa al departamento (ADMRDEPT) ‘E01’.
INSERT INTO DEPARTMENT
VALUES (’E31’, ’ARCHITECTURE’, ’00390’, ’E01’)
v Ejemplo 2: Inserte un nuevo departamento en la tabla DEPARTMENT como en
el ejemplo 1, pero no asigne ningún director al nuevo departamento.
INSERT INTO DEPARTMENT (DEPTNO, DEPTNAME, ADMRDEPT )
VALUES (’E31’, ’ARCHITECTURE’, ’E01’)
v Ejemplo 3: Inserte dos nuevos departamentos utilizando una sentencia en la
tabla DEPARTMENT como en el ejemplo 2, pero no asigne ningún director al
nuevo departamento.
INSERT INTO DEPARTMENT (DEPTNO, DEPTNAME, ADMRDEPT)
VALUES (’B11’, ’PURCHASING’, ’B01’),
(’E41’, ’DATABASE ADMINISTRATION’, ’E01’)
v Ejemplo 4: Cree una tabla temporal MA_EMP_ACT con las mismas columnas
que la tabla EMP_ACT. Cargue MA_EMP_ACT con las filas de la tabla
EMP_ACT con un nuevo número de proyecto (PROJNO) que empieza por las
letras ‘MA’.
CREATE TABLE MA_EMP_ACT
( EMPNO CHAR(6) NOT NULL,
PROJNO CHAR(6) NOT NULL,
ACTNO SMALLINT NOT NULL,
EMPTIME DEC(5,2),
EMSTDATE DATE,
EMENDATE DATE )
INSERT INTO MA_EMP_ACT
SELECT * FROM EMP_ACT
WHERE SUBSTR(PROJNO, 1, 2) = ’MA’
v Ejemplo 5: Utilice una sentencia del programa C para añadir un esqueleto de
proyecto a la tabla PROJECT. Obtenga el número de proyecto (PROJNO),
nombre de proyecto (PROJNAME), número de departamento (DEPTNO) y
empleado responsable (RESPEMP) de las variables del lenguaje principal. Utilice
Sentencias 1177
INSERT
La sentencia siguiente INSERT utiliza una lista de columnas implícitas. Una lista
de columnas implícitas no incluye columnas implícitamente ocultas, de manera
que la cláusula VALUES sólo contiene valores para las otras dos columnas.
INSERT INTO SALARY_INFO VALUES (2, 30000)
En este caso, la columna UPDATE_TIME debe definirse para que tenga un valor
por omisión y el valor por omisión se utiliza para la fila que se inserta.
ITERATE
La sentencia ITERATE hace que el flujo de control vuelva al principio de un bucle
con etiqueta.
Invocación
Autorización
No se necesita.
Sintaxis
ITERATE etiqueta
Descripción
etiqueta
Especifica la etiqueta de la sentencia FOR, LOOP, REPEAT o WHILE a la cual
DB2 transfiere el flujo de control.
Ejemplo
Sentencias 1179
ITERATE
ITERATE ins_loop;
END IF;
INSERT INTO department (deptno, deptname, admrdept)
VALUES (’NEW’, v_deptname, v_admdept);
END LOOP;
CLOSE c1;
END
LEAVE
La sentencia LEAVE transfiere el control del programa hacia fuera de un bucle o
de una sentencia compuesta.
Invocación
Autorización
No se necesita.
Sintaxis
LEAVE etiqueta
Descripción
etiqueta
Especifica la etiqueta de la sentencia FOR, LOOP, REPEAT, WHILE o sentencia
compuesta cuya ejecución debe concluir.
Notas
v Cuando una sentencia LEAVE transfiere el control hacia fuera de una sentencia
compuesta, se cierran todos los cursores abiertos de la sentencia compuesta,
excepto los cursores utilizados para devolver conjuntos de resultados.
Ejemplo
Este ejemplo contiene un bucle que lee datos para el cursor c1. Si el valor de la
variable de SQL at_end no es cero, la sentencia LEAVE transfiere el control fuera
del bucle.
CREATE PROCEDURE LEAVE_LOOP(OUT counter INTEGER)
LANGUAGE SQL
BEGIN
DECLARE v_counter INTEGER;
DECLARE v_firstnme VARCHAR(12);
DECLARE v_midinit CHAR(1);
DECLARE v_lastname VARCHAR(15);
DECLARE at_end SMALLINT DEFAULT 0;
DECLARE not_found CONDITION FOR SQLSTATE ’02000’;
DECLARE c1 CURSOR FOR
SELECT firstnme, midinit, lastname
FROM employee;
DECLARE CONTINUE HANDLER for not_found
SET at_end = 1;
SET v_counter = 0;
OPEN c1;
fetch_loop:
Sentencias 1181
LEAVE
LOOP
FETCH c1 INTO v_firstnme, v_midinit, v_lastname;
IF at_end <> 0 THEN LEAVE fetch_loop;
END IF;
SET v_counter = v_counter + 1;
END LOOP fetch_loop;
SET counter = v_counter;
CLOSE c1;
END
LOCK TABLE
La sentencia LOCK TABLE impide que procesos de aplicación simultáneos utilicen
o cambien una tabla. El bloqueo se libera cuando la unidad de trabajo que emite la
sentencia LOCK TABLE se confirma o se termina.
Invocación
Autorización
Sintaxis
LOCK TABLE nombre-tabla IN SHARE MODE
apodo EXCLUSIVE
Descripción
nombre-tabla o apodo
Identifica la tabla o el apodo. El nombre-tabla debe identificar una tabla que
exista en el servidor de aplicaciones, pero no debe identificar una tabla de
catálogo, una tabla temporal creada o una tabla temporal declarada
(SQLSTATE 42995). Si nombre-tabla es una tabla con tipo, debe ser la tabla raíz
de la jerarquía de tablas (SQLSTATE 428DR). Cuando se ha especificado un
apodo, DB2 bloquea el objeto subyacente (es decir, una tabla o una vista) de la
fuente de datos a la que el apodo hace referencia.
IN SHARE MODE
Impide que procesos de aplicación simultáneos ejecuten alguna operación que
no sea de sólo lectura en la tabla.
IN EXCLUSIVE MODE
Impide a los procesos de aplicación simultáneos ejecutar cualquier operación
en la tabla. Tenga en cuenta que EXCLUSIVE MODE no impide que los
procesos de aplicación simultáneos que estén ejecutando en el nivel de
aislamiento Lectura no confirmada (UR) ejecuten operaciones de sólo lectura
en la tabla.
Notas
v El bloqueo se utiliza para evitar operaciones simultáneas. No se adquiere
necesariamente un bloqueo durante la ejecución de la sentencia LOCK TABLE si
ya existe un bloqueo satisfactorio. El bloqueo que impide operaciones
simultáneas se conserva como mínimo hasta la terminación de la unidad de
trabajo.
v En una base de datos particionada, primero se adquiere un bloqueo de tabla en
la primera partición de base de datos del grupo de particiones de base de datos
Sentencias 1183
LOCK TABLE
(la partición de base de datos que tiene el número más bajo) y, después, en las
demás particiones de base de datos. Si se interrumpe la sentencia LOCK TABLE,
la tabla puede estar bloqueada en algunas particiones de base de datos y en
otras no. Si ocurre esto, emita otra sentencia LOCK TABLE para completar el
bloqueo de todas las particiones de base de datos o emita una sentencia
COMMIT o ROLLBACK para liberar los bloqueos actuales.
v Esta sentencia afecta a todas las particiones de base de datos del grupo de
particiones de base de datos.
v Para tablas particionadas, el único bloqueo adquirido en la sentencia LOCK
TABLE se encuentra en el nivel de la tabla; no se han adquirido bloqueos de
particiones de datos.
Ejemplo
LOOP
La sentencia LOOP repite la ejecución de una sentencia o grupo de sentencias.
Invocación
Autorización
Sintaxis
LOOP sentencia-rutina-SQL END LOOP
etiqueta: etiqueta
sentencia-rutina-SQL:
sentencia-procedimiento-SQL ;
sentencia-función-SQL ;
Descripción
etiqueta
Especifica la etiqueta de la sentencia LOOP. Si se especifica la etiqueta inicial,
esa etiqueta puede especificarse en sentencias LEAVE e ITERATE. Si se
especifica la etiqueta final, se debe especificar la etiqueta inicial
correspondiente.
sentencia-procedimiento-SQL
Especifica las sentencias de SQL que se deben invocar en el bucle. La
sentencia-procedimiento-SQL sólo se puede aplicar en el contexto de un
procedimiento de SQL o una sentencia de SQL compuesto (compilado).
Consulte sentencia-procedimiento-SQL en la sentencia de “SQL compuesto
(compilado)”.
sentencia-función-SQL
Especifica las sentencias de SQL que se deben invocar en el bucle. La
sentencia-función-SQL sólo se puede aplicar en el contexto de una función SQL,
un método SQL o una sentencia de SQL compuesto (en línea). Consulte
sentencia-función-SQL en “FOR”.
Sentencias 1185
LOOP
Ejemplo
Este procedimiento utiliza una sentencia LOOP para leer valores de la tabla
employee. Cada vez que se repite el bucle, el parámetro OUT counter se incrementa
y el valor de v_midinit se comprueba para asegurarse de que el valor no es un
espacio (' '). Si v_midinit es un espacio, la sentencia LEAVE pasa el flujo de control
fuera del bucle.
CREATE PROCEDURE LOOP_UNTIL_SPACE(OUT counter INTEGER)
LANGUAGE SQL
BEGIN
DECLARE v_counter INTEGER DEFAULT 0;
DECLARE v_firstnme VARCHAR(12);
DECLARE v_midinit CHAR(1);
DECLARE v_lastname VARCHAR(15);
DECLARE c1 CURSOR FOR
SELECT firstnme, midinit, lastname
FROM employee;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET counter = -1;
OPEN c1;
fetch_loop:
LOOP
FETCH c1 INTO v_firstnme, v_midinit, v_lastname;
IF v_midinit = ’ ’ THEN
LEAVE fetch_loop;
END IF;
SET v_counter = v_counter + 1;
END LOOP fetch_loop;
SET counter = v_counter;
CLOSE c1;
END
MERGE
La sentencia MERGE actualiza un destino (una tabla o vista, o las tablas o vistas
subyacentes de una selección completa) utilizando datos de una fuente (resultado
de una referencia de tabla).
Las filas del destino que coinciden con la fuente se pueden suprimir o actualizar,
según se especifique, y las filas que no existen en el destino se pueden insertar. Si
se actualiza, suprime o inserta una fila en una vista, se actualiza, suprime o inserta
la fila en las tablas en las que se basa la vista.
Invocación
Autorización
Sintaxis
Sentencias 1187
MERGE
ELSE IGNORE
WITH RR
RS
CS
UR
cláusula-correlación:
AS
nombre-correlación
,
( nombre-columna )
condición-coincidente:
MATCHED
NOT AND condición-búsqueda
operación-modificación:
operación-update
operación-delete
operación-insert
cláusula-asignación:
nombre-columna = expresión
DEFAULT
NULL
, ,
( nombre-columna ) = ( expresión )
DEFAULT
NULL
operación-update:
operación-delete:
DELETE
cláusula-período
operación-insertar:
( expresión )
DEFAULT
NULL
cláusula-período:
Descripción
nombre-tabla, nombre-vista o (selección completa)
Identifica el destino de las operaciones de actualización, supresión o inserción
de la fusión. El nombre debe identificar una tabla o vista que exista en el
servidor actual, pero no debe identificar una tabla de catálogo, una tabla de
consulta materializada mantenida por el sistema, una vista de una tabla de
catálogos, una vista de sólo lectura, o una vista que directa o indirectamente
contenga una cláusula WHERE que haga referencia a una subconsulta o una
rutina definida como NOT DETERMINISTIC o EXTERNAL ACTION
(SQLSTATE 42807).
Si el destino de la operación de fusión es una selección completa, la selección
completa debe ser actualizable, suprimible o insertable, según lo definido en
los elementos de Notas “Vistas actualizables”, “Vistas suprimibles” o “Vistas
insertables” de la descripción de la sentencia CREATE VIEW.
No se puede utilizar una cláusula-período en una operación-update o una
operación-delete si el destino de la operación de fusión es una vista UNION
ALL o una selección completa.
No puede utilizar un apodo (una referencia a una tabla federada remota) como
tabla de destino.
cláusula-correlación
Se puede utilizar en condición-búsqueda o a la derecha de una cláusula-asignación
para designar una tabla, vista o selección completa. Para ver una descripción
de la cláusula-correlación, consulte “referencia-tabla” en la descripción de
“Subselección”.
USING referencia-tabla
Especifica un conjunto de filas como una tabla de resultados para fusionarse en
el destino. Si la tabla de resultados está vacía, se devuelve un aviso
(SQLSTATE 02000).
ON condición-búsqueda
Especifica las filas de referencia-tabla que se utilizarán en la operación de
Sentencias 1189
MERGE
operación-update
Especifica la operación de actualización que se debe ejecutar para las filas
donde la condición-coincidente se evalúa en verdadera.
UPDATE
Especifica la operación de actualización.
cláusula-período
Especifica que se aplica una cláusula de período a la operación de
actualización en la sentencia MERGE. Para obtener más
información sobre los efectos de la especificación de una cláusula
de período en el contexto de una operación de actualización,
consulte el tema que trata acerca de la sentencia UPDATE.
SET
Especifica la asignación de valores a nombres de columna.
cláusula-asignación
Especifica una lista de actualizaciones de columna.
nombre-columna
Identifica una columna que se debe actualizar. El
nombre-columna debe identificar una columna de la tabla o
vista especificada, pero no una columna de vista derivada
de una función escalar, constante o expresión. No se debe
especificar una columna más de una vez (SQLSTATE
42701).
Una columna de vista derivada de la misma columna como
otra columna de la vista se puede actualizar, pero no se
pueden actualizar ambas columnas en la misma sentencia
MERGE (SQLSTATE 42701).
expresión
Indica el nuevo valor de la columna. La expresión no debe
incluir una función agregada (SQLSTATE 42903).
Una expresión puede contener referencias a columnas del
nombre-tabla o nombre-vista. Para cada fila que se actualiza,
el valor de dicha columna en una expresión es el valor de
la columna en la fila antes de que se actualice la fila.
Si la expresión es una referencia a una sola columna de la
tabla fuente, el valor de columna de la tabla fuente puede
que se haya especificado con un valor de variable de
indicador ampliado. Los efectos de tales variables de
indicador se aplican a las columnas de destino
correspondientes de la cláusula-assignment.
Si la expresión es una sola variable de lenguaje principal o
una variable de lenguaje principal que se vaya a convertir
de forma explícita, esta puede incluir una variable de
indicador que esté habilitada para las variables de
indicador ampliado.
Cuando las variables de indicador ampliado están
habilitadas, los valores DEFAULT (-5) o UNASSIGNED (-7)
de variable de indicador ampliado no deben utilizarse
(SQLSTATE 22539) si la expresión es más compleja que las
referencias siguientes:
v Una sola columna de la tabla fuente
Sentencias 1191
MERGE
Sentencias 1193
MERGE
ELSE IGNORE
Especifica que no se realizará ninguna acción para las filas donde ninguna
condición-coincidente se evalúa en verdadera. Si todas las filas de referencia-tabla
se pasan por alto, se devuelve un aviso (SQLSTATE 02000).
WITH
Especifica el nivel de aislamiento en el que se ejecuta la sentencia MERGE.
RR Lectura repetible
RS Estabilidad de lectura
CS Estabilidad del cursor
UR Lectura no confirmada
Normas
v Se puede especificar más de una operación-modificación (UPDATE SET, DELETE o
operación-insertar), o sentencia-señal en una única sentencia MERGE.
v Sólo se puede trabajar en cada fila del destino una vez. Sólo se puede identificar
una fila del destino como MATCHED con una fila en la tabla de resultados de la
referencia-tabla (SQLSTATE 21506). Una operación de SQL anidado (RI o
desencadenante excepto el desencadenante INSTEAD OF) no puede especificar
la tabla de destino (o una tabla en la misma jerarquía de tablas) como un destino
de una sentencia UPDATE, DELETE, INSERT o MERGE (SQLSTATE 27000).
v Política de seguridad si se protege la tabla de destino identificada o la tabla base
de la vista de destino identificada con una política de seguridad, el ID de
autorización de la sesión debe tener las credenciales de control de acceso basado
en etiquetas (LBAC) que permiten los siguientes tipos de acceso.
– Para la operación de actualización:
- Acceso de grabación a todas las columnas protegidas que se están
actualizando (SQLSTATE 42512)
- Acceso de grabación para cualquier valor explícito proporcionado para una
columna DB2SECURITYLABEL para las políticas de seguridad que se han
creado con la opción RESTRICT NOT AUTHORIZED WRITE SECURITY
LABEL (SQLSTATE 23523)
- Acceso de grabación y de lectura a todas las filas que se están actualizando
(SQLSTATE 42519)
El ID de autorización de la sesión también debe tener otorgada una etiqueta
de seguridad para acceso de grabación para la política de seguridad si se
utiliza un valor implícito para una columna DB2SECURITYLABEL
(SQLSTATE 23523), lo cual puede suceder cuando:
- La columna DB2SECURITYLABEL no está incluida en la lista de columnas
que se van a actualizar (y, por lo tanto, se actualizará implícitamente en la
etiqueta de seguridad para el acceso de grabación del ID de autorización de
la sesión)
- Se proporciona explícitamente un valor para la columna
DB2SECURITYLABEL pero el ID de autorización de la sesión no tiene
acceso de grabación para dicho valor y la política de seguridad se crea con
la opción OVERRIDE NOT AUTHORIZED WRITE SECURITY LABEL
– Para la operación de supresión:
- Acceso de grabación a todas las columnas protegidas (SQLSTATE 42512)
Sentencias 1195
MERGE
Notas
v Orden de proceso:
1. Determine el conjunto de filas que se deben procesar de la fuente y destino.
Si se utiliza CURRENT TIMESTAMP en esta sentencia, sólo se realiza una
lectura de reloj para toda la sentencia.
2. Utilice la cláusula ON para clasificar estas filas en MATCHED o NOT
MATCHED.
3. Evalúe cualquier condición-coincidente en las cláusulas WHEN.
4. Evalúe cualquier expresión en cualquier cláusula-asignación y operación-insertar.
5. Ejecute cada sentencia-señal.
6. Aplique cada operación-modificación a las filas aplicables en el orden
especificado. Las restricciones y desencadenantes activados por cada
operación-modificación se ejecutan para la operación-modificación. Los
desencadenantes a nivel de sentencia se activan incluso si ninguna fila
satisface la operación-modificación. Cada operación-modificación puede afectar a
los desencadenantes y restricciones referenciales de cada operación-modificación
subsiguiente.
v Atomicidad a nivel de sentencia: Si se produce un error durante la ejecución de
la sentencia MERGE, se retrotrae toda la sentencia.
v Número de filas actualizadas: Cuando se completa la ejecución de una sentencia
MERGE, el valor del elemento ROW_COUNT para GET DIAGNOSTICS y
SQLERRD(3) en SQLCA es el número de filas en las que actúa la sentencia
MERGE, excluyendo las filas identificadas por la cláusula ELSE IGNORE. El
valor de SQLERRD(3) no incluye el número de filas sobre las que se ha actuado
como resultado de restricciones o activadores. El valor de SQLERRD(5) incluye
el número de estas filas.
v La fila insertada tampoco se puede actualizar: No se hace ningún intento de
actualizar una fila en el destino que aún no existía antes de ejecutarse la
sentencia MERGE; es decir, no hay actualizaciones de filas que haya insertado la
sentencia MERGE.
v Variables de indicador ampliado y activadores de actualización: Si a una
columna de destino se le ha asignado un valor UNASSIGNED basado en una
variable de indicador ampliado, la columna no se considera actualizada. Esa
columna se trata como si no se hubiera especificado en la lista OF
nombre-columna de cualquier activador de actualización definido en la tabla de
destino.
Ejemplos
v Ejemplo 1: Para actividades cuya descripción ha cambiado, actualice la
descripción en la tabla de archivo. Para actividades nuevas, inserte en la tabla de
archivo. Tanto la tabla de archivo como la tabla de actividades tienen actividad
como clave primaria.
MERGE INTO archive ar
USING (SELECT activity, description FROM activities) ac
ON (ar.activity = ac.activity)
WHEN MATCHED THEN
UPDATE SET
description = ac.description
WHEN NOT MATCHED THEN
INSERT
(activity, description)
VALUES (ac.activity, ac.description)
v Ejemplo 2: Utilizando la tabla de envíos, fusione las filas en la tabla de
inventario, aumentando la cantidad por número de piezas en la tabla de envíos
para filas que coincidan; si no inserte el nuevo partno en la tabla de inventario.
Sentencias 1197
MERGE
Sentencias 1199
OPEN
OPEN
La sentencia OPEN abre un cursor para que pueda utilizarse para leer filas de la
tabla de resultados.
Invocación
Autorización
Sintaxis
OPEN nombre-cursor
nombre-variable-cursor
( )
expresión
,
USING variable
(1)
expresión
USING DESCRIPTOR nombre-descriptor
Notas:
1 Una expresión que no sea una variable sólo puede utilizarse en sentencias
compuestas compiladas.
Descripción
nombre-cursor
Identifica un cursor que se define en una sentencia DECLARE CURSOR que se
ha expresado antes en el programa. Si el nombre-cursor identifica un cursor de
un procedimiento de SQL declarado como WITH RETURN TO CLIENT que ya
se encuentra en el estado abierto, el cursor abierto existente se convierte en un
cursor de conjunto de resultados que ya no es accesible mediante el
nombre-cursor y se abre un cursor nuevo que pasa a ser accesible mediante el
Sentencias 1201
OPEN
USING
Presenta los valores que se sustituyen en los marcadores de parámetro o en las
variables de la sentencia del cursor. Para obtener una explicación de los
marcadores de parámetro, consulte “PREPARE”.
Si se especifica un nombre-sentencia en la sentencia DECLARE CURSOR o en el
constructor de valor de cursor asociado a la variable de cursor que incluye
marcadores de parámetro, deberá utilizarse USING. Si la sentencia preparada
no incluye ningún marcador de parámetro, se ignora USING.
Si se especifica una sentencia-select en la sentencia DECLARE CURSOR o en el
constructor de valor de cursor no parametrizado asociado a la variable de
cursor, puede utilizarse USING para alterar temporalmente los valores de
variable.
variable
Identifica una variable o una estructura del sistema principal declarada en el
programa según las normas para declarar variables y variables del lenguaje
principal. El número de variables debe ser igual al número de marcadores de
parámetro de la sentencia preparada. La variable n corresponde al marcador de
parámetro n de la sentencia preparada. Las variables de localizador y las
variables de referencia a archivo, cuando procede, pueden proporcionarse
como fuente de los valores para los marcadores de parámetro.
expresión
Especifica valores para asociarlos a marcadores de parámetro utilizando
expresiones. Una sentencia OPEN que especifique expresiones en la cláusula
USING sólo se puede utilizar en una sentencia de SQL compuesto (compilado)
(SQLSTATE 42601). El número de expresiones debe ser el mismo que el
número de marcadores de parámetro de la sentencia preparada (SQLSTATE
07001). La expresión número n corresponde al marcador de parámetro número
n de la sentencia preparada. El tipo de datos y el valor de la expresión número
n debe poder asignarse al tipo asociado al marcador de parámetro número n
(SQLSTATE 07006).
Normas
v Cuando se evalúa la sentencia SELECT del cursor, cada marcador de parámetros
de la sentencia se sustituye efectivamente por su variable del lenguaje principal
correspondiente. Para un marcador de parámetro con tipo, los atributos de la
variable de destino son aquellos determinados por la especificación CAST. Para
un marcador de parámetro sin tipo, los atributos de la variable de destino se
determinan de acuerdo con el contexto del marcador de parámetro.
v Supongamos que V indique una variable del lenguaje principal que corresponda
al marcador de parámetros P. El valor de P se asigna a la variable de destino
para P de acuerdo con las normas de asignación de un valor a una columna. Por
lo tanto:
– V debe ser compatible con el destino.
– Si V es una serie, su longitud (incluidos los blancos finales para series que no
son series largas) no debe ser mayor que el atributo de longitud del destino.
– Si V es un número, el valor absoluto de su parte correspondiente al entero no
debe ser mayor que el valor absoluto máximo de la parte correspondiente a
los enteros del destino.
– Si los atributos de V no son idénticos a los atributos del destino, el valor se
convierte para ajustarse a los atributos del destino.
Notas
v Estado cerrado de los cursores: Todos los cursores de un programa están en
estado cerrado cuando se inicia el programa y cuando este inicia la sentencia
ROLLBACK.
Todos los cursores, excepto los cursores abiertos declarados WITH HOLD, están
en estado cerrado cuando el programa emite una sentencia COMMIT.
Un cursor también puede estar en estado cerrado debido a que se ha ejecutado
una sentencia CLOSE o se ha detectado un error que ha originado que la
posición del cursor fuese imprevisible.
El cursor subyacente de una variable de cursor está cerrado si la variable de
cursor sale del ámbito y no hay más variables de cursor que hagan referencia al
cursor subyacente.
v Para recuperar filas de la tabla de resultados de un cursor, ejecute una sentencia
FETCH cuando el cursor está abierto. La única manera de cambiar el estado de
un cursor de cerrado a abierto es ejecutando la sentencia OPEN.
v Efecto de las tablas de resultados materializados: En algunos casos, como
cuando el cursor es de sólo lectura, las filas de resultados de un cursor se
Sentencias 1203
OPEN
Ejemplos
Sentencias 1205
PREPARE
PREPARE
La sentencia PREPARE se utiliza por los programas de aplicación para preparar
dinámicamente una sentencia de SQL para ejecución. La sentencia PREPARE crea
una sentencia de SQL ejecutable, llamada una sentencia preparada, a partir de una
forma de sentencia de serie de caracteres, denominada una serie de sentencia.
Invocación
Autorización
Para las sentencias que afectan a las tablas protegidas con una política de
seguridad, las normas asociadas con la política de seguridad siempre se evaluarán
durante el tiempo de ejecución de la sentencia.
Sintaxis
PREPARE nombre-sentencia
OUTPUT
INTO nombre-descriptor-resultado
INPUT INTO nombre-descriptor-entrada
FROM variable-lenguaje-principal
expresión
Descripción
nombre-sentencia
Identifica la sentencia preparada. Si el nombre identifica una sentencia
preparada existente, se destruye dicha sentencia preparada previamente. El
nombre no debe identificar ninguna sentencia preparada que sea la sentencia
SELECT de un cursor abierto.
OUTPUT INTO
Si se utiliza OUTPUT INTO y la sentencia PREPARE se ejecuta
satisfactoriamente, se colocará información acerca de los marcadores de
parámetro de salida de la sentencia preparada en la SQLDA que
nombre-descriptor-resultado especifica.
nombre-descriptor-resultado
Especifica el nombre de una SQLDA. (Como alternativa a esta cláusula,
puede utilizarse la sentencia DESCRIBE.)
INPUT INTO
Si se utiliza INPUT INTO y la sentencia PREPARE se ejecuta
satisfactoriamente, se colocará información acerca de los marcadores de
parámetro de entrada de la sentencia preparada en la SQLDA que
nombres-descriptor-entrada especifica. Los marcadores de parámetro de entrada
se consideran siempre como con posibilidad de nulos, independientemente de
su uso.
nombre-descriptor-entrada
Especifica el nombre de una SQLDA. (Como alternativa a esta cláusula,
puede utilizarse la sentencia DESCRIBE.)
FROM
Especifica la serie de la sentencia. La serie de la sentencia es el valor de la
variable del lenguaje principal especificada.
variable-lenguaje-principal
Especifica una variable del lenguaje principal que se ha descrito en el
programa de acuerdo con las normas para la declaración de variables de
serie de caracteres. Debe ser una variable de serie de caracteres de longitud
que puede variar cuyo tamaño sea menor que el tamaño de sentencia
máximo de 2.097.152 bytes. Tenga en cuenta que un CLOB(2097152) puede
contener una sentencia de tamaño máximo, pero un VARCHAR no puede.
expresión
Expresión que especifica la serie de la sentencia. La expresión debe devolver
un tipo de serie de caracteres de longitud variable o fija que sea inferior al
tamaño de sentencia máximo de 2.097.152 bytes.
Normas
v Normas para las sentencias: La sentencia debe ser una sentencia ejecutable que
se pueda preparar dinámicamente. Debe ser una de las sentencias de SQL
siguientes:
– ALTER
– CALL
– COMMENT
– COMMIT
– SQL compuesto (compilado)
– SQL compuesto (en línea)
– CREATE
– DECLARE GLOBAL TEMPORARY TABLE
– DELETE
– DROP
– EXPLAIN
– FLUSH EVENT MONITOR
Sentencias 1207
PREPARE
– SET variable
– TRANSFER OWNERSHIP (solamente si el comportamiento de ejecución de
DYNAMICRULES está en vigor para el paquete)
– TRUNCATE (solamente si el comportamiento de ejecución de
DYNAMICRULES está en vigor para el paquete)
– UPDATE
Notas
v Marcadores de parámetro: Aunque una serie de sentencia no puede incluir
referencias a variables de lenguaje principal, puede incluir marcadores de
parámetro. Estos pueden sustituirse por los valores de las variables del lenguaje
principal cuando se ejecuta la sentencia preparada. En el caso de una sentencia
CALL, también puede utilizarse un marcador de parámetro para los argumentos
OUT e INOUT para el procedimiento. Tras haberse ejecutado CALL, el valor que
se ha devuelto para el argumento se asignará a la variable del lenguaje principal
que corresponde al marcador de parámetro.
Un marcador de parámetros es un signo de interrogación (?) o un signo de dos
puntos seguido de un nombre (:nombre) que se utiliza donde se pueda utilizar
una variable del lenguaje principal si la serie de la sentencia fuera una sentencia
de SQL estático. Para obtener una explicación sobre cómo se sustituyen los
marcadores de parámetro por valores, consulte “OPEN” y “EXECUTE”.
Si se asigna un nombre al marcador de parámetro, el nombre puede incluir
letras, números y los símbolos @, #, $ y _. El nombre no se convierte a
mayúsculas.
Los marcadores de parámetro con nombre tienen la misma sintaxis que las
variables del lenguaje principal, aunque estos dos no son intercambiables. Una
variable del lenguaje principal tiene un valor y se utiliza directamente en una
sentencia de SQL estático. Un marcador de parámetro con nombre es un espacio
reservado para un valor en una sentencia de SQL dinámico y el valor se
suministra al ejecutarse la sentencia.
Existen dos tipos de marcadores de parámetro:
Marcador de parámetro con tipo
Es un marcador de parámetros que se especifica junto con su tipo de datos
de destino. Tiene el formato general:
CAST(? AS tipo-datos)
Sentencias 1209
PREPARE
Consulte “Determinación de los tipos de datos de las expresiones sin tipo” para
conocer las normas de establecimiento de tipo de un marcador de parámetro sin
tipo.
v Cuando se ejecuta una sentencia PREPARE, la serie de sentencia se analiza y se
comprueba si hay errores. Si la sentencia no es valida, la condición de error se
notifica en la SQLCA. Cualquier sentencia EXECUTE u OPEN que hace
referencia a esta sentencia también recibirá el mismo error (debido a una
preparación implícita realizada por el sistema) a menos que se haya corregido el
error.
v Se puede hacer referencia a sentencias preparadas en las siguientes clases de
sentencias, con las restricciones que se indican:
En... La sentencia preparada...
DESCRIBE
puede ser cualquier sentencia
DECLARE CURSOR
debe ser SELECT
EXECUTE
no debe ser SELECT
v Una sentencia preparada se puede ejecutar muchas veces. En efecto, si una
sentencia preparada no se ejecuta más de una vez y no contiene marcadores de
parámetro, es más eficaz utilizar la sentencia EXECUTE IMMEDIATE en lugar
de las sentencias PREPARE y EXECUTE.
v Todas las sentencias preparadas que ha creado una unidad de trabajo
permanecen en estado preparado hasta que la aplicación finaliza, con las
siguientes excepciones:
– Una sentencia que se haya preparado dentro de un paquete vinculado con
KEEPDYNAMC NO y que un cursor abierto declarado con la opción WITH HOLD
no utilice ya no está en estado preparado cuando la unidad de trabajo
finaliza.
Ejemplos
SQLTYPE 452
SQLLEN 3
SQLDATA puntero para G01
SQLIND (Véase la nota 2.)
SQLNAME
SQLTYPE 449
Sentencias 1211
PREPARE
SQLTYPE 453
SQLLEN 6
SQLDATA (Véase la nota 3.)
SQLIND puntero para -1
SQLNAME
SQLTYPE 453
SQLLEN 3
SQLDATA puntero para A00
SQLIND puntero para 0
SQLNAME
Nota:
1. Este valor es para una sentencia PREPARE que se ha realizado desde una aplicación de
32 bits. Si la sentencia PREPARE se hubiera realizado en una aplicación de 64 bits,
SQLDABC tendría el valor 240.
2. El valor de SQLIND para esta SQLVAR se pasa por alto porque SQLTYPE identifica un
tipo de datos sin posibilidad de nulos.
3. El valor de SQLDATA para esta SQLVAR se pasa por alto porque el valor de SQLIND
indica que este es un valor nulo.
REFRESH TABLE
La sentencia REFRESH TABLE renueva los datos de una tabla de consulta
materializada.
Invocación
Autorización
Sintaxis
INCREMENTAL
NOT INCREMENTAL
opciones-en-línea:
ALLOW NO ACCESS
opciones-optimización-consulta:
Descripción
nombre-tabla
Identifica la tabla que se debe renovar.
El nombre, incluyendo el esquema implícito o explícito, debe identificar una
tabla que ya exista en el servidor actual. La tabla debe permitir la sentencia
REFRESH TABLE (SQLSTATE 42809). Ello incluye las tablas de consulta
materializada que se han definido con:
v REFRESH IMMEDIATE
v REFRESH DEFERRED
opciones-en-línea
Especifica la accesibilidad de la tabla mientras se está procesando.
Sentencias 1213
REFRESH TABLE
ALLOW NO ACCESS
Especifica que ningún otro usuario puede acceder a la tabla mientras se
está renovando, excepto si utiliza el nivel de aislamiento de lectura no
confirmada.
ALLOW READ ACCESS
Especifica que los demás usuarios tienen acceso de sólo lectura a la tabla
mientras se renueva.
ALLOW WRITE ACCESS
Especifica que los demás usuarios tienen acceso de lectura y grabación a la
tabla mientras se renueva.
Normas
v Si se emite REFRESH TABLE en una tabla de consulta materializada que hace
referencia a uno o más apodos, el ID de autorización de la sentencia deberá
disponer de autorización para poder realizar selecciones desde las tablas de la
fuente de datos (SQLSTATE 42501).
Notas
v Cuando la sentencia se utiliza para renovar una tabla de consulta materializada
REFRESH IMMEDIATE cuyas tablas subyacentes se han cargado, enlazado o
desenlazado, puede que el sistema opte por renovar de manera incremental la
tabla de consulta materializada con las partes delta de sus tablas subyacentes.
Cuando la sentencia se utiliza para renovar una tabla de consulta materializada
REFRESH DEFERRED con una tabla de etapas de soporte, puede que el sistema
opte por renovar de manera incremental la tabla de consulta materializada con
las partes delta de sus tablas subyacentes que se han capturado en la tabla de
etapas. Sin embargo, existen algunas situaciones en las que no es posible esta
optimización y es necesario realizar una renovación completa (es decir, volver a
calcular la definición de la tabla de consulta materializada) para garantizar la
integridad de los datos. El usuario puede solicitar explícitamente el
mantenimiento incremental especificando la opción INCREMENTAL; si no es
posible esta optimización, el sistema devuelve un error (SQLSTATE 55019).
v Si se utiliza la opción ALLOW QUERY OPTIMIZATION USING REFRESH
DEFERRED TABLES WITH REFRESH AGE ANY, asegúrese de que el orden de
renovación de las tablas de consulta materializada REFRESH DEFERRED sea
correcto. Por ejemplo, imagine dos tablas de consulta materializada, MQT1 y
MQT2, cuyas consultas materializadas comparten las mismas tablas subyacentes.
La consulta materializada de MQT2 se puede calcular utilizando MQT1, en lugar
de las tablas subyacentes. Si se emplean distintas sentencias para renovar estas
dos tablas de consulta materializada, y se renueva MQT2 en primer lugar, el
sistema puede elegir utilizar el contenido de MQT1, que todavía no se ha
renovado, para renovar MQT2. En ese caso, MQT1 contendría los datos actuales
pero MQT2 podría contener todavía datos obsoletos, aunque la renovación de
ambas se realizara casi al mismo tiempo. El orden de renovación correcto, si se
utilizan dos sentencias REFRESH en lugar de una, es renovar MQT1 primero.
v Si la tabla de consulta materializada tiene una tabla de etapas asociada, la tabla
de etapas se podará cuando la renovación se haya ejecutado satisfactoriamente.
v Cualquier control de acceso basado en etiquetas en las tablas base o en la tabla
de consulta materializada no interfiere en el proceso de renovación. La
renovación tiene lugar como si el control de acceso basado en etiquetas no
estuviese presente. La protección automática que se asocia a la tabla de consulta
materializada en el momento en que se crea garantiza que los datos de las tablas
base permanecen protegidos al pasarlos a la tabla de consulta materializada.
v Solamente para tabla de consulta materializada, SET INTEGRITY FOR
nombre_mqt IMMEDIATE CHECKED es lo mismo que REFRESH TABLE
nombre_mqt.
v Uso de las tablas de consulta materializada por parte de REFRESH: las tablas
de consulta materializada no se utilizan para evaluar la sentencia-select durante el
proceso de la sentencia REFRESH TABLE.
v Nivel de aislamiento de REFRESH: el nivel de aislamiento que se utiliza para
evaluar la sentencia-select es el nivel de aislamiento especificado en la cláusula
nivel-aislamiento de la sentencia-select. O, si no se especifica la cláusula
nivel-aislamiento, el nivel de aislamiento de la tabla de consulta materializada
registrado cuando se ha emitido CREATE TABLE o ALTER TABLE se utiliza
para evaluar la sentencia-select.
Sentencias 1215
RELEASE (conexión)
RELEASE (conexión)
La sentencia RELEASE (Conexión) establece una o más conexiones en estado
pendiente de liberación.
Invocación
Autorización
No se necesita.
Sintaxis
(1)
RELEASE nombre-servidor
variable-lenguaje-principal
CURRENT
SQL
ALL
Notas:
1 Observe que un servidor de aplicaciones llamado CURRENT o ALL sólo
puede identificarse mediante una variable del lenguaje principal o un
identificador delimitado.
Descripción
nombre-servidor o variable-lenguaje-principal
Identifica el servidor de aplicaciones mediante el nombre-servidor especificado o
mediante una variable-lenguaje-principal que contenga el nombre-servidor.
Si se especifica una variable-lenguaje-principal, debe ser una variable de serie de
caracteres con un atributo de longitud que no sea mayor que 8, y no debe
contener una variable de indicador. El nombre-servidor contenido dentro de la
variable-lenguaje-principal debe alinearse a la izquierda y no debe delimitarse
mediante comillas.
Observe que el nombre-servidor es un alias de base de datos que identifica al
servidor de aplicaciones. Debe aparecer en la lista del directorio local del
peticionario de aplicaciones.
El alias-basedatos especificado o el alias-basedatos contenido en la variable del
lenguaje principal debe identificar una conexión existente del proceso de
aplicación. Si el alias-basedatos no identifica ninguna conexión existente, se
genera un error (SQLSTATE 08003).
CURRENT
Identifica la conexión actual del proceso de aplicación. El proceso de aplicación
debe estar en el estado conectado. Si no se genera un error (SQLSTATE 08003).
ALL o ALL SQL
Indica que todas las conexiones existentes del proceso de aplicación. Este
formato de la sentencia RELEASE coloca todas las conexiones existentes del
Ejemplos
v Ejemplo 1: La aplicación ya no necesita la conexión SQL con IBMSTHDB. La
sentencia siguiente hará que se destruya durante la siguiente operación de
confirmación:
EXEC SQL RELEASE IBMSTHDB;
v Ejemplo 2: La aplicación ya no necesita la conexión actual. La sentencia
siguiente hará que se destruya durante la siguiente operación de confirmación:
EXEC SQL RELEASE CURRENT;
v Ejemplo 3: Si una aplicación no tiene necesidad de acceder a las bases de datos
después de una confirmación pero va a continuar en ejecución durante un
período de tiempo, es mejor no unir dichas conexiones innecesariamente. La
sentencia siguiente puede ejecutarse antes de la confirmación para asegurar que
todas las conexiones se destruyan en la confirmación:
EXEC SQL RELEASE ALL;
Sentencias 1217
RELEASE SAVEPOINT
RELEASE SAVEPOINT
La sentencia RELEASE SAVEPOINT sirve para indicar que la aplicación ya no
desea mantener el punto de salvaguarda especificado. Después de invocar esta
sentencia, ya no es posible hacer una retrotracción hasta el punto de salvaguarda.
Invocación
Autorización
No se necesita.
Sintaxis
TO
RELEASE SAVEPOINT nombre-punto-salvaguarda
Descripción
nombre-punto-salvaguarda
Especifica el punto de salvaguarda que se debe liberar. Cualquier punto de
salvaguarda anidado en el punto de salvaguarda nombrado también se
liberará. La retrotracción a ese punto de salvaguarda, o a cualquier punto de
salvaguarda anidado en él, ya no será posible. Si el punto de salvaguarda no
existe en el nivel de punto de salvaguarda actual (consulte la sección
“Normas” en la descripción de la sentencia SAVEPOINT), se devuelve un error
(SQLSTATE 3B001). El nombre-puntosalvaguarda no puede empezar por 'SYS'
(SQLSTATE 42939).
Notas
v El nombre del punto de salvaguarda que se ha liberado se puede volver a
utilizar ahora en otra sentencia SAVEPOINT, sin tener en cuenta si se ha
especificado la palabra clave UNIQUE en una sentencia SAVEPOINT anterior
especificando este mismo nombre de punto de salvaguarda.
Ejemplo
RENAME
La sentencia RENAME cambia el nombre de una tabla o de un índice existente.
Invocación
Autorización
Sintaxis
TABLE
RENAME nombre-tabla-fuente TO identificador-destino
INDEX nombre-índice-fuente
Descripción
TABLE nombre-tabla-fuente
Identifica la tabla existente que se debe renombrar. El nombre, incluyendo el
nombre de esquema, debe identificar una tabla que ya exista en la base de
datos (SQLSTATE 42704). No debe ser el nombre de una tabla de catálogos
(SQLSTATE 42832), una tabla de consulta materializada, una tabla con tipo
(SQLSTATE 42997), una tabla temporal creada, una tabla temporal global
declarada (SQLSTATE 42995), un apodo o un objeto que no sea una tabla o un
alias (SQLSTATE 42809). La palabra clave TABLE es opcional.
El nombre no debe identificar una tabla a la que se haga referencia en una
definición de permiso de fila o una definición de máscara de columna
(SQLSTATE 42917).
INDEX nombre-índice-fuente
Especifica el nombre del índice existente cuyo nombre va a cambiarse. El
nombre, incluido el nombre de esquema, debe identificar un índice que ya
exista en la base de datos (SQLSTATE 42704). No puede ser el nombre de un
índice en una tabla temporal creada o una tabla temporal global declarada
(SQLSTATE 42995). El nombre de esquema no debe ser SYSIBM, SYSCAT,
SYSFUN o SYSSTAT (SQLSTATE 42832).
identificador-destino
Especifica el nuevo nombre de la tabla o del índice sin un nombre de esquema.
El nombre de esquema del objeto de fuente se utiliza para calificar el nuevo
nombre del objeto. El nombre calificado no debe identificar una tabla, vista,
alias o índice que ya exista en la base de datos (SQLSTATE 42710).
Sentencias 1219
RENAME
Normas
Cuando se cambia el nombre de una tabla, la tabla fuente debe ajustarse a las
normas siguientes:
v Debe existir una referencia a ella en todas las definiciones de la tabla de consulta
materializada
v Debe ser la tabla objeto de un activador existente
v No ser una tabla padre ni una tabla dependiente en ninguna restricción de
integridad de referencia
v No ser el ámbito de ninguna columna de referencia existente
v No estar referenciada en un objeto XSR que se ha habilitado para su
descomposición
Se devuelve un error (SQLSTATE 42986) si la tabla fuente viola una o más de esas
condiciones.
Notas
v Las entradas del catálogo se actualizan para reflejar el nuevo nombre de la tabla
o índice.
v Todas las autorizaciones que se asocian a la tabla fuente o al nombre del índice
se transfieren al nuevo nombre de tabla o índice (las tablas del catálogo de
autorización se actualizan de acuerdo con ello).
v Los índices definidos en la tabla fuente se transfieren a la nueva tabla (las tablas
de catálogo de índice se actualizan del modo apropiado).
v RENAME TABLE invalida cualquier paquete que dependa de la tabla fuente.
RENAME INDEX invalida cualquier paquete que dependa del índice fuente.
v Si se utiliza un alias para el nombre-tabla-fuente, éste deberá resolverse de modo
que dé como resultado un nombre de tabla. La tabla se renombra dentro del
esquema de la tabla. El alias no se cambia por la sentencia RENAME y continúa
haciendo referencia al anterior nombre de tabla.
v El nombre de una tabla con una clave primaria o con restricciones de unicidad
podrá cambiarse si ninguna clave foránea hace referencia a la clave primaria o a
las restricciones de unicidad.
Ejemplos
v Ejemplo 1: cambiar el nombre de la tabla EMP por EMPLOYEE.
RENAME TABLE EMP TO EMPLOYEE
RENAME TABLE ABC.EMP TO EMPLOYEE
v Ejemplo 2: cambiar el nombre del índice NEW-IND por IND.
RENAME INDEX NEW-IND TO IND
RENAME INDEX ABC.NEW-IND TO IND
RENAME STOGROUP
La sentencia RENAME STOGROUP cambia el nombre de un grupo de
almacenamiento existente.
Invocación
Autorización
Sintaxis
RENAME STOGROUP nombre-grupo-almacenamiento-fuente
TO nombre-grupo-almacenamiento-destino
Descripción
nombre-grupo-almacenamiento-fuente
Identifica el grupo de almacenamiento cuyo nombre se debe cambiar;
nombre-grupo-almacenamiento-fuente debe identificar un grupo de
almacenamiento que exista en el servidor actual (SQLSTATE 42704). Este
nombre consta de una sola parte.
nombre-grupo-almacenamiento-destino
Da nombre al grupo de almacenamiento. Este nombre consta de una sola parte.
Se trata de un identificador de SQL (ordinario o delimitado). El
nombre-grupo-almacenamiento-destino no debe identificar un grupo de
almacenamiento que ya exista en el catálogo (SQLSTATE 42710). El
nombre-grupo-almacenamiento-destino no debe empezar con los caracteres 'SYS'
(SQLSTATE 42939).
Normas
v No se puede ejecutar la sentencia RENAME STOGROUP mientras se está
añadiendo un servidor de particiones de base de datos (SQLSTATE 55071).
Sentencias 1221
RENAME TABLESPACE
RENAME TABLESPACE
La sentencia RENAME TABLESPACE cambia el nombre de un espacio de tablas
existente.
Invocación
Autorización
Sintaxis
RENAME TABLESPACE nombre-espacio-tablas-fuente
TO nombre-espacio-tablas-destino
Descripción
nombre-espacio-tablas-fuente
Especifica, en forma de nombre que consta de un solo elemento, el espacio de
tablas existente que se debe renombrar. Se trata de un identificador de SQL
(ordinario o delimitado). El nombre debe identificar un espacio de tablas que
ya exista en el catálogo (SQLSTATE 42704).
nombre-espacio-tablas-destino
Especifica el nuevo nombre del espacio de tablas, en forma de nombre
formado por un solo elemento. Se trata de un identificador de SQL (ordinario
o delimitado). El nombre no debe identificar un espacio de tablas que ya exista
en el catálogo (SQLSTATE 42710) y no puede comenzar con 'SYS' (SQLSTATE
42939).
Normas
v El espacio de tablas SYSCATSPACE no se puede renombrar (SQLSTATE 42832).
v Los espacios de tablas cuyo estado sea "recuperación pendiente" o "recuperación
en proceso" no se pueden renombrar (SQLSTATE 55039)
Notas
v Cuando se renombra un espacio de tablas, se actualiza su tiempo mínimo de
recuperación hasta el momento en que se cambió el nombre. Esto implica que
una recuperación hecha a nivel de espacio de tablas debe hacerse como mínimo
hasta alcanzar ese momento.
v El nuevo nombre del espacio de tablas se debe utilizar cuando se restaura un
espacio de tablas a partir de una imagen de copia de seguridad, cuando el
cambio de nombre se hizo después de crear la copia de seguridad.
Ejemplo
Sentencias 1223
REPEAT
REPEAT
La sentencia REPEAT ejecuta una sentencia o grupo de sentencias hasta que se
cumpla una condición de búsqueda.
Invocación
Autorización
Sintaxis
REPEAT sentencia-rutina-SQL UNTIL condición-búsqueda
etiqueta:
END REPEAT
etiqueta
sentencia-rutina-SQL:
sentencia-procedimiento-SQL ;
sentencia-función-SQL ;
Descripción
etiqueta
Especifica la etiqueta de la sentencia REPEAT. Si se especifica la etiqueta
inicial, esa etiqueta puede especificarse en sentencias LEAVE e ITERATE. Si se
especifica una etiqueta final, se debe especificar también la etiqueta inicial
correspondiente.
sentencia-procedimiento-SQL
Especifica las sentencias de SQL que se deben ejecutar en el bucle. La
sentencia-procedimiento-SQL sólo se puede aplicar en el contexto de un
procedimiento de SQL o de una sentencia de SQL compuesto (compilado).
Consulte sentencia-procedimiento-SQL en la sentencia de “SQL compuesto
(compilado)”.
sentencia-función-SQL
Especifica las sentencias de SQL que se deben ejecutar en el bucle. La
sentencia-función-SQL sólo se puede aplicar en el contexto de un activador de
SQL, una función de SQL o de un método de SQL. Consulte
sentencia-función-SQL en “FOR”.
condición-búsqueda
La condición-búsqueda se evalúa tras cada ejecución del bucle REPEAT. Si la
condición es verdadera, se sale del bucle. Si la condición es desconocida o
falsa, el bucle continúa.
Ejemplo
Una sentencia REPEAT busca filas en una tabla hasta que se invoca el manejador
de condiciones not_found.
CREATE PROCEDURE REPEAT_STMT(OUT counter INTEGER)
LANGUAGE SQL
BEGIN
DECLARE v_counter INTEGER DEFAULT 0;
DECLARE v_firstnme VARCHAR(12);
DECLARE v_midinit CHAR(1);
DECLARE v_lastname VARCHAR(15);
DECLARE at_end SMALLINT DEFAULT 0;
DECLARE not_found CONDITION FOR SQLSTATE ’02000’;
DECLARE c1 CURSOR FOR
SELECT firstnme, midinit, lastname
FROM employee;
DECLARE CONTINUE HANDLER FOR not_found
SET at_end = 1;
OPEN c1;
fetch_loop:
REPEAT
FETCH c1 INTO v_firstnme, v_midinit, v_lastname;
SET v_counter = v_counter + 1;
UNTIL at_end > 0
END REPEAT fetch_loop;
SET counter = v_counter;
CLOSE c1;
END
Sentencias 1225
RESIGNAL
RESIGNAL
La sentencia RESIGNAL se utilizan en un manejador de condiciones para
retransmitir la condición que ha activado el manejador o para generar una
condición alternativa a fin de poderse procesar a un nivel más alto. Produce una
excepción, un aviso o una condición de no encontrado que se debe devolver, junto
con el texto de mensaje opcional.
Invocación
Autorización
Sintaxis
RESIGNAL
VALUE
SQLSTATE constante-serie-sqlstate
variable-serie-sqlstate información-señal
nombre-condición
información-señal:
Descripción
SQLSTATE VALUE constante-serie-sqlstate
La constante especificada de tipo serie representa un estado SQL (SQLSTATE).
Debe ser una constante de tipo serie de caracteres con exactamente 5 caracteres
que siguen las normas para QLSTATE:
v Cada carácter debe pertenecer al conjunto de dígitos (del '0' al '9') o de letras
mayúsculas no acentuadas (de la 'A' a la 'Z')
v La clase SQLSTATE (primeros dos caracteres) no puede ser '00', pues esto
representa una finalización satisfactoria.
Si SQLSTATE no se ajusta a estas normas, se produce un error (SQLSTATE
428B3).
SQLSTATE VALUE
Especifica el SQLSTATE que se devolverá. Puede utilizarse cualquier valor
válido de SQLSTATE. El valor especificado debe respetar las reglas para los
SQLSTATE:
v Cada carácter debe formar parte de un conjunto de dígitos (de '0' a '9') o de
un conjunto de letras en mayúsculas no acentuadas (de 'A' a 'Z').
v La clase SQLSTATE (primeros dos caracteres) no puede ser '00', pues esto
representa una finalización satisfactoria.
Si SQLSTATE no se ajusta a estas normas, se devuelve un error.
constante-serie-sqlstate
El valor de constante-serie-sqlstate debe ser una constante de serie de
caracteres que contenga exactamente 5 caracteres.
variable-serie-sqlstate
La variable de SQL o parámetro de SQL que se especifica debe
corresponder al tipo de datos CHAR(5) y no debe ser un valor nulo.
nombre-condición
Especifica el nombre de una condición que se devolverá. El nombre-condición
debe declararse en la sentencia-compuesta o identificar una condición que
existe en el servidor actual.
SET MESSAGE_TEXT =
Especifica una serie de caracteres que describe el error o aviso. La serie de
caracteres se devuelve en el campo sqlerrmc de la SQLCA. Si la serie tiene más
de 70 bytes de longitud, se truncará sin avisar de ello.
nombre-variable-SQL
Identifica una variable de SQL que se debe declarar dentro de la sentencia
compuesta que contiene el texto del mensaje.
nombre-parámetro-SQL
Identifica un parámetro de SQL, que se ha definido para la rutina, que
contiene el texto del mensaje. El parámetro de SQL debe estar definido con
el tipo de datos CHAR o VARCHAR.
constante-serie-diagnóstico
Especifica una constante de tipo serie que contiene el texto del mensaje.
Notas
v Si se emite una sentencia RESIGNAL sin especificar una cláusula SQLSTATE o
un nombre-condición, se devuelve la misma condición que ha invocado el
manejador. El SQLSTATE, el SQLCODE y la SQLCA que se asocian a la
condición no cambian.
v Si una sentencia RESIGNAL se emite usando un nombre-condición que no tiene
un valor de SQLSTATE asociado y la condición no se gestiona, se devuelve
SQLSTATE 45000 y el SQLCODE se establece en -438. Tenga en cuenta que una
condición de este tipo no se manejará por un manejador de condiciones para
SQLSTATE 45000 que se encuentre en el ámbito de la rutina que emite la
sentencia RESIGNAL.
v Si una sentencia RESIGNAL se emite utilizando un valor SQLSTATE o un
nombre-condición con un valor SQLSTATE asociado, el valor SQLCODE devuelto
se basa en el valor SQLSTATE de la siguiente manera:
– Si la clase de SQLSTATE especificada es '01' ó '02', se devuelve un aviso o una
condición de no encontrado y el SQLCODE se establece en +438.
– De otro modo, se devuelve una condición de excepción y el SQLCODE se
establece en -438.
v Una sentencia RESIGNAL tiene los campos del SQLCA establecidos de la forma
siguiente:
– Los campos sqlerrd se establecen en cero.
– Los campos sqlwarn se establecen en blancos.
– El campo sqlerrmc se establece en los 70 primeros bytes de MESSAGE_TEXT.
Sentencias 1227
RESIGNAL
Ejemplo
Este ejemplo detecta los errores de división por cero. La sentencia IF utiliza una
sentencia SIGNAL para invocar el manejador de condiciones overflow. El manejador
de condiciones utiliza una sentencia RESIGNAL para devolver un valor de
SQLSTATE diferente a la aplicación cliente.
CREATE PROCEDURE divide ( IN numerator INTEGER,
IN denominator INTEGER,
OUT result INTEGER)
LANGUAGE SQL
BEGIN
DECLARE overflow CONDITION FOR SQLSTATE ’22003’;
DECLARE CONTINUE HANDLER FOR overflow
RESIGNAL SQLSTATE ’22375’;
IF denominator = 0 THEN
SIGNAL overflow;
ELSE
SET result = numerator / denominator;
END IF;
END
RETURN
La sentencia RETURN se utiliza para concluir la ejecución de una rutina. Para las
funciones o métodos de SQL, devuelve el resultado de la función o método. Para
un procedimiento SQL, devuelve opcionalmente un valor de estado de tipo entero.
Invocación
Autorización
Sintaxis
RETURN
expresión
NULL
selección completa
,
WITH expresión-tabla-común
Descripción
expresión
Especifica un valor devuelto procedente de la rutina:
v Si la rutina es una función o un método, se debe especificar expresión, NULL
o selección completa (SQLSTATE 42631) y el tipo de datos del resultado debe
ser asignable al tipo RETURNS de la rutina (SQLSTATE 42866).
v Si la rutina es una función de tabla, no puede especificarse una expresión
escalar (que no sea una selección completa escalar) (SQLSTATE 428F1).
v Si la rutina es un procedimiento, el tipo de datos de expresión debe ser
INTEGER (SQLSTATE 428F2). Un procedimiento no puede devolver NULL o
una selección completa.
NULL
Especifica que la función o el método devuelve un valor nulo del tipo de datos
definido en la cláusula RETURNS. No se puede especificar NULL para un
RETURN de un procedimiento.
WITH expresión-tabla-común
Define una expresión de tabla común para utilizarla con la selección completa
que viene a continuación.
selección completa
Especifica la fila o filas que se deben devolver para la función. El número
de columnas de la selección completa debe coincidir con el número de
columnas del resultado de la función (SQLSTATE 42811). Además, los tipos
de columnas estáticas de la selección completa deben ser asignables a los
Sentencias 1229
RETURN
Normas
v La ejecución de un método o una función SQL debe finalizar con una sentencia
RETURN (SQLSTATE 42632).
v En una función de fila o tabla de SQL que utiliza una sentencia de SQL
compuesto (en línea), la única sentencia RETURN permitida es la que se
encuentra al final de la sentencia compuesta. (SQLSTATE 429BD).
Notas
v Cuando se devuelve un valor desde un procedimiento, el llamador puede
acceder al valor:
– utilizando la sentencia GET DIAGNOSTICS para recuperar el valor de
DB2_RETURN_STATUS cuando se ha llamado al procedimiento de SQL desde
otro procedimiento de SQL
– utilizando el parámetro encontrado para el marcador de parámetro de valor
devuelto en la sintaxis de la cláusula de escape CALL (?=CALL...) en una
aplicación CLI
– directamente desde el campo sqlerrd[0] de la SQLCA, tras procesarse la
cláusula CALL de un procedimiento de SQL. Este campo sólo es válido si el
SQLCODE es cero o un valor positivo (de lo contrario, debe darse por
supuesto un valor de -1).
Ejemplo
Invocación
Autorización
Sintaxis
,
,
BY ALL
FROM nombre-autorización
USER
GROUP
ROLE
PUBLIC
Descripción
ACCESSCTRL
Revoca la autorización para otorgar y revocar la mayoría de las autorizaciones
de base de datos y privilegios de objetos.
BINDADD
Revoca la autorización para crear paquetes. El creador de un paquete tiene
automáticamente el privilegio CONTROL en dicho paquete y conserva este
privilegio incluso si se revoca posteriormente la autorización BINDADD.
Sentencias 1231
REVOKE (autorizaciones de bases de datos)
PRECAUCIÓN:
La revocación de la autorización DBADM no revoca automáticamente los
privilegios que ostentaba nombre-autorización sobre los objetos de la base de
datos.
EXPLAIN
Revoca la autorización para explicar, preparar y describir sentencias estáticas y
dinámicas sin necesidad de acceder a los datos.
IMPLICIT_SCHEMA
Revoca la autorización para crear implícitamente un esquema. No afecta a la
capacidad de crear objetos en esquemas existentes o procesar una sentencia
CREATE SCHEMA.
La autorización IMPLICIT_SCHEMA no puede revocarse de un
nombre-autorización que contenga la autorización DBADM sin revocar también
la autorización DBADM (SQLSTATE 42504).
LOAD
Revoca la autorización para cargar (LOAD) en esta base de datos.
QUIESCE_CONNECT
Revoca la autorización para acceder a la base de datos mientras está
inmovilizada.
SECADM
Revoca la autorización para administrar la seguridad de la base de datos.
SQLADM
Revoca la autorización para supervisar y ajustar las sentencias de SQL.
WLMADM
Revoca la autorización para gestionar los objetos del gestor de carga de trabajo.
FROM
Indica a quién se revocan las autorizaciones.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol.
nombre-autorización,...
Lista los ID de autorización de uno o varios usuarios, grupos o roles.
La lista de los ID de autorización no puede incluir el ID de autorización
del usuario que emite la sentencia (SQLSTATE 42502).
PUBLIC
Revoca las autorizaciones de PUBLIC.
BY ALL
Revoca todos los privilegios indicados de todos los usuarios especificados a los
que se han otorgado explícitamente tales privilegios, independientemente de
qué usuario los ha otorgado. Este es el comportamiento por omisión.
Sentencias 1233
REVOKE (autorizaciones de bases de datos)
Normas
Notas
v La revocación de un privilegio específico no revoca necesariamente la capacidad
de realizar una acción. Un usuario puede seguir realizando una tarea si PUBLIC,
un grupo o un rol tienen otros privilegios o si el usuario tiene un grado de
autorización más alto como, por ejemplo, DBADM.
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con las versiones anteriores de los productos
DB2 y con otros productos de base de datos.
– CREATE_NOT_FENCED puede especificarse en lugar de
CREATE_NOT_FENCED_ROUTINE
– Puede especificarse SYSTEM en lugar de DATABASE
– Puede especificarse NOT INCLUDING DEPENDENT PRIVILEGES como
sintaxis alternativa
Ejemplos
v Ejemplo 1: Dado que USER6 sólo es un usuario y no un grupo, revoque el
privilegio para crear las tablas del usuario USER6.
REVOKE CREATETAB ON DATABASE FROM USER6
v Ejemplo 2: Revoque la autorización BINDADD en la base de datos de un grupo
denominado D024. Existen dos filas en la vista de catálogo SYSCAT.DBAUTH
para el usuario al que se otorga la autorización; una con un GRANTEETYPE que
es U y otra con un GRANTEETYPE que es G.
REVOKE BINDADD ON DATABASE FROM GROUP D024
REVOKE (exención)
Este formato de la sentencia REVOKE revoca una exención a una norma de acceso
de control de acceso basado en etiquetas (LBAC).
Invocación
Autorización
Sintaxis
REVOKE EXEMPTION ON RULE DB2LBACREADARRAY
DB2LBACREADSET
DB2LBACREADTREE
DB2LBACWRITEARRAY WRITEDOWN
WRITEUP
DB2LBACWRITESET
DB2LBACWRITETREE
ALL
Descripción
EXEMPTION ON RULE
Revoca la exención en una norma de acceso.
DB2LBACREADARRAY
Revoca una exención en la norma DB2LBACREADARRAY predefinida.
DB2LBACREADSET
Revoca una exención en la norma DB2LBACREADSET predefinida.
DB2LBACREADTREE
Revoca una exención en la norma DB2LBACREADTREE predefinida.
DB2LBACWRITEARRAY
Revoca una exención en la norma DB2LBACWRITEARRAY predefinida.
WRITEDOWN
Especifica que la exención sólo se aplica a la grabación hacia abajo.
WRITEUP
Especifica que la exención sólo se aplica a la grabación hacia arriba.
Sentencias 1235
REVOKE (exención)
DB2LBACWRITESET
Revoca una exención en la norma DB2LBACWRITESET predefinida.
DB2LBACWRITETREE
Revoca una exención en la norma DB2LBACWRITETREE predefinida.
ALL
Revoca las exenciones en todas las normas predefinidas.
FOR nombre-política
Especifica el nombre de la política de seguridad en la que se revocarán las
exenciones.
FROM
Especifica a quién se le revoca la exención.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol.
nombre-autorización,...
Lista los ID de autorización de uno o más usuarios, grupos o roles.
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Para todas las filas del objeto especificado en la vista de catálogo
SYSCAT.SECURITYPOLICYEXEMPTIONS en la que el otorgado es
nombre-autorización:
- Si todas las filas tienen un GRANTEETYPE que es 'U', se supone USER.
- Si todas las filas tienen un GRANTEETYPE que es 'G', se supone GROUP.
- Si todas las filas tienen un GRANTEETYPE que es 'R', se supone ROLE.
- Si todas las filas no tienen el mismo valor para GRANTEETYPE, se
devuelve un error (SQLSTATE 56092).
Ejemplos
v Ejemplo 1: Revocar la exención en la norma de acceso DB2LBACREADSET para
la política de seguridad DATA_ACCESS del usuario WALID.
REVOKE EXEMPTION ON RULE DB2LBACREADSET FOR DATA_ACCESS
FROM USER WALID
v Ejemplo 2: Revoca una exención en la norma de acceso DB2LBACWRITEARRAY
con la opción WRITEDOWN para la política de seguridad DATA_ACCESS del
usuario BOBBY.
REVOKE EXEMPTION ON RULE DB2LBACWRITEARRAY WRITEDOWN
FOR DATA_ACCESS FROM USER BOBBY
v Ejemplo 3: Revoca una exención en la norma de acceso DB2LBACWRITEARRAY
con la opción WRITEUP para la política de seguridad DATA_ACCESS del
usuario BOBBY.
REVOKE EXEMPTION ON RULE DB2LBACWRITEARRAY WRITEUP
FOR DATA_ACCESS FROM USER BOBBY
Invocación
Autorización
Sintaxis
PRIVILEGES
REVOKE ALL ON VARIABLE nombre-variable
,
READ
WRITE
,
BY ALL RESTRICT
FROM nombre-autorización
USER
GROUP
ROLE
PUBLIC
Descripción
ALL PRIVILEGES
Revoca todos los privilegios que retiene un nombre-autorización para la variable
global especificada. Si no se especifica ALL, debe especificarse READ o WRITE.
No se debe especificar READ o WRITE más de una vez.
READ
Revoca el privilegio para leer el valor de la variable global especificada.
WRITE
Revoca el privilegio para asignar un valor a la variable global especificada.
ON VARIABLE nombre-variable
Identifica la variable global sobre la que van a revocarse uno o más privilegios.
El nombre-variable debe identificar una variable global que existe en el servidor
actual y que no es una variable de módulo (SQLSTATE 42704).
FROM
Especifica a quién se revocarán los privilegios.
USER
Especifica que el nombre-autorización identifica a un usuario.
Sentencias 1237
REVOKE (privilegios de variable global)
GROUP
Especifica que el nombre-autorización identifica a un grupo.
ROLE
Especifica que el nombre-autorización identifique un rol existente en el
servidor actual (SQLSTATE 42704).
nombre-autorización,...
Lista los ID de autorización de uno o más usuarios, grupos o roles. La lista
de los ID de autorización no puede incluir el ID de autorización del
usuario que emite la sentencia (SQLSTATE 42502).
PUBLIC
Revoca los privilegios especificados de PUBLIC.
BY ALL
Revoca todos los privilegios especificados de todos los usuarios especificados a
los que se han otorgado explícitamente tales privilegios, independientemente
de qué usuario los ha otorgado. Éste es el comportamiento por omisión.
RESTRICT
Especifica que la sentencia dará error si se revoca algún objeto que dependa
del privilegio. Éste es el comportamiento por omisión.
Normas
v Por cada nombre-autorización especificado, si no se ha especificado ninguna de las
palabras clave USER, GROUP o ROLE, para todas las filas del objeto
especificado en la vista de catálogos de SYSCAT.VARIABLEAUTH en la que el
otorgado es nombre-autorización:
– Si GRANTEETYPE es 'U', se asume USER.
– Si GRANTEETYPE es 'G', se asume GROUP.
– Si GRANTEETYPE es 'R', se asume ROLE.
– Si GRANTEETYPE no tiene el mismo valor, se devuelve un error (SQLSTATE
56092.
v Si alguna función SQL, método SQL, procedimiento, vista, desencadenante u
otra variable global contiene una variable global y depende de que se revoque el
privilegio, la operación de revocación fallará (SQLSTATE 42893).
Notas
v Si el privilegio READ se revoca en una variable global, los paquetes con una
dependencia para grabar el valor de la variable global (por ejemplo, por medio
de la sentencia SET) no resultan afectados, ya que la grabación en una variable
global está controlada por medio del privilegio WRITE en dicha variable global.
v Si el privilegio WRITE se revoca en una variable global, los paquetes con una
dependencia para leer el valor de la variable global no resultan afectados, ya que
la lectura de una variable global está controlada por medio del privilegio READ
en dicha variable global.
v La revocación de un privilegio no afecta necesariamente la posibilidad de
realizar la acción. Es posible que un usuario no pueda proceder en el caso de
que se retenga el privilegio requerido por medio de la pertenencia a un rol o
grupo diferente o por medio de PUBLIC.
Ejemplo
Sentencias 1239
REVOKE (privilegios de índice)
Invocación
Autorización
Sintaxis
REVOKE CONTROL ON INDEX nombre-índice
,
BY ALL
FROM nombre-autorización
USER
GROUP
ROLE
PUBLIC
Descripción
CONTROL
Revoca el privilegio para descartar el índice. Este es el privilegio CONTROL
para índices, que se otorga automáticamente a los creadores de índices.
ON INDEX nombre-índice
Especifica el nombre del índice en el que se debe revocar el privilegio
CONTROL.
FROM
Indica de quién se deben revocar los privilegios.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol.
nombre-autorización,...
Lista los ID de autorización de uno o varios usuarios, grupos o roles.
La lista de los ID de autorización no puede incluir el ID de autorización
del usuario que emite la sentencia (SQLSTATE 42502).
PUBLIC
Revoca los privilegios de PUBLIC.
BY ALL
Revoca el privilegio de todos los usuarios especificados a los que se ha
otorgado explícitamente ese privilegio, independientemente de qué usuario lo
ha otorgado. Este es el comportamiento por omisión.
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Para todas las filas del objeto especificado en la vista de catálogo
SYSCAT.INDEXAUTH en la que el otorgado es nombre-autorización:
- Si todas las filas tienen un GRANTEETYPE que es 'U', se supone USER.
- Si todas las filas tienen un GRANTEETYPE que es 'G', se supone GROUP.
- Si todas las filas tienen un GRANTEETYPE que es 'R', se supone ROLE.
- Si todas las filas no tienen el mismo valor para GRANTEETYPE, se
devuelve un error (SQLSTATE 56092).
Notas
v La revocación de un privilegio específico no revoca necesariamente la
posibilidad de realizar la acción. Un usuario puede seguir realizando una tarea
si PUBLIC, un grupo o un rol tienen otros privilegios o si el usuario tiene
autorizaciones como, por ejemplo, ALTERIN para el esquema de un índice.
Ejemplos
v Ejemplo 1: Dado que USER4 es sólo un usuario y no un grupo, revoque el
privilegio para descartar un índice DEPTIDX del usuario USER4.
REVOKE CONTROL ON INDEX DEPTIDX FROM KIESLER
v Ejemplo 2: Revoque el privilegio para descartar un índice LUNCHITEMS del
usuario CHEF y del grupo WAITERS.
REVOKE CONTROL ON INDEX LUNCHITEMS
FROM USER CHEF, GROUP WAITERS
Sentencias 1241
REVOKE (privilegios de módulo)
Invocación
Autorización
Sintaxis
REVOKE EXECUTE ON MODULE nombre-módulo
FROM nombre-autorización
USER
GROUP
ROLE
PUBLIC
Descripción
EXECUTE
Revoca el privilegio para hacer referencia a objetos de módulo publicados. Esto
incluye revocar el privilegio para:
v Ejecutar cualquier rutina publicada definida en el módulo.
v Leer y grabar en cualquier variable global publicada definida en el módulo.
v Hacer referencia a cualquier tipo definido por el usuario publicado que esté
definido en el módulo.
v Hacer referencia a cualquier condición publicada definida en el módulo.
ON MODULE nombre-módulo
Identifica el módulo del que se ha revocado el privilegio. El nombre-módulo
debe identificar un módulo que exista en el servidor actual (SQLSTATE 42704).
FROM
Indica a quién se revoca el privilegio.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol. El nombre
de rol debe existir en el servidor actual (SQLSTATE 42704).
nombre-autorización
Lista uno o varios ID de autorización. No se debe especificar el mismo
nombre-autorización más de una vez
PUBLIC
Otorga el privilegio a un conjunto de usuarios (ID de autorización). Para
obtener más información, consulte el apartado “Autorizaciones, privilegios
y propiedad de objetos”.
Ejemplo
Sentencias 1243
REVOKE (privilegios de paquete)
Invocación
Autorización
Sintaxis
,
REVOKE BIND
CONTROL
(1)
EXECUTE
(2)
ON PACKAGE id-paquete
nombre-esquema.
,
BY ALL
FROM nombre-autorización
USER
GROUP
ROLE
PUBLIC
Notas:
1 RUN se puede utilizar como sinónimo de EXECUTE.
2 PROGRAM puede utilizarse como sinónimo de PACKAGE.
Descripción
BIND
Revoca el privilegio para ejecutar BIND o REBIND para el paquete al que se
hace referencia o bien para añadir una nueva versión del paquete al que se
hace referencia.
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Para todas las filas del objeto especificado en la vista de catálogo
SYSCAT.PACKAGEAUTH en la que el otorgado es nombre-autorización:
- Si todas las filas tienen un GRANTEETYPE que es 'U', se supone USER.
- Si todas las filas tienen un GRANTEETYPE que es 'G', se supone GROUP.
- Si todas las filas tienen un GRANTEETYPE que es 'R', se supone ROLE.
- Si todas las filas no tienen el mismo valor para GRANTEETYPE, se
devuelve un error (SQLSTATE 56092).
Sentencias 1245
REVOKE (privilegios de paquete)
Notas
v La revocación de un privilegio específico no revoca necesariamente la
posibilidad de realizar la acción. Un usuario puede seguir realizando una tarea
si PUBLIC, un grupo o un rol tienen otros privilegios o si el usuario tiene
privilegios como, por ejemplo, ALTERIN para el esquema de un paquete.
Ejemplos
v Ejemplo 1: Revoque el privilegio EXECUTE en el paquete CORPDATA.PKGA de
PUBLIC.
REVOKE EXECUTE
ON PACKAGE CORPDATA.PKGA
FROM PUBLIC
v Ejemplo 2: Revoque la autorización CONTROL en el paquete RRSP_PKG para el
usuario FRANK y para PUBLIC.
REVOKE CONTROL
ON PACKAGE RRSP_PKG
FROM USER FRANK, PUBLIC
REVOKE (rol)
Este formato de la sentencia REVOKE revoca roles de usuarios, grupos u otros
roles.
Invocación
Autorización
Sintaxis
,
ROLE
REVOKE nombre-rol
ADMIN OPTION FOR
,
BY ALL
FROM nombre-autorización
USER
GROUP
ROLE
PUBLIC
Descripción
ADMIN OPTION FOR
Revoca WITH ADMIN OPTION en nombre-rol. WITH ADMIN OPTION en
nombre-rol debe retenerse por medio de nombre-autorización o por medio de
PUBLIC, si se especifica PUBLIC (SQLSTATE 42504). Si se especifica la cláusula
ADMIN OPTION FOR, sólo se revoca WITH ADMIN OPTION en ROLE
nombre-rol, no el propio rol.
ROLE nombre-rol
Especifica el rol que va a revocarse. El nombre-rol debe identificar un rol
existente en el servidor actual (SQLSTATE 42704) que se haya otorgado a
nombre-autorización o a PUBLIC, si se ha especificado PUBLIC (SQLSTATE
42504).
FROM
Especifica a quién se revoca el rol.
USER
Especifica que el nombre-autorización identifica a un usuario.
Sentencias 1247
REVOKE (rol)
GROUP
Especifica que el nombre-autorización identifica a un grupo.
ROLE
Especifica que el nombre-autorización identifique un rol existente en el
servidor actual (SQLSTATE 42704).
nombre-autorización,...
Lista los ID de autorización de uno o más usuarios, grupos o roles. La lista
de los ID de autorización no puede incluir el ID de autorización del
usuario que emite la sentencia (SQLSTATE 42502).
PUBLIC
Revoca los roles especificadas de PUBLIC.
BY ALL
Revoca el nombre-rol de cada nombre-autorización especificado al que se otorgó
explícitamente dicho rol, sin tener en cuenta quién lo otorgó. Éste es el
comportamiento por omisión.
Normas
v Por cada nombre-autorización especificado, si no se ha especificado ninguna de las
palabras clave USER, GROUP o ROLE, para todas las filas del objeto
especificado en la vista de catálogos de SYSCAT.ROLEAUTH en la que el
otorgado es nombre-autorización:
– Si GRANTEETYPE es 'U', se asume USER.
– Si GRANTEETYPE es 'G', se asume GROUP.
– Si GRANTEETYPE es 'R', se asume ROLE.
– Si GRANTEETYPE no tiene el mismo valor, se devuelve un error (SQLSTATE
56092.
v El nombre-rol no debe identificar un rol o un rol que contenga nombre-rol, si el rol
tiene privilegio EXECUTE sobre una rutina o privilegio USAGE sobre una
secuencia y un objeto SQL que no sea un paquete depende de la rutina o
secuencia (SQLSTATE 42893). El propietario del objeto SQL es nombre-autorización
o cualquier usuario que sea miembro de nombre-autorización, donde
nombre-autorización es un rol.
Notas
v Si se revoca un rol de un nombre-autorización o de PUBLIC, todos los privilegios
que retiene el rol ya no están a disposición del nombre-autorización o de PUBLIC
a través de dicho rol.
v La revocación de un rol no revoca necesariamente la posibilidad de realizar una
acción concreta por medio de un privilegio otorgado a dicho rol. Un usuario
puede proseguir si PUBLIC, un grupo al que pertenezca el usuario u otro rol
otorgado al usuario tienen otros privilegios o si el usuario tiene un nivel de
autorización más alto como, por ejemplo, DBADM.
Ejemplos
v Ejemplo 1: Revoque el rol INTERN del rol DOCTOR y el rol DOCTOR del rol
SPECIALIST.
REVOKE ROLE INTERN FROM ROLE DOCTOR
v Ejemplo 3: Revoque el rol SPECIALIST del usuario BOB y del grupo TORONTO.
REVOKE ROLE SPECIALIST
FROM USER BOB, GROUP TORONTO BY ALL
Sentencias 1249
REVOKE (privilegios de rutina)
Invocación
Autorización
Sintaxis
REVOKE EXECUTE ON designador-función
FUNCTION *
esquema.
designador-método
METHOD * FOR nombre-tipo
*
esquema.
designador-procedimiento
PROCEDURE *
esquema.
,
BY ALL
FROM nombre-autorización RESTRICT
USER
GROUP
ROLE
PUBLIC
designador-función:
FUNCTION nombre-función
( )
,
tipo-datos
SPECIFIC FUNCTION nombre-específico
designador-método:
designador-procedimiento:
PROCEDURE nombre-procedimiento
( )
,
tipo-datos
SPECIFIC PROCEDURE nombre-específico
Descripción
EXECUTE
Revoca el privilegio para ejecutar la función, el método o el procedimiento
definido por el usuario que se identifica.
designador-función
Identifica de forma exclusiva la función a la que se revoca el privilegio. Para
obtener más información, consulte el apartado “Designadores de función,
método y procedimiento” en la página 22.
FUNCTION esquema.*
Identifica el otorgamiento explícito para todas las funciones existentes y futuras
del esquema. La revocación del privilegio esquema.* no revoca ninguno de los
privilegios que se han otorgado para una función específica. En las sentencias
de SQL dinámico, si no se especifica un esquema, se utilizará el esquema del
registro especial CURRENT SCHEMA. En las sentencias de SQL estático, si no
se especifica un esquema, se utilizará el esquema de la opción de
precompilación/enlace QUALIFIER.
designador-método
Identifica de forma exclusiva el método al que se revoca el privilegio. Para
obtener más información, consulte el apartado “Designadores de función,
método y procedimiento” en la página 22.
METHOD *
Identifica el otorgamiento explícito para todos los métodos existentes y futuros
para el tipo nombre-tipo. La revocación del privilegio * no revoca ninguno de
los privilegios que se han otorgado para un método específico.
FOR nombre-tipo
Especifica el nombre del tipo en el que se encuentra el método
especificado. El nombre debe identificar un tipo que ya esté descrito en el
catálogo (SQLSTATE 42704). En las sentencias de SQL dinámico, el valor
del registro especial CURRENT SCHEMA se utiliza como calificador de un
nombre de tipo no calificado. En las sentencias de SQL estático, la opción
de precompilación/enlace QUALIFIER especifica implícitamente el
calificador para los nombres de tipo no calificados. Para identificar el
otorgamiento explícito para todos los métodos existentes y futuros para
todos los tipos existentes y futuros del esquema, puede utilizarse un
asterisco (*) en lugar del nombre-tipo. La revocación del privilegio mediante
Sentencias 1251
REVOKE (privilegios de rutina)
Normas
v No es posible revocar el privilegio EXECUTE para una función o método que se
ha definido con el esquema 'SYSIBM' o 'SYSFUN' (SQLSTATE 42832).
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
Notas
v Si un paquete depende de una rutina (rol, método o procedimiento) y se revoca
el privilegio EXECUTE sobre dicha rutina de PUBLIC, un usuario o un rol, el
paquete se convierte en no operativo si la rutina es una función o método y se
convierte en no válido si la rutina es un procedimiento, a menos que el
propietario del paquete todavía tenga el privilegio EXECUTE sobre la rutina. El
propietario del paquete todavía tiene el privilegio EXECUTE si:
– Se ha otorgado explícitamente el privilegio EXECUTE al propietario del
paquete
– El propietario del paquete es miembro de un rol que tiene el privilegio
EXECUTE
– Se ha otorgado el privilegio EXECUTE a PUBLIC
Dado que los privilegios de grupo no se consideran para los paquetes estáticos,
el paquete se convierte en no operativo (en el caso de una función o de un
método) o en no válido (en el caso de un procedimiento) incluso si un grupo al
que pertenece el propietario del paquete tiene el privilegio EXECUTE.
Ejemplos
v Ejemplo 1: Revoque el privilegio EXECUTE para la función CALC_SALARY del
usuario JONES. Se da por supuesto que, en el esquema, sólo existe una función
con el nombre de función CALC_SALARY.
REVOKE EXECUTE ON FUNCTION CALC_SALARY FROM JONES RESTRICT
v Ejemplo 2: Revoque el privilegio EXECUTE para el procedimiento
VACATION_ACCR de todos los usuarios del servidor actual.
REVOKE EXECUTE ON PROCEDURE VACATION_ACCR FROM PUBLIC RESTRICT
v Ejemplo 3: Revoque el privilegio EXECUTE para la función NEW_DEPT_HIRES
de HR (Recursos humanos). La función tiene dos parámetros de entrada de tipo
INTEGER y CHAR(10) respectivamente. Se da por supuesto que el esquema
tiene más de una función denominada NEW_DEPT_HIRES.
REVOKE EXECUTE ON FUNCTION NEW_DEPT_HIRES (INTEGER, CHAR(10))
FROM HR RESTRICT
v Ejemplo 4: Revoque el privilegio EXECUTE para el método SET_SALARY para el
tipo EMPLOYEE del usuario Jones.
REVOKE EXECUTE ON METHOD SET_SALARY FOR EMPLOYEE FROM JONES RESTRICT
Sentencias 1253
REVOKE (privilegios de esquema)
Invocación
Autorización
Sintaxis
,
,
BY ALL
FROM nombre-autorización
USER
GROUP
ROLE
PUBLIC
Descripción
ALTERIN
Revoca el privilegio para modificar o comentar los objetos del esquema.
CREATEIN
Revoca el privilegio para crear objetos en el esquema.
DROPIN
Revoca el privilegio para descartar objetos en el esquema.
ON SCHEMA nombre-esquema
Especifica el nombre del esquema en el que se deben revocar los privilegios.
FROM
Indica de quién se deben revocar los privilegios.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol.
nombre-autorización,...
Lista los ID de autorización de uno o varios usuarios, grupos o roles.
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Para todas las filas del objeto especificado en la vista de catálogo
SYSCAT.SCHEMAAUTH en la que el otorgado es nombre-autorización:
- Si todas las filas tienen un GRANTEETYPE que es 'U', se supone USER.
- Si todas las filas tienen un GRANTEETYPE que es 'G', se supone GROUP.
- Si todas las filas tienen un GRANTEETYPE que es 'R', se supone ROLE.
- Si todas las filas no tienen el mismo valor para GRANTEETYPE, se
devuelve un error (SQLSTATE 56092).
Notas
v La revocación de un privilegio específico no revoca necesariamente la
posibilidad de realizar la acción. Un usuario puede seguir realizando una tarea
si PUBLIC, un grupo o un rol tienen otros privilegios o si el usuario tiene un
grado de autorización más alto como, por ejemplo, DBADM.
Ejemplos
v Ejemplo 1: Suponiendo que USER4 sea sólo un usuario y no un grupo, revoque
el privilegio para crear objetos en el esquema DEPTIDX del usuario USER4.
REVOKE CREATEIN ON SCHEMA DEPTIDX FROM USER4
v Ejemplo 2: Revoque el privilegio de descartar objetos en el esquema LUNCH del
usuario CHEF y del grupo WAITERS.
REVOKE DROPIN ON SCHEMA LUNCH
FROM USER CHEF, GROUP WAITERS
Sentencias 1255
REVOKE (etiqueta de seguridad)
Invocación
Autorización
Sintaxis
REVOKE SECURITY LABEL nombre-etiqueta-seguridad
FROM nombre-autorización
USER
GROUP
ROLE
Descripción
SECURITY LABEL nombre-etiqueta-seguridad
Revoca la etiqueta de seguridad nombre-etiqueta-seguridad. El nombre debe
calificarse con una política de seguridad (SQLSTATE 42704) y debe identificar
una etiqueta de seguridad que exista en el servidor actual (SQLSTATE 42704) y
que esté retenida por nombre-autorización (SQLSTATE 42504).
FROM
Especifica a quién se le revoca la etiqueta de seguridad especificada.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol. El nombre
de rol debe existir en el servidor actual (SQLSTATE 42704).
nombre-autorización,...
Lista los ID de autorización de uno o más usuarios, grupos o roles.
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
Ejemplo
Sentencias 1257
REVOKE (privilegios de secuencia)
Invocación
Autorización
Sintaxis
,
,
BY ALL RESTRICT
FROM nombre-autorización
USER
GROUP
ROLE
PUBLIC
Descripción
ALTER
Revoca el privilegio de cambiar las propiedades de una secuencia o reiniciar la
generación de números de secuencia mediante la sentencia ALTER
SEQUENCE.
USAGE
Revoca el privilegio de poder hacer referencia a una secuencia mediante una
expresión-nextval o expresión-prevval.
ON SEQUENCE nombre-secuencia
Identifica la secuencia para la que van a revocarse los privilegios especificados.
El nombre de la secuencia, incluido un calificador de esquema implícito o
explícito, debe identificar de forma exclusiva a una secuencia existente en el
servidor actual. Si no existe ninguna secuencia con este nombre, se devuelve
un error (SQLSTATE 42704).
FROM
Especifica a quién se revocarán los privilegios.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol.
nombre-autorización,...
Lista los ID de autorización de uno o varios usuarios, grupos o roles.
La lista de los ID de autorización no puede incluir el ID de autorización
del usuario que emite la sentencia (SQLSTATE 42502).
PUBLIC
Revoca los privilegios especificados de PUBLIC.
BY ALL
Revoca todos los privilegios especificados de todos los usuarios especificados a
los que se han otorgado explícitamente tales privilegios, independientemente
de qué usuario los ha otorgado. Éste es el comportamiento por omisión.
RESTRICT
Esta palabra clave opcional indica que la sentencia dará error si se revoca
algún objeto que dependa del privilegio.
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Para todas las filas del objeto especificado en la vista de catálogo
SYSCAT.SEQUENCEAUTH en la que el otorgado es nombre-autorización:
- Si todas las filas tienen un GRANTEETYPE que es 'U', se supone USER.
- Si todas las filas tienen un GRANTEETYPE que es 'G', se supone GROUP.
- Si todas las filas tienen un GRANTEETYPE que es 'R', se supone ROLE.
- Si todas las filas no tienen el mismo valor para GRANTEETYPE, se
devuelve un error (SQLSTATE 56092).
Notas
v Al revocar un privilegio sobre una secuencia del ID de autorización bajo el cual
se ha vinculado un paquete, el paquete se convierte en no válido si el ID de
autorización no sigue teniendo el privilegio sobre la secuencia a través de
diferentes medios como, por ejemplo, ser miembro de un rol que tiene el
privilegio.
v La revocación de un privilegio específico no elimina necesariamente la capacidad
de realizar una acción. Un usuario puede continuar si PUBLIC o un grupo al
que pertenezca el usuario tienen otros privilegios, o si el usuario tiene un nivel
de autorización más alto como, por ejemplo, DBADM.
Ejemplos
v Ejemplo 1: Revoque al usuario ENGLES el privilegio USAGE para una secuencia
denominada GENERATE_ID. Hay una fila en la vista de catálogo
SYSCAT.SEQUENCEAUTH para esta secuencia y el destinatario de la operación
de otorgar y el valor de GRANTEETYPE es U.
REVOKE USAGE ON SEQUENCE GENERATE_ID FROM ENGLES
v Ejemplo 2: Revoque los privilegios de modificación en la secuencia
GENERATE_ID que se han otorgado previamente a todos los usuarios locales.
(Lo otorgado a usuarios específicos no se ve afectado.)
REVOKE ALTER ON SEQUENCE GENERATE_ID FROM PUBLIC
v Ejemplo 3: Revoque todos los privilegios en la secuencia GENERATE_ID de los
usuarios PELLOW y MLI y del grupo PLANNERS.
Sentencias 1259
REVOKE (privilegios de secuencia)
Invocación
Autorización
Sintaxis
REVOKE PASSTHRU ON SERVER nombre-servidor FROM
,
BY ALL
nombre-autorización
USER
GROUP
ROLE
PUBLIC
Descripción
SERVER nombre-servidor
Nombra la fuente de datos para la cual se está revocando el privilegio para
utilizarse en modalidad de paso a través. nombre-servidor debe identificar una
fuente de datos que esté descrita en el catálogo.
FROM
Especifica a quién se revoca el privilegio.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol.
nombre-autorización,...
Lista los ID de autorización de uno o varios usuarios, grupos o roles.
La lista de los ID de autorización no puede incluir el ID de autorización
del usuario que emite la sentencia (SQLSTATE 42502).
PUBLIC
Revoca de PUBLIC el privilegio de realizar un paso a través de
nombre-servidor.
Sentencias 1261
REVOKE (privilegios de servidor)
BY ALL
Revoca el privilegio de todos los usuarios especificados a los que se ha
otorgado explícitamente ese privilegio, independientemente de qué usuario lo
ha otorgado. Este es el comportamiento por omisión.
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Para todas las filas del objeto especificado en la vista de catálogo
SYSCAT.PASSTHRUAUTH en la que el otorgado es nombre-autorización:
- Si todas las filas tienen un GRANTEETYPE que es 'U', se supone USER.
- Si todas las filas tienen un GRANTEETYPE que es 'G', se supone GROUP.
- Si todas las filas tienen un GRANTEETYPE que es 'R', se supone ROLE.
- Si todas las filas no tienen el mismo valor para GRANTEETYPE, se
devuelve un error (SQLSTATE 56092).
Ejemplos
v Ejemplo 1: Revoque el privilegio que USER6 tiene para utilizar la modalidad de
paso a través para la fuente de datos MOUNTAIN.
REVOKE PASSTHRU ON SERVER MOUNTAIN FROM USER USER6
v Ejemplo 2: Revoque el privilegio que el grupo D024 tiene para usar la modalidad
de paso a través para la fuente de datos EASTWING.
REVOKE PASSTHRU ON SERVER EASTWING FROM GROUP D024
Invocación
Autorización
Sintaxis
USER nombre-autorización
GROUP
Descripción
SETSESSIONUSER ON
Revoca el privilegio de asumir la identidad de un nuevo ID de autorización.
USER nombre-autorización-sesión
Especifica el ID de autorización que el nombre-autorización es capaz de asumir,
mediante la sentencia SET SESSION AUTHORIZATION. El
nombre-autorización-sesión debe identificar a un usuario que el
nombre-autorización pueda suponer, no un grupo (SQLSTATE 42504).
PUBLIC
Especifica que se revocarán todos los privilegios para configurar la
autorización de la sesión.
FROM
Especifica a quién se revoca el privilegio.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
nombre-autorización,...
Lista los ID de autorización de uno o varios usuarios o grupos.
La lista de los ID de autorización no puede incluir el ID de autorización
del usuario que emite la sentencia (SQLSTATE 42502).
Sentencias 1263
REVOKE (privilegio SETSESSIONUSER)
Ejemplos
v Ejemplo 1: El usuario PAUL tiene el privilegio de configurar la autorización de la
sesión a WALID, y por ello ejecutar las sentencias de SQL como usuario WALID.
La sentencia siguiente revoca ese privilegio.
REVOKE SETSESSIONUSER ON USER WALID
FROM USER PAUL
v Ejemplo 2: El usuario GUYLAINE tiene el privilegio de configurar la autorización
de la sesión a BOBBY, RICK o KEVIN, y por ello ejecutar las sentencias de SQL
como BOBBY, RICK o KEVIN. La sentencia siguiente revoca el privilegio de
utilizar dos de esos ID de autorización. Después de que se ejecute esta sentencia,
GUYLAINE sólo podrá configurar la autorización de la sesión a KEVIN.
REVOKE SETSESSIONUSER ON USER BOBBY, USER RICK
FROM USER GUYLAINE
v Ejemplo 3: El grupo ACCTG y el usuario WALID pueden configurar la
autorización de la sesión a cualquier ID de autorización. La sentencia siguiente
revoca ese privilegio de ACCTG y WALID.
REVOKE SETSESSIONUSER ON PUBLIC
FROM USER WALID, GROUP ACCTG
Invocación
Autorización
Sintaxis
REVOKE USE OF TABLESPACE nombre-espacio-tablas FROM
,
BY ALL
nombre-autorización
USER
GROUP
ROLE
PUBLIC
Descripción
USE
Revoca el privilegio para especificar, de forma explícita o por omisión, el
espacio de tablas al crear una tabla.
OF TABLESPACE nombre-espacio-tablas
Identifica el espacio de tablas para el que debe revocar el privilegio USE. El
espacio de tablas no puede ser SYSCATSPACE (SQLSTATE 42838) ni un
espacio de tablas temporal del sistema (SQLSTATE 42809).
FROM
Especifica a quién se revoca el privilegio USE.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol.
nombre-autorización
Lista los ID de autorización de uno o varios usuarios, grupos o roles.
La lista de los ID de autorización no puede incluir el ID de autorización
del usuario que emite la sentencia (SQLSTATE 42502).
Sentencias 1265
REVOKE (privilegios de espacio de tablas)
PUBLIC
Revoca el privilegio USE a PUBLIC.
BY ALL
Revoca el privilegio de todos los usuarios especificados a los que se ha
otorgado explícitamente ese privilegio, independientemente de qué usuario lo
ha otorgado. Este es el comportamiento por omisión.
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Para todas las filas del objeto especificado en la vista de catálogo
SYSCAT.TBSPACEAUTH en la que el otorgado es nombre-autorización:
- Si todas las filas tienen un GRANTEETYPE que es 'U', se supone USER.
- Si todas las filas tienen un GRANTEETYPE que es 'G', se supone GROUP.
- Si todas las filas tienen un GRANTEETYPE que es 'R', se supone ROLE.
- Si todas las filas no tienen el mismo valor para GRANTEETYPE, se
devuelve un error (SQLSTATE 56092).
Notas
v La revocación del privilegio USE no revoca necesariamente la capacidad para
crear tablas en ese espacio de tablas. Un usuario puede todavía crear tablas en
ese espacio de tablas si el privilegio USE se otorga a PUBLIC o a un grupo, o si
el usuario tiene una autorización de nivel superior, tal como DBADM.
Ejemplo
Revocar el privilegio del usuario BOBBY para crear tablas en el espacio de tablas
PLANS.
Invocación
Autorización
Sintaxis
PRIVILEGES TABLE
REVOKE ALL ON nombre-tabla
, nombre-vista
apodo
ALTER
CONTROL
DELETE
INDEX
INSERT
REFERENCES
SELECT
UPDATE
,
BY ALL
FROM nombre-autorización
USER
GROUP
ROLE
PUBLIC
Descripción
ALL o ALL PRIVILEGES
Revoca todos los privilegios (excepto CONTROL) del nombre-autorización
para las tablas, vistas o apodos especificados.
Si no se utiliza ALL, debe utilizarse una o varias de las palabras clave listadas
en la pila de opciones (desde ALTER hasta UPDATE). Cada palabra clave revoca el
privilegio descrito, pero sólo si se aplica a las tablas o vistas nombradas en la
cláusula ON. No se debe especificar la misma palabra clave más de una vez.
Sentencias 1267
REVOKE (privilegios de tabla, vista o apodo)
ALTER
Revoca el privilegio para añadir columnas a la definición de la tabla base; crear
o descartar una clave primaria o restricción de unicidad en la tabla; crear o
descartar una clave foránea en la tabla; añadir/cambiar un comentario en la
tabla, vista o apodo; crear o descartar una restricción de comprobación; crear
un activador; añadir, restablecer o descartar una opción de columna para un
apodo; o cambiar nombres de columna de apodo o tipos de datos.
CONTROL
Revoca la capacidad para descartar la tabla base, vista o apodo y para ejecutar
el programa de utilidad RUNSTATS sobre la tabla y los índices.
La revocación del privilegio CONTROL en un nombre-autorización no revoca
otros privilegios otorgados al usuario de dicho objeto.
DELETE
Revoca el privilegio para suprimir filas de la tabla, de la vista que puede
actualizarse o del apodo.
INDEX
Revoca el privilegio para crear un índice en la tabla o una especificación de
índice en el apodo. El creador de un índice o de una especificación de índice
tiene automáticamente el privilegio CONTROL en el índice o en la
especificación de índice (que autoriza al creador a descartar el índice o la
especificación de índice). Asimismo, el creador mantiene este privilegio incluso
si se revoca el privilegio INDEX.
INSERT
Revoca los privilegios para insertar filas en la tabla, en la vista que puede
actualizarse o en el apodo y para ejecutar el programa de utilidad IMPORT.
REFERENCES
Revoca el privilegio para crear o descartar una clave foránea que haga
referencia a la tabla como padre. Cualquier privilegio REFERENCES de nivel
de columna también se revoca.
SELECT
Revoca el privilegio para recuperar filas de la tabla o vista, para crear una vista
en una tabla y para ejecutar el programa de utilidad EXPORT sobre la tabla o
vista.
La revocación del privilegio SELECT puede provocar que algunas vistas se
marquen como no operativas. (Para obtener información acerca de las vistas no
operativas, consulte “CREATE VIEW”.)
UPDATE
Revoca el privilegio para actualizar filas en la tabla, en la vista que puede
actualizarse o en el apodo. Cualquier privilegio UPDATE de nivel de columna
también se revoca.
ON TABLE nombre-tabla o nombre-vista o apodo
Especifica la tabla, vista o apodo en los que se deben revocar los privilegios. El
nombre-tabla no puede ser una tabla temporal declarada (SQLSTATE 42995).
FROM
Indica de quién se deben revocar los privilegios.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica un nombre de grupo.
ROLE
Especifica que el nombre-autorización identifica un nombre de rol.
nombre-autorización,...
Lista los ID de autorización de uno o varios usuarios, grupos o roles.
La lista de los ID de autorización no puede incluir el ID de autorización
del usuario que emite la sentencia (SQLSTATE 42502).
PUBLIC
Revoca los privilegios de PUBLIC.
BY ALL
Revoca todos los privilegios indicados de todos los usuarios especificados a los
que se han otorgado explícitamente tales privilegios, independientemente de
qué usuario los ha otorgado. Este es el comportamiento por omisión.
Normas
v Para cada nombre-autorización especificado, si no se especifica USER, GROUP ni
ROLE, entonces:
– Para todas las filas del objeto especificado de las vistas de catálogo
SYSCAT.TABAUTH y SYSCAT.COLAUTH en las que el otorgado es
nombre-autorización:
- Si todas las filas tienen un GRANTEETYPE que es 'U', se supone USER.
- Si todas las filas tienen un GRANTEETYPE que es 'G', se supone GROUP.
- Si todas las filas tienen un GRANTEETYPE que es 'R', se supone ROLE.
- Si todas las filas no tienen el mismo valor para GRANTEETYPE, se
devuelve un error (SQLSTATE 56092).
Notas
v Si se revoca un privilegio del nombre-autorización que es el propietario de la vista
(como se ha registrado en la columna OWNER en SYSCAT.VIEWS), dicho
privilegio también se revoca de las vistas dependientes.
v Si el propietario de la vista pierde un privilegio SELECT para algún objeto del
que depende la definición de vista (o si se descarta un objeto del que depende la
definición de vista o se convierte en no operativo en el caso de otra vista), la
vista quedará no operativa.
Sin embargo, si un usuario que tiene autorización ACCESSCTRL o SECADM
revoca explícitamente todos los privilegios del propietario sobre la vista, el
registro de OWNER no aparecerá en SYSCAT.TABAUTH, pero a la vista no le
sucederá nada, seguirá estando operativa.
v Los privilegios en vistas no operativas no pueden revocarse.
v Un paquete puede convertirse en no válido cuando el ID de autorización en el
que se ha vinculado el paquete pierde un privilegio sobre un objeto del que
depende el paquete. El privilegio puede perderse de una de las formas
siguientes:
– El privilegio se revoca desde el ID de autorización
– El privilegio se revoca desde un rol del cual es miembro el ID de autorización
– El privilegio se revoca desde PUBLIC
Un paquete continúa siendo no válido hasta que se ejecuta satisfactoriamente
una operación de enlace lógico o de volver a enlazar lógicamente en la
aplicación, o la aplicación se ejecuta y el gestor de bases de datos vuelve a
enlazar la aplicación satisfactoriamente (utilizando la información almacenada en
Sentencias 1269
REVOKE (privilegios de tabla, vista o apodo)
los catálogos). Los paquetes marcados como no válidos debido a una revocación
pueden volverse a enlazar satisfactoriamente sin ninguna operación de otorgar
adicional.
Por ejemplo, si un paquete propiedad de USER1 contiene SELECT de la tabla T1
y se revoca el privilegio SELECT para la tabla T1 desde USER1, el paquete se
marcará como no válido. Si se vuelve a otorgar la autorización SELECT, o si el
usuario tiene la autorización DBADM, el paquete se vuelve a enlazar
satisfactoriamente al ejecutarse.
Otro ejemplo es un paquete propiedad de USER1, que es miembro del rol R1. El
paquete contiene SELECT de la tabla T1 y se revoca el privilegio SELECT para la
tabla T1 desde el rol R1. El paquete se marcará como no válido, partiendo de
que USER1 no tiene el privilegio SELECT para la tabla T1 por otros medios.
v Los paquetes, activadores o vistas que incluyen la utilización de OUTER(Z) en la
cláusula FROM dependen de tener el privilegio SELECT en cada subtabla o
subvista de Z. De modo similar, los paquetes, activadores y vistas que incluyen
la utilización de DEREF(Y) donde Y es un tipo de referencia con una vista o
tabla de destino Z dependen de tener un privilegio SELECT en cada subtabla o
subvista de Z. Estos paquetes pueden convertirse en no válidos y las vistas o
activadores pueden pasar a ser no operativos cuando el ID de autorización bajo
el que se han vinculado los paquetes o el propietario de los activadores o vistas
pierde el privilegio SELECT. El privilegio SELECT puede perderse de una de las
formas siguientes:
– El privilegio SELECT se revoca desde el ID de autorización
– El privilegio SELECT se revoca desde un rol del cual es miembro el ID de
autorización
– El privilegio SELECT se revoca desde PUBLIC
v Los privilegios de tabla, vista o apodo no pueden revocarse de un
nombre-autorización con CONTROL en el objeto sin revocar también el privilegio
CONTROL (SQLSTATE 42504).
v La revocación de un privilegio específico no revoca necesariamente la
posibilidad de realizar la acción. Un usuario puede seguir realizando una tarea
si PUBLIC, un grupo o un rol tienen otros privilegios o si el usuario tiene
privilegios como, por ejemplo, ALTERIN para el esquema de una tabla o vista.
v Si el propietario de la tabla de consulta materializada pierde un privilegio
SELECT en una tabla de la que depende la definición de la tabla de consulta
materializada (o si se descarta una tabla de la que depende la definición de la
tabla de consulta materializada), la tabla de consulta materializada se descartará.
Sin embargo, si un usuario con la autorización SECADM o ACCESSCTRL revoca
explícitamente todos los privilegios del propietario sobre la tabla de consulta
materializada, el registro de SYSTABAUTH de OWNER se suprimirá, pero no le
sucederá nada a la tabla de consulta materializada; seguirá estando operativa.
v Revocar privilegios de apodo no tiene efecto sobre los privilegios de objeto de la
fuente de datos (tabla o vista).
v La revocación del privilegio SELECT para una tabla o vista a la que se hace
referencia directa o indirectamente en una función de SQL o cuerpo de método
podría no ejecutarse satisfactoriamente si la función de SQL o el cuerpo de
método no puede descartarse porque algún otro objeto depende de éste
(SQLSTATE 42893).
v La revocación del privilegio SELECT hace que se descarte un cuerpo de método
o de función SQL cuando:
– El propietario del cuerpo de método o de función SQL pierde el privilegio
SELECT para algún objeto del que depende la definición de cuerpo de
Ejemplos
v Ejemplo 1: Revoque el privilegio SELECT en la tabla EMPLOYEE del usuario
ENGLES. Hay una fila en la vista de catálogo SYSCAT.TABAUTH para esta tabla
y el destinatario de la operación de otorgar y el valor de GRANTEETYPE es U.
REVOKE SELECT
ON TABLE EMPLOYEE
FROM ENGLES
v Ejemplo 2: Revoque los privilegios de actualización en la tabla EMPLOYEE que
se han otorgado previamente a todos los usuarios locales. Tenga en cuenta que
no afecta a los usuarios a los que se les ha otorgado de manera específica.
REVOKE UPDATE
ON EMPLOYEE
FROM PUBLIC
v Ejemplo 3: Revoque todos los privilegios en la tabla EMPLOYEE de los usuarios
PELLOW y MLI y del grupo PLANNERS.
REVOKE ALL
ON EMPLOYEE
FROM USER PELLOW, USER MLI, GROUP PLANNERS
v Ejemplo 4: Revoque el privilegio SELECT en la tabla CORPDATA.EMPLOYEE
de un usuario llamado JOHN. Hay una fila en la vista de catálogo
SYSCAT.TABAUTH para esta tabla y el destinatario de la operación de otorgar y
el valor de GRANTEETYPE es U.
REVOKE SELECT
ON CORPDATA.EMPLOYEE FROM JOHN
o
REVOKE SELECT
ON CORPDATA.EMPLOYEE FROM USER JOHN
Sentencias 1271
REVOKE (privilegios de tabla, vista o apodo)
o bien
REVOKE SELECT
ON CORPDATA.EMPLOYEE FROM GROUP JOHN
v Ejemplo 6: Revoque el privilegio SHAWN de usuario para crear una
especificación de índice en el apodo ORAREM1.
REVOKE INDEX
ON ORAREM1 FROM USER SHAWN
Invocación
Autorización
Sintaxis
REVOKE USAGE ON WORKLOAD nombre-carga-trabajo
,
BY ALL
FROM nombre-autorización
USER
GROUP
ROLE
PUBLIC
Descripción
USAGE
Revoca el privilegio para utilizar una carga de trabajo.
ON WORKLOAD nombre-carga-trabajo
Identifica la carga de trabajo en la que va a revocarse el privilegio USAGE.
Este nombre consta de una sola parte. El nombre-carga-trabajo debe identificar
una carga de trabajo que exista en el servidor actual (SQLSTATE 42704). El
nombre no puede ser 'SYSDEFAULTADMWORKLOAD' (SQLSTATE 42832).
FROM
Especifica a quién se le revoca el privilegio USAGE.
USER
Especifica que el nombre-autorización identifica a un usuario.
GROUP
Especifica que el nombre-autorización identifica a un grupo.
ROLE
Especifica que el nombre-autorización identifique un rol existente en el
servidor actual (SQLSTATE 42704).
nombre-autorización,...
Lista los ID de autorización de uno o más usuarios, grupos o roles. La lista
de los ID de autorización no puede incluir el ID de autorización del
usuario que emite la sentencia (SQLSTATE 42502).
Sentencias 1273
REVOKE (privilegios de carga de trabajo)
PUBLIC
Revoca el privilegio USAGE de PUBLIC.
BY ALL
Revoca el privilegio USAGE de todos los usuarios especificados a los que se ha
otorgado explícitamente ese privilegio, independientemente de qué usuario lo
ha otorgado. Este es el comportamiento por omisión.
Normas
v Por cada nombre-autorización especificado, si no se ha especificado ninguna de las
palabras clave USER, GROUP o ROLE, para todas las filas del objeto
especificado en la vista de catálogos de SYSCAT.WORKLOADAUTH en la que el
otorgado es nombre-autorización:
– Si GRANTEETYPE es 'U', se asume USER.
– Si GRANTEETYPE es 'G', se asume GROUP.
– Si GRANTEETYPE es 'R', se asume ROLE.
– Si GRANTEETYPE no tiene el mismo valor, se devuelve un error (SQLSTATE
56092.
Notas
v La sentencia REVOKE no surte efecto hasta después de que se confirme, incluso
para la conexión que emite la sentencia.
Ejemplo
Revoque el privilegio para utilizar la carga de trabajo CAMPAIGN del usuario
LISA.
REVOKE USAGE ON WORKLOAD CAMPAIGN FROM USER LISA
Invocación
Autorización
Sintaxis
BY ALL
REVOKE USAGE ON XSROBJECT nombre-objetoxsr FROM PUBLIC
Descripción
ON XSROBJECT nombre-objetoxsr
Este nombre identifica el objeto XSR sobre el que se ha revocado el privilegio
USAGE. El nombre-objetoxsr (incluido el calificador de esquema implícito o
explícito) debe designar de forma exclusiva un objeto XSR existente en el
servidor actual. Si no existe ningún objeto XSR con este nombre en el esquema
especificado, se producirá un error (SQLSTATE 42704).
FROM PUBLIC
Revoca el privilegio USAGE de PUBLIC.
BY ALL
Revoca todos los privilegios indicados de todos los usuarios especificados a los
que se han otorgado explícitamente tales privilegios, independientemente de
qué usuario los ha otorgado. Este es el comportamiento por omisión.
Ejemplo
Sentencias 1275
ROLLBACK
ROLLBACK
La sentencia ROLLBACK se utiliza para restituir los cambios que se han hecho en
la base de datos dentro de una unidad de trabajo o punto de salvaguarda.
Invocación
Autorización
No se necesita.
Sintaxis
WORK
ROLLBACK
TO SAVEPOINT
nombre-punto-salvaguarda
Descripción
Notas
v Cuando se ejecuta un ROLLBACK de la unidad de trabajo se liberan todos los
bloqueos mantenidos. Se cierran todos los cursores abiertos. Se liberan todos los
localizadores de LOB.
v La ejecución de la sentencia ROLLBACK no afecta a las sentencias SET que
cambian los valores del registro especial ni a la sentencia RELEASE.
v Si el programa finaliza de forma anómala, la unidad de trabajo se retrotrae
implícitamente.
v El almacenamiento en antememoria de sentencias se ve afectado por la
operación de retrotracción.
v El efecto que una sentencia ROLLBACK TO SAVEPOINT tiene sobre los cursores
depende de las sentencias contenidas en el punto de salvaguarda.
– Si el punto de salvaguarda contiene un DDL del cual depende un cursor, el
cursor se marca como no válido. Los intentos para utilizar ese cursor dan
lugar a un error (SQLSTATE 57007).
– En otro caso:
- Si se hace referencia al cursor en el punto de salvaguarda, el cursor
permanece abierto y se coloca delante de la primera fila lógica de la tabla
de resultados. (FETCH debe realizarse antes de emitirse una sentencia
UPDATE o DELETE con posición.)
- En otro caso, el cursor no queda afectado por ROLLBACK TO SAVEPOINT
(permanece abierto y posicionado).
v Las sentencias de SQL dinámico preparadas en un paquete vinculado con la
opción KEEPDYNAMIC YES se conservan en el contexto SQL después de una
sentencia ROLLBACK. La sentencia se puede volver a preparar de forma
implícita, como resultado de operaciones DDL que se retrotraen dentro de la
unidad de trabajo.
v Las sentencias de SQL dinámico preparadas en un paquete vinculado con
KEEPDYNAMIC NO se elimina del contexto SQL tras una operación de retrotracción.
La sentencia debe volver a prepararse antes de que se pueda ejecutar en una
transacción nueva.
Sentencias 1277
ROLLBACK
Ejemplo
SAVEPOINT
Utilice la sentencia SAVEPOINT para definir un punto de salvaguarda dentro de
una transacción.
Invocación
Autorización
No se necesita.
Sintaxis
SAVEPOINT nombre-punto-salvaguarda
UNIQUE
Descripción
nombre-punto-salvaguarda
Especifica el nombre de un punto de salvaguarda. El nombre-puntosalvaguarda
no puede empezar por 'SYS' (SQLSTATE 42939). Si ya se ha definido un punto
de salvaguarda con este nombre como UNIQUE dentro de este nivel de punto
de salvaguarda, se devuelve un error (SQLSTATE 3B501).
UNIQUE
Especifica que la aplicación no tiene la intención de volver a utilizar este
nombre de punto de salvaguarda mientras la salvaguarda esté activa en el
nivel de salvaguarda actual. Si el nombre-puntosalvaguarda ya existe en este
nivel de punto de salvaguarda, se devuelve un error (SQLSTATE 3B501).
ON ROLLBACK RETAIN CURSORS
Especifica la respuesta del sistema al realizar una retrotracción hasta este punto
de salvaguarda, con respecto a las sentencias OPEN CURSOR procesadas
después de la sentencia SAVEPOINT. Esta cláusula indica que, siempre que es
posible, los cursores no se ven afectados por una retrotracción en una
operación de punto de salvaguarda. Para situaciones en las que los cursores se
vean afectados por la retrotracción en el punto de salvaguarda, consulte
“ROLLBACK”.
ON ROLLBACK RETAIN LOCKS
Especifica la respuesta del sistema al realizar una retrotracción hasta este punto
de salvaguarda, con respecto a los bloqueos adquiridos después de definir el
punto de salvaguarda. No se hace un seguimiento de los bloqueos adquiridos
a partir del punto de salvaguarda y no se retrotraen (liberan) al retrotraer hasta
el punto de salvaguarda.
Normas
v Las sentencias relacionadas con el punto de salvaguarda no se deben utilizar en
definiciones de activador (SQLSTATE 42987).
Sentencias 1279
SAVEPOINT
Notas
v Cuando se ha emitido una sentencia SAVEPOINT, las operaciones para realizar
inserciones, actualizaciones o supresiones en los apodos no están permitidas.
v La omisión de la cláusula UNIQUE especifica que el otro punto de salvaguarda
puede reutilizar el nombre-puntosalvaguarda en el nivel de punto de salvaguarda.
Si un punto de salvaguarda del mismo nombre ya existe en el nivel de punto de
salvaguarda, el punto de salvaguarda existente se destruye y se crea un nuevo
punto de salvaguarda con el mismo nombre en el punto actual del proceso. El
nuevo punto de salvaguarda se considera como el último punto de salvaguarda
establecido por la aplicación. Tenga en cuenta que la destrucción de un punto de
salvaguarda mediante la reutilización de su nombre por otro punto de
salvaguarda simplemente destruye ese punto de salvaguarda y no libera ningún
punto de salvaguarda establecido después del punto de salvaguarda destruido.
Estos puntos de salvaguarda subsiguientes sólo pueden liberarse mediante la
sentencia RELEASE SAVEPOINT, que libera el punto de salvaguarda nombrado
y todos los puntos de salvaguarda establecidos después del punto de
salvaguarda nombrado.
v Si se especifica la cláusula UNIQUE, el nombre-puntosalvaguarda sólo puede
reutilizarse después de que se haya liberado un punto de salvaguarda existente
con el mismo nombre.
v En un punto de salvaguarda, si un programa de utilidad, una sentencia de SQL
o un mandato DB2 realiza confirmaciones intermitentes durante el proceso, el
punto de salvaguarda se liberará implícitamente.
Ejemplo
En este momento, la tabla DEPARTMENT existe con las filas A20, B30, C40 y R50.
Si ahora emite:
ROLLBACK TO SAVEPOINT SAVEPOINT3
la tabla DEPARTMENT todavía existirá, pero las filas insertadas desde que se ha
establecido SAVEPOINT1 (B30 y C40) ya no estarán en la tabla.
Sentencias 1281
SELECT
SELECT
La sentencia SELECT es una forma de consulta.
SELECT INTO
La sentencia SELECT INTO produce una tabla de resultados que consta de como
máximo una fila y asigna los valores de dicha fila a las variables del lenguaje
principal.
Invocación
Autorización
Para cada variable global utilizada como destino de asignación, los privilegios del
ID de autorización de la sentencia deben incluir una de las autorizaciones
siguientes:
v el privilegio WRITE sobre la variable global que no está definida en un módulo
v el privilegio EXECUTE sobre el módulo de la variable global que está definida
en un módulo
Sintaxis
,
cláusula-where cláusula-group-by cláusula-having
Sentencias 1283
SELECT INTO
cláusula-order-by cláusula-fetch-first
OF nombre-columna
destino-asignación
nombre-variable-global
nombre-variable-lenguaje-principal
nombre-parámetro-SQL
nombre-variable-SQL
nombre-variable-transición
nombre-variable-matriz [ índice-matriz ]
referencia-campo
Descripción
Normas
v Las variables globales no se pueden asignar dentro de activadores que no se han
definido mediante una sentencia de SQL compuesto (compilado), funciones que
Sentencias 1285
SELECT INTO
Notas
v Alternativas de sintaxis: para mantener la coherencia con consultas SQL:
– Puede especificarse FOR FETCH ONLY en lugar de FOR READ ONLY
Ejemplos
v Ejemplo 1: Este ejemplo C coloca el salario máximo de la tabla EMP en la
variable del lenguaje principal MAXSALARY.
EXEC SQL SELECT MAX(SALARY)
INTO :MAXSALARY
FROM EMP;
v Ejemplo 2: Este ejemplo C coloca la fila del empleado 528671 (de la tabla EMP)
en las variables del lenguaje principal.
EXEC SQL SELECT * INTO :h1, :h2, :h3, :h4
FROM EMP
WHERE EMPNO = ’528671’;
v Ejemplo 3: Este ejemplo SQLJ coloca la fila del empleado 528671 (de la tabla
EMP) en las variables del lenguaje principal. Esa fila se actualizará más tarde
con una actualización de búsqueda y se debe bloquear cuando se ejecuta la
consulta.
#sql { SELECT * INTO :FIRSTNAME, :LASTNAME, :EMPNO, :SALARY
FROM EMP
WHERE EMPNO = ’528671’
FOR UPDATE };
v Ejemplo 4: este ejemplo C coloca el salario máximo de la tabla EMP en la variable
global GV_MAXSALARY.
EXEC SQL SELECT MAX(SALARY)
INTO GV_MAXSALARY
FROM EMP;
Invocación
Autorización
No se necesita.
Sintaxis
=
SET COMPILATION ENVIRONMENT variable-lenguaje-principal
Descripción
variable-lenguaje-principal
Una variable de tipo BLOB que contiene un entorno de compilación
proporcionado por un supervisor de sucesos. No puede establecerse en nulo. Si
una variable-lenguaje-principal tiene asociada una variable de indicador, el valor
de dicha variable de indicador no debe indicar un valor nulo (SQLSTATE
42815). Si el formato del entorno de compilación es incorrecto, se devolverá un
error y los valores de la conexión permanecerán sin modificar (SQLSTATE
51040).
Notas
v Para restablecer el entorno de compilación en los valores por omisión originales,
termine y luego reinicie la conexión. Puede conseguir el mismo efecto emitiendo
esta sentencia dentro de una rutina de SQL, de modo que ningún cambio
realizado en los registros especiales se refleje en la conexión al volver de esa
rutina.
v Utilice la función de tabla COMPILATION_ENV a fin de observar los elementos
individuales que contiene el entorno de compilación.
Ejemplo
Establecer el entorno de compilación de la sesión actual en los valores incluidos en
un entorno de compilación capturado anteriormente por un supervisor de sucesos
de punto muerto. Un supervisor de sucesos de punto muerto que se ha creado
especificando la opción WITH DETAILS HISTORY capturará el entorno de
compilación de las sentencias de SQL dinámico. Este entorno capturado es el que
se acepta como entrada en la sentencia.
SET COMPILATION ENVIRONMENT = :hv1
Sentencias 1287
SET CONNECTION
SET CONNECTION
La sentencia SET CONNECTION cambia el estado de una conexión de inactivo a
actual, convirtiendo la ubicación especificada en el servidor actual.
Invocación
Autorización
No se necesita.
Sintaxis
SET CONNECTION nombre-servidor
variable-lenguaje-principal
Descripción
nombre-servidor o variable-lenguaje-principal
Identifica el servidor de aplicaciones mediante el nombre-servidor especificado o
mediante una variable-lenguaje-principal que contenga el nombre-servidor.
Si se especifica una variable-lenguaje-principal, debe ser una variable de serie de
caracteres con un atributo de longitud que no sea mayor que 8, y no debe
contener una variable de indicador. El nombre-servidor contenido dentro de la
variable-lenguaje-principal debe alinearse a la izquierda y no debe delimitarse
mediante comillas.
Observe que el nombre-servidor es un alias de base de datos que identifica al
servidor de aplicaciones. Debe aparecer en la lista del directorio local del
peticionario de aplicaciones.
El nombre-servidor o la variable-lenguaje-principal debe identificar una conexión
existente del proceso de aplicación. Si no identifican ninguna conexión
existente, se genera un error (SQLSTATE 08003).
Si SET CONNECTION se aplica a la conexión actual, no se cambian los
estados de ninguna de las conexiones del proceso de aplicación.
Conexión satisfactoria
Si la sentencia SET CONNECTION se ejecuta satisfactoriamente:
v No se realiza ninguna conexión. El registro especial CURRENT
SERVER se actualiza con el nombre-servidor especificado.
v La conexión actual previa, si la hay, se coloca en el estado inactivo
(suponiendo que se haya especificado un nombre-servidor distinto).
v El registro especial CURRENT SERVER y la SQLCA se actualizan de
la misma forma que con “CONNECT (Tipo 1)”, donde encontrará
información adicional.
Conexión no satisfactoria
Si la sentencia SET CONNECTION falla:
Notas
v La utilización de sentencias CONNECT de tipo 1 no excluye la utilización de
SET CONNECTION, pero la sentencia fallará siempre (SQLSTATE 08003), a
menos que la sentencia SET CONNECTION especifique la conexión actual, ya
que no pueden existir conexiones inactivas.
v La opción de conexión SQLRULES(DB2) (consulte el tema sobre las “opciones
que rigen la semántica de la unidad de trabajo distribuida”) no impide utilizar
SET CONNECTION, pero la sentencia no es necesaria, porque en su lugar se
pueden utilizar sentencias CONNECT de tipo 2.
v Cuando se utiliza una conexión, se inactiva y después se restaura al estado
actual en la misma unidad de trabajo, dicha conexión refleja su última
utilización por el proceso de aplicación en relación con el estado de bloqueos,
cursores y sentencias preparadas.
Ejemplo
Sentencias 1289
SET CURRENT DECFLOAT ROUNDING MODE
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT DECFLOAT ROUNDING MODE ROUND_CEILING
ROUND_DOWN
ROUND_FLOOR
ROUND_HALF_EVEN
ROUND_HALF_UP
constante-serie
variable-lenguaje-principal
Descripción
ROUND_CEILING
Redondea el valor hacia el infinito positivo. Si todos los dígitos descartados
son cero o si el signo es negativo, el resultado no cambia (a excepción de la
eliminación de los dígitos descartados). De lo contrario, el coeficiente de
resultado se incrementa en 1.
ROUND_DOWN
Redondea el valor hacia 0 (truncamiento). Se ignoran los dígitos descartados.
ROUND_FLOOR
Redondea el valor hacia el infinito negativo. Si todos los dígitos descartados
son cero o si el signo es positivo, el resultado no cambia (a excepción de la
eliminación de los dígitos descartados). De lo contrario, el signo es negativo y
el coeficiente de resultado se incrementa en 1.
ROUND_HALF_EVEN
Redondea el valor al valor más próximo. Si los valores son equidistantes,
redondea el valor de forma que el dígito final sea par. Si los dígitos
descartados representan más de la mitad del valor de un número en la
siguiente posición izquierda, el coeficiente de resultado se incrementa en 1. Si
representan menos de la mitad, el coeficiente de resultado no se ajusta (es
decir, se ignoran los dígitos descartados). De lo contrario, el coeficiente de
resultado no se modifica si el dígito situado más a la derecha es par o se
incrementa en 1 si el dígito situado más a la derecha es impar (para convertirlo
en dígito par).
ROUND_HALF_UP
Redondea el valor al valor más próximo. Si los valores son equidistantes,
redondea el valor por exceso. Si los dígitos descartados representan la mitad o
Normas
v El valor de modalidad de redondeo especificado debe ser el mismo valor que el
del registro especial CURRENT DECFLOAT ROUNDING MODE (SQLSTATE
42815).
Notas
v Esta sentencia no cambia el valor del registro especial CURRENT DECFLOAT
ROUNDING MODE en un servidor DB2 Database para Linux, UNIX y
Windows. Sin embargo, cuando la sentencia se procesa en un servidor DB2 para
z/OS o un servidor DB2 para i, se puede utilizar para cambiar el valor del
registro especial CURRENT DECFLOAT ROUNDING MODE en ese servidor.
Ejemplo
Sentencias 1291
SET CURRENT DEFAULT TRANSFORM GROUP
Invocación
Autorización
No se necesita.
Sintaxis
CURRENT =
SET DEFAULT TRANSFORM GROUP nombre-grupo
Descripción
nombre-grupo
Especifica un nombre, formado por un solo elemento, que identifica un grupo
de transformación definido para todos los tipos estructurados. Este nombre se
puede utilizar en sentencias subsiguientes (o hasta que el valor del registro
especial se vuelve a cambiar utilizando otra sentencia SET CURRENT
DEFAULT TRANSFORM GROUP).
El nombre debe ser un identificador de SQL, de hasta 128 bytes de longitud
(SQLSTATE 42815). Cuando se establece el registro especial, no se realiza
ninguna validación de que el nombre-grupo esté definido para cualquier tipo
estructurado. Sólo se comprueba la validez de la definición del grupo de
transformación mencionado cuando se referencia explícitamente un tipo
estructurado.
Normas
v Si el valor especificado no se adapta a las normas para un nombre-grupo, se emite
un error (SQLSTATE 42815)
v Las funciones TO SQL y FROM SQL definidas en el grupo de transformación
nombre-grupo se utilizan para intercambiar datos de tipo estructurado, definidos
por el usuario, con un programa del lenguaje principal.
Notas
v El valor inicial del registro especial CURRENT DEFAULT TRANSFORM GROUP
es la serie de caracteres vacía.
Ejemplo
Sentencias 1293
SET CURRENT DEGREE
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT DEGREE constante-serie
variable-lenguaje-principal
Descripción
El valor de CURRENT DEGREE se sustituye por el valor de la constante de serie o
de la variable del lenguaje principal. El valor debe ser una serie de caracteres que
no tenga una longitud superior a 5 bytes. El valor debe ser la representación en
forma de serie de caracteres de un entero entre 1 y 32.767 inclusive o 'ANY'.
Notas
v El grado de paralelismo intrapartición para las sentencias de SQL estático puede
controlarse utilizando la opción DEGREE del mandato PREP o BIND.
v El grado de ejecución real del paralelismo intrapartición será el más bajo de los
siguientes:
– Parámetro de configuración de grado máximo de consulta (max_querydegree)
– El grado de ejecución de la aplicación
– El grado de compilación de la sentencia de SQL
v El parámetro de configuración del gestor de bases de datos intra_parallel debe
haberse activado para poder utilizar el paralelismo intrapartición. Si está
desactivado, el valor de este registro se pasará por alto y la sentencia no
utilizará el paralelismo intrapartición para llevar a cabo la optimización
(SQLSTATE 01623).
v El valor del registro especial CURRENT DEGREE y el valor intra_parallel
pueden alterarse temporalmente en una carga de trabajo estableciendo el
atributo de carga de trabajo MAXIMUM DEGREE.
v Algunas sentencias de SQL no pueden utilizar el paralelismo intrapartición.
Ejemplos
v Ejemplo 1: La siguiente sentencia establece el valor CURRENT DEGREE para que
se inhiba el paralelismo intrapartición.
SET CURRENT DEGREE = ’1’
v Ejemplo 2: La siguiente sentencia establece el valor CURRENT DEGREE para que
se permita el paralelismo intrapartición.
SET CURRENT DEGREE = ’ANY’
Sentencias 1295
SET CURRENT EXPLAIN MODE
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT EXPLAIN MODE NO
YES
EXPLAIN
NORCAC
REOPT
RECOMMEND INDEXES
EVALUATE INDEXES
RECOMMEND PARTITIONINGS
EVALUATE PARTITIONINGS
variable-lenguaje-principal
Descripción
NO Inhabilita el recurso Explain. No se captura la información de Explain. NO es
el valor inicial del registro especial.
YES
Habilita el recurso Explain y provoca que la información de Explain se inserte
en las tablas de Explain para las sentencias de SQL dinámico elegibles. Todas
las sentencias de SQL dinámico se compilan y ejecutan normalmente.
EXPLAIN
Habilita el recurso Explain y provoca que se capte la información de Explain
para cualquier sentencia de SQL dinámico elegible que esté preparada. Sin
embargo, no se ejecutan las sentencias dinámicas.
EXPLAIN NORCAC
Habilita el recurso Explain y provoca que se capture la información de Explain
para cualquier sentencia de SQL dinámico elegible que esté preparada, como si
el control de acceso a filas o columnas (RCAC) no se hubiera activado. No se
ejecutan las sentencias dinámicas. Cuando se establece esta modalidad explain,
el recurso explain explicaría el plan como si el RCAC no estuviera presente.
REOPT
Habilita el recurso Explain y hace que la información de Explain se capture
para una sentencia de SQL estático o dinámico durante la reoptimización de la
sentencia en tiempo de ejecución; es decir, cuando están disponibles los valores
de datos reales de las variables del lenguaje principal, los registros especiales,
las variables globales o los marcadores de parámetro.
RECOMMEND INDEXES
Habilite el compilador SQL para los índices recomendados. Todas las consultas
que se ejecutan en esta modalidad de Explain llenarán la tabla ADVISE_INDEX
con los índices recomendados. Asimismo, la información de Explain será
capturada en tablas de Explain para demostrar cómo se utilizan los índices
recomendados, pero las sentencias no se compilan ni se ejecutan.
EVALUATE INDEXES
Habilita el compilador de SQL para evaluar los índices virtuales recomendados
para las consultas dinámicas. Las consultas que se ejecutan en esta modalidad
de Explain serán compiladas y optimizadas utilizando estadísticas fabricadas
basadas en los índices virtuales. No se ejecutan las sentencias. Los índices que
deben evaluarse se leen de la tabla ADVISE_INDEX si la columna USE_INDEX
contiene 'Y'. Los índices no exclusivos existentes también se pueden omitir si
se establece la columna USE_INDEX en 'I' y la columna EXISTS en 'Y'. Si se
indica una combinación de USE_INDEX='I' y EXISTS='N', se continúa
realizando normalmente la evaluación de índice para la consulta, pero se
omitirá el índice en cuestión.
RECOMMEND PARTITIONINGS
Especifica que el compilador debe recomendar la mejor partición de base de
datos para cada tabla a la que accede una consulta específica. Las mejores
particiones de base de datos se graban en una tabla ADVISE_PARTITION. La
consulta no se ejecuta.
EVALUATE PARTITIONINGS
Especifica que el compilador debe obtener el rendimiento estimado de una
consulta utilizando las particiones de base de datos virtuales especificadas en
la tabla ADVISE_PARTITION.
variable-lenguaje-principal
El tipo de datos de la variable-lenguaje-principal debe ser CHAR o VARCHAR y
su longitud no debe ser mayor que 254. Si se proporciona un campo más largo,
se devolverá un error (SQLSTATE 42815). El valor especificado debe ser NO,
YES, EXPLAIN, RECOMMEND INDEXES o EVALUATE INDEXES. Si el valor
real que se proporciona es mayor que el valor de sustitución especificado, la
entrada se debe rellenar por la derecha con blancos. Los blancos iniciales no
están permitidos (SQLSTATE 42815). Todos los valores de entrada se tratan
como si no fuesen sensibles a las mayúsculas y minúsculas. Si una
variable-lenguaje-principal tiene asociada una variable de indicador, el valor de
dicha variable no debe indicar un valor nulo (SQLSTATE 42815).
Notas
v El recurso Explain utiliza los ID siguientes como esquema al calificar tablas de
Explain que se están llenando de datos:
– El ID de autorización de sesión SQL dinámico
– El ID de autorización de sentencia para SQL estático
El esquema se puede asociar con un conjunto de tablas de Explain o alias que
apuntan a un conjunto de tablas de Explain en un esquema distinto. Si no se
encuentran tablas de Explain en el esquema, el recurso Explain comprueba la
existencia de tablas de Explain en el esquema SYSTOOLS e intenta utilizar
dichas tablas.
v La información de Explain para las sentencias de SQL estático se puede capturar
utilizando la opción EXPLAIN del mandato PREP o BIND. Si se especifica el valor
ALL de la opción EXPLAIN y el valor de registro de CURRENT EXPLAIN MODE
es NO, se capturará la información de Explain para sentencias de SQL dinámico
Sentencias 1297
SET CURRENT EXPLAIN MODE
Ejemplo
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT EXPLAIN SNAPSHOT NO
YES
EXPLAIN
REOPT
variable-lenguaje-principal
Descripción
NO Inhabilita el servicio de instantánea de Explain. No se toma ninguna
instantánea. NO es el valor inicial del registro especial.
YES
Habilita el recurso de instantánea de Explain, creando una instantánea de la
representación interna de cada sentencia de SQL dinámico elegible. Esta
información se inserta en la columna SNAPSHOT de la tabla
EXPLAIN_STATEMENT.
EXPLAIN
Habilita el recurso de instantánea de Explain, creando una instantánea de la
representación interna de cada sentencia de SQL dinámico elegible que se
prepara. Sin embargo, no se ejecutan las sentencias dinámicas.
REOPT
Habilita el recurso Explain y hace que la información de Explain se capture
para una sentencia de SQL estático o dinámico durante la reoptimización de la
sentencia en tiempo de ejecución; es decir, cuando están disponibles los valores
actuales de las variables del lenguaje principal, los registros especiales, las
variables globales o los marcadores de parámetro.
variable-lenguaje-principal
El tipo de datos de la variable-lenguaje-principal debe ser CHAR o VARCHAR y
la longitud de su contenido no debe ser mayor que 8. Si se proporciona un
campo más largo, se devolverá un error (SQLSTATE 42815). El valor contenido
en el registro debe ser NO, YES ni EXPLAIN. Si el valor real que se
proporciona es mayor que el valor de sustitución especificado, la entrada se
debe rellenar por la derecha con blancos. Los blancos iniciales no están
permitidos (SQLSTATE 42815). Todos los valores de entrada se tratan como si
no fuesen sensibles a las mayúsculas y minúsculas. Si una
Sentencias 1299
SET CURRENT EXPLAIN SNAPSHOT
Notas
v El recurso Explain utiliza los ID siguientes como esquema al calificar tablas de
Explain que se están llenando de datos:
– El ID de autorización de sesión SQL dinámico
– El ID de autorización de sentencia para SQL estático
El esquema se puede asociar con un conjunto de tablas de Explain o alias que
apuntan a un conjunto de tablas de Explain en un esquema distinto. Si no se
encuentran tablas de Explain en el esquema, el recurso Explain comprueba la
existencia de tablas de Explain en el esquema SYSTOOLS e intenta utilizar
dichas tablas.
v Las instantáneas de Explain para las sentencias de SQL estático se pueden
capturar utilizando la opción EXPLSNAP del mandato PREP o BIND. Si se
especifica el valor ALL de la opción EXPLSNAP y el valor de registro CURRENT
EXPLAIN SNAPSHOT es NO, se capturarán instantáneas de Explain para las
sentencias de SQL dinámico en tiempo de ejecución. Si el valor del registro
CURRENT EXPLAIN SNAPSHOT no es NO, la opción EXPLSNAP se pasará
por alto.
v Si se activa el recurso de instantánea de Explain, el ID de autorización actual
debe tener el privilegio INSERT para las tablas de Explain o se genera un error
(SQLSTATE 42501).
v Cuando las sentencias de SQL se explican a partir de una rutina, la rutina debe
definirse con un indicador de acceso a datos de SQL de MODIFIES SQL DATA
(SQLSTATE 42985).
v Si el registro especial se establece en REOPT, y la sentencia de SQL no está
cualificada para la reoptimización en tiempo de ejecución (es decir, si la
sentencia no tiene variables de entrada o si la opción de vínculo REOPT se ha
establecido en NONE), no se capturará información de Explain. Si la opción de
vinculación REOPT se establece en ONCE, la información de instantánea de
Explain sólo se capturará una vez, al reoptimizar inicialmente la sentencia.
Después de almacenar la sentencia en antememoria, no se adquirirá más
información de Explain para esta sentencia en ejecuciones subsiguientes.
v Si se habilita el recurso Explain, se establece la opción de vinculación REOPT en
ONCE y se intenta ejecutar una sentencia de SQL reoptimizable que ya está
almacenada en antememoria, la sentencia se compilará y reoptimizará con los
valores actuales de las variables de entrada y la instantánea de Explain se
capturará de acuerdo a ello. El plan de acceso que se acaba de generar para esta
sentencia no se almacenará en antememoria ni se ejecutará. Las demás
aplicaciones que ejecutan simultáneamente esta sentencia almacenada en
antememoria continuarán con su ejecución y las nuevas peticiones de ejecución
de esta sentencia tomarán el plan de acceso que ya está en la antememoria.
v El valor de REOPT para los registros especiales CURRENT EXPLAIN MODE y
CURRENT EXPLAIN SNAPSHOT alterará temporalmente el valor de las
opciones de vinculación EXPLAIN y EXPLSNAP en tiempo de vinculación si
una sentencia de SQL estático o dinámico tiene variables de entrada y la opción
de vinculación REOPT se establece en ONCE o ALWAYS.
Ejemplos
v Ejemplo 1: La siguiente sentencia establece el registro especial CURRENT
EXPLAIN SNAPSHOT de modo que se tomará una instantánea de Explain para
cualquier sentencia de SQL dinámico elegible posterior y se ejecutará la
sentencia.
SET CURRENT EXPLAIN SNAPSHOT = YES
v Ejemplo 2: El ejemplo siguiente recupera el valor actual del registro especial
CURRENT EXPLAIN SNAPSHOT en la variable del lenguaje principal llamada
SNAP.
EXEC SQL VALUES (CURRENT EXPLAIN SNAPSHOT) INTO :SNAP;
Sentencias 1301
SET CURRENT FEDERATED ASYNCHRONY
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT FEDERATED ASYNCHRONY ANY
constante-entero
variable-lenguaje-principal
Descripción
ANY
Especifica el valor -1 para CURRENT FEDERATED ASYNCHRONY, lo que
significa que la ejecución de sentencias puede implicar asincronía al utilizar un
grado determinado por el gestor de bases de datos.
constante-entera
Especifica un valor de entero entre 0 y 32.767, incluido. La ejecución de
sentencias puede implicar asincronía al utilizar el grado especificado. Si el
valor es 0 cuando una sentencia de SQL se prepara dinámicamente, la
ejecución de esa sentencia no utilizará la asincronía.
variable-lenguaje-principal
Una variable de tipo INTEGER. El valor debe estar entre 0 y 32.767, incluido, o
-1 (representa ANY). Si una variable-lenguaje-principal tiene asociada una
variable de indicador, el valor de dicha variable de indicador no debe indicar
un valor nulo (SQLSTATE 42815).
Notas
v El grado de asincronía para las sentencias de SQL estático se puede controlar
utilizando la opción FEDERATED_ASYNCHRONY del mandato PREP o BIND.
v El valor inicial del registro especial CURRENT FEDERATED ASYNCHRONY lo
determina el parámetro asincronía_federada de configuración del gestor de
bases de datos si la sentencia dinámica se emite a través del procesador de línea
de mandatos (CLP). La opción de vinculación FEDERATED_ASYNCHRONY
determina el valor inicial si la sentencia dinámica forma parte de una aplicación
que se está vinculando.
Ejemplos
v Ejemplo 1: La sentencia siguiente inhabilita la asincronía, estableciendo en 0 el
valor del registro especial CURRENT FEDERATED ASYNCHRONY.
Sentencias 1303
SET CURRENT IMPLICIT XMLPARSE OPTION
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT IMPLICIT XMLPARSE OPTION
constante-serie
variable-lenguaje-principal
Descripción
constante-serie
Constante de serie de caracteres. El valor debe ser una serie alineada a la
izquierda que sea 'PRESERVE WHITESPACE' o 'STRIP WHITESPACE' (no
sensible a las mayúsculas y minúsculas) sin caracteres en blanco adicionales
entre las palabras clave.
variable-lenguaje-principal
Una variable de tipo CHAR o VARCHAR. El valor de la variable del lenguaje
principal debe ser una serie alineada a la izquierda que sea 'PRESERVE
WHITESPACE' o 'STRIP WHITESPACE' (no sensible a las mayúsculas y
minúsculas) sin caracteres en blanco adicionales entre las palabras clave. El
valor debe rellenarse con blancos por la derecha utilizando una
variable-lenguaje-principal de carácter de longitud fija. La variable del lenguaje
principal no puede ser nulo.
Notas
v El valor inicial del registro especial CURRENT IMPLICIT XMLPARSE OPTION
es 'STRIP WHITESPACE'.
v Las sentencias de SQL dinámico y estático se ven afectadas por este registro
especial.
Ejemplo
Invocación
Autorización
No se necesita.
Sintaxis
CURRENT =
SET ISOLATION UR
CS
RR
RS
RESET
Descripción
Notas
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con las versiones anteriores de los productos
DB2 y con otros productos de base de datos.
– TO puede especificarse en lugar del signo de igual (=)
– DIRTY READ puede especificarse en lugar de UR
– READ UNCOMMITTED puede especificarse en lugar de UR
– READ COMMITTED se reconoce y se actualiza a CS
– CURSOR STABILITY puede especificarse en lugar de CS
– REPEATABLE READ puede especificarse en lugar de RR
– SERIALIZABLE puede especificarse en lugar de RR
Sentencias 1305
SET CURRENT LOCALE LC_MESSAGES
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT LOCALE LC_MESSAGES variable-lenguaje-principal
constante-serie
Descripción
Notas
v Valor inicial: el valor inicial del registro especial CURRENT LOCALE
LC_MESSAGES es 'en_US'.
v Disponibilidad de idioma: si el idioma del entorno local no está disponible para
el gestor de bases de datos de DB2, los mensajes se devolverán en inglés.
v Compatibilidad de páginas de códigos: el idioma del entorno local especificado
debe recibir soporte de la página de códigos del parámetro de salida o el tipo de
retornos de una rutina que utilice el registro especial para determinar el idioma
en el que se devuelve la información de texto de los mensajes. Si la base de
datos no es Unicode (y la rutina no se ha creado con PARAMETER CCSID
UNICODE) y algunos caracteres del idioma del entorno local no pueden
representarse en la página de códigos de la base de datos, se devolverán
caracteres sustitutos como resultado de la conversión de la página de códigos.
Ejemplos
v Ejemplo 1: la sentencia siguiente establece el registro especial CURRENT
LOCALE LC_MESSAGES en el entorno local inglés de Canadá utilizando la
versión más reciente del Common Locale Data Repository (CLDR) disponible en
el gestor de bases de datos de DB2.
SET CURRENT LOCALE LC_MESSAGES = ’en_CA’
v Ejemplo 2: la sentencia siguiente establece el registro especial CURRENT
LOCALE LC_MESSAGES en el entorno local francés de Francia utilizando
Common Locale Data Repository (CLDR) versión 1.5. La rutina CONNECTION
del módulo monreport se invoca, a continuación, para que la salida se devuelva
en francés.
SET CURRENT LOCALE LC_MESSAGES = ’CLDR 1.5:fr_FR’
CALL MONREPORT.CONNECTION
v Ejemplo 3: supongamos que el procedimiento definido por el usuario
XYZ.STORELOCATOR adopta una entrada de código postal. Devuelve un
conjunto de resultados de tiendas de la empresa XYZ a una distancia de 30
minutos en coche del código postal que se ha entrado. Si el código postal no
tiene el formato correcto, se devuelve un mensaje de error que indica que el
problema se debe al formato. El procedimiento se codifica para poder devolver
el mensaje de error en el idioma determinado a partir del valor del registro
especial CURRENT LOCALE LC_MESSAGES. La sentencia siguiente establece el
registro especial CURRENT LOCALE LC_MESSAGES en el entorno local
español de México. El procedimiento definido por el usuario de localizador de
tiendas se invoca, a continuación, y los mensajes de error se devuelven en
español.
SET CURRENT LOCALE LC_MESSAGES = ’es_MX’
CALL XYZ.STORELOCATOR(:ZIP, :STATUSMSG)
Sentencias 1307
SET CURRENT LOCALE LC_TIME
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT LOCALE LC_TIME variable-lenguaje-principal
constante-serie
Descripción
Notas
v Valor inicial: El valor inicial del registro especial CURRENT LOCALE LC_TIME
es 'en_US'.
v Uso potencial futuro: en un futuro release, el valor del registro especial
CURRENT LOCALE LC_TIME podrá utilizarse por otras funciones escalares y
para otras áreas del entorno de base de datos que impliquen valores de fecha y
hora.
v Entornos locales válidos y denominaciones: Para obtener información sobre los
entornos locales válidos y su denominación, consulte la sección sobre nombres
de entorno local para SQL y XQuery en la publicación Globalization Guide .
Ejemplos
v Ejemplo 1: la sentencia siguiente establece el registro especial CURRENT
LOCALE LC_TIME en el entorno local inglés de Canadá y utiliza la versión más
reciente del CLDR (Common Locale Data Repository) disponible en el gestor de
bases de datos DB2.
SET CURRENT LOCALE LC_TIME = ’en_CA’
v Ejemplo 2: la sentencia siguiente establece el registro especial CURRENT
LOCALE LC_TIME en el entorno local francés de Francia y utiliza el CLDR
devuelve:
’novembre’
Sentencias 1309
SET CURRENT LOCK TIMEOUT
Invocación
Autorización
No se necesita.
Sintaxis
CURRENT =
SET LOCK TIMEOUT WAIT
NOT WAIT
NULL
WAIT
constante-entera
variable-lenguaje-principal
Descripción
variable-lenguaje-principal
Una variable de tipo INTEGER. El valor debe estar entre -1 y 32767. Si
variable-lenguaje-principal tiene una variable de indicador asociada y su valor
especifica un valor nulo, se elimina el valor establecido de CURRENT LOCK
TIMEOUT. Es equivalente a especificar la palabra clave NULL.
Notas
v Un valor actualizado del registro especial surte efecto inmediatamente después
de la ejecución satisfactoria de esta sentencia. Puesto que el valor de registro
especial que se debe utilizar durante la ejecución de la sentencia se fija al
principio de la ejecución de la sentencia, sólo devolverán un valor actualizado
del registro especial CURRENT LOCK TIMEOUT para las sentencias que inician
la ejecución después de que la sentencia SET LOCK TIMEOUT se haya
completado satisfactoriamente.
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con los productos de base de datos de
Informix. Estas alternativas no son estándar y no deberían utilizarse.
– Se puede especificar MODE en lugar de TIMEOUT.
– Se puede especificar TO en lugar del operador igual (=).
Ejemplos
v Ejemplo 1: Establecer el valor de tiempo de espera excedido para que espere 30
segundos antes de devolver un error.
SET CURRENT LOCK TIMEOUT 30
v Ejemplo 2: Eliminar el valor establecido de tiempo de espera excedido de bloqueo
para que se utilice el valor del parámetro de configuración de bases de datos
locktimeout en su lugar.
SET CURRENT LOCK TIMEOUT NULL
Sentencias 1311
SET CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION
Invocación
Autorización
No se necesita.
Sintaxis
TABLE FOR OPTIMIZATION =
SET CURRENT MAINTAINED TYPES
ALL
NONE
variable-lenguaje-principal
,
FEDERATED_TOOL
SYSTEM
USER
TABLE FOR OPTIMIZATION
CURRENT MAINTAINED TYPES
Descripción
ALL
Especifica que todos los tipos posibles de tablas mantenidas que este registro
especial controla, ahora y en el futuro, van a considerarse cuando se optimice
el proceso de las consultas de SQL dinámico.
NONE
Especifica que ninguno de los tipos de objetos que este registro especial
controla van a considerarse cuando se optimice el proceso de las consultas de
SQL dinámico.
FEDERATED_TOOL
Especifica que las tablas de consulta materializada de renovación diferida que
una herramienta federada mantiene pueden tomarse en consideración para
optimizar el proceso de consultas de SQL dinámico, siempre que el valor del
registro especial CURRENT QUERY OPTIMIZATION sea 2 o mayor que 5.
SYSTEM
Especifica que las tablas de consulta materializada con renovación diferida
mantenidas por el sistema pueden considerarse para la optimización del
proceso de las consultas de SQL dinámico. (Las tablas de consulta
materializada inmediatas siempre están disponibles.)
USER
Especifica que las tablas de consulta materializada con renovación diferida
mantenidas por el usuario pueden considerarse para la optimización del
proceso de las consultas de SQL dinámico.
CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION
El valor del registro especial CURRENT MAINTAINED TABLE TYPES FOR
OPTIMIZATION antes de que se ejecute esta sentencia.
variable-lenguaje-principal
Una variable de tipo CHAR o VARCHAR. La longitud del contenido de la
variable del lenguaje principal no debe exceder de 254 bytes (SQLSTATE
42815). No puede establecerse en nulo. Si una variable-lenguaje-principal tiene
asociada una variable de indicador, el valor de dicha variable de indicador no
debe indicar un valor nulo (SQLSTATE 42815).
Los caracteres de la variable-lenguaje-principal deben alinearse a la izquierda. El
contenido de la variable-lenguaje-principal debe ser una serie que forme una lista
de palabras clave separadas por comas y que coincidan con lo que se puede
especificar como palabras claves para el registro especial. Estas palabras clave
se deben especificar exactamente en las mayúsculas y minúsculas que se
desean porque no se realiza ninguna conversión a caracteres en mayúsculas. El
valor deberá rellenarse con blancos por la derecha si su longitud es menor que
la de la variable del lenguaje principal.
Notas
v El valor inicial del registro especial CURRENT MAINTAINED TABLE TYPES
FOR OPTIMIZATION es SYSTEM.
v El registro especial CURRENT REFRESH AGE debe establecerse en un valor
distinto de cero para que los tipos de tablas que se han especificado se
consideren cuando se optimice el proceso de las consultas de SQL dinámico.
Ejemplos
v Ejemplo 1: Establezca el registro especial CURRENT MAINTAINED TABLE
TYPES FOR OPTIMIZATION.
SET CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION = SYSTEM, USER
v Ejemplo 2: Recupere el valor actual del registro especial CURRENT
MAINTAINED TABLE TYPES FOR OPTIMIZATION en una variable del
lenguaje principal denominada CURMAINTYPES.
EXEC SQL VALUES (CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION)
INTO :CURMAINTYPES
v Ejemplo 3: Establezca el registro especial CURRENT MAINTAINED TABLE
TYPES FOR OPTIMIZATION de modo que no tenga ningún valor.
SET CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION = NONE
Sentencias 1313
SET CURRENT MDC ROLLOUT MODE
Invocación
Autorización
No se necesita.
Sintaxis
SET CURRENT MDC ROLLOUT MODE NONE
IMMEDIATE
DEFERRED
variable-lenguaje-principal
Descripción
NONE
Especifica que no va a utilizarse la optimización de clasificación de MDC
durante las operaciones de supresión. La sentencia DELETE se procesa del
mismo modo que una sentencia DELETE que no se califica para la
clasificación.
IMMEDIATE
Especifica que la optimización de clasificación de MDC va a utilizarse si se
califica la sentencia DELETE. Si la tabla tiene índices RID, los índices se
actualizan inmediatamente durante el proceso de supresión. Los bloques
suprimidos pueden volverse a utilizar después de que se confirme la
transacción.
DEFERRED
Especifica que la optimización de clasificación de MDC va a utilizarse si se
califica la sentencia DELETE. Si la tabla tiene índices RID, las actualizaciones
de los índices se difieren hasta que hayan acabado las confirmaciones de las
transacciones. Con esta opción, la supresión de procesos es más rápida y
utiliza menos espacio de archivo de anotaciones, pero los bloques suprimidos
no pueden volver a utilizarse hasta que se completen las actualizaciones de
índice.
variable-lenguaje-principal
Una variable de tipo VARCHAR. La longitud variable-lenguaje-principal debe ser
igual o inferior a 17 bytes (SQLSTATE 42815). El valor de la variable del
lenguaje principal debe ser una serie alineada a la izquierda, es decir una serie
'NONE', 'IMMEDIATE' o 'DEFERRED' (no sensible a las mayúsculas y
minúsculas). Si una variable-lenguaje-principal tiene asociada una variable de
indicador, el valor de dicha variable de indicador no debe indicar un valor
nulo (SQLSTATE 42815).
Notas
v Las sucesivas sentencias DELETE que pueden elegirse para el proceso de
lanzamiento respecto del valor del registro especial CURRENT MDC ROLLOUT
MODE. En la actualidad las sesiones en ejecución no resultan afectadas por un
cambio en este registro especial.
v Los efectos de la ejecución de la sentencia SET CURRENT MDC ROLLOUT
MODE no se retrotraen en el caso de que se retrotraiga la unidad de trabajo en
la que se ejecuta la sentencia.
v En DB2 Versión 9.7 y releases posteriores, la modalidad DEFERRED no recibe
soporte en una tabla MDC particionada de datos con índices RID particionados.
Sólo reciben soporte las modalidades NONE e IMMEDIATE. El tipo de
despliegue de supresión de limpieza será IMMEDIATE si la variable de registro
DB2_MDC_ROLLOUT se establece en DEFER o si el registro especial CURRENT MDC
ROLLOUT MODE se establece en DEFERRED para alterar temporalmente el
valor de DB2_MDC_ROLLOUT.
Si sólo existen índices RID no particionados en la tabla MDC, el despliegue de
supresión diferido de limpieza de índice recibe soporte.
Ejemplo
Sentencias 1315
SET CURRENT OPTIMIZATION PROFILE
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT OPTIMIZATION PROFILE nombre-perfil-optimización
variable-lenguaje-principal
constante-serie
NULL
Descripción
nombre-perfil-optimización
Es el nombre de dos parte del perfil de optimización. El nombre se puede
especificar con un literal, una variable del lenguaje principal o un registro
especial. El nombre especificado es el nombre que se entra en el registro
especial CURRENT OPTIMIZATION PROFILE.
Si el nombre-perfil-optimización especificado no está calificado, se utilizará el
valor del registro CURRENT DEFAULT SCHEMA como calificador implícito.
El valor por omisión del registro especial es nulo.
variable-lenguaje-principal
Una variable de tipo CHAR o VARCHAR que incluye el nombre del perfil de
optimización. Una variable del lenguaje principal que incluye un indicador
nulo indica que se debe utilizar el valor de la opción de enlace OPTPROFILE si
dicho valor se especifica para el paquete actual. Una variable del lenguaje
principal de longitud cero, o con sólo un espacio en blanco, indica que no se
debe utilizar ningún perfil de optimización.
La variable del lenguaje principal debe cumplir las especificaciones siguientes:
v El contenido de la serie es un identificador de una parte o de dos partes
(separado por un punto), sin espacios en blanco iniciales.
v El identificador o los identificadores pueden ser delimitados o no
delimitados.
v El contenido de la serie no se convierte a mayúsculas.
'SIMMEN.BIG_PROF' SIMMEN.BIG_PROF
'"BIG_PROF"' "BIG_PROF"
'"SIMMEN"."BIG_PROF"' "SIMMEN"."BIG_PROF"
SIMMEN low_profile '"low_profile"' "low_profile"
'SIMMEN."low_profile"' SIMMEN."low_profile"
'"SIMMEN"."low_profile"' "SIMMEN"."low_profile"
eliaz DBA3 'DBA3' DBA3
'"DBA3"' "eliaz".DBA3
'"eliaz".DBA3' "eliaz"."DBA3"
'"eliaz"."DBA3"'
SNOW PROFILE1.0 '"PROFILE1.0"' "PROFILE1.0"
'SNOW."PROFILE1.0"' SNOW."PROFILE1.0"
'"SNOW"."PROFILE1.0"' "SNOW"."PROFILE1.0"
Sentencias 1317
SET CURRENT OPTIMIZATION PROFILE
Notas
v Si el valor del registro especifica el nombre de un perfil de optimización
existente, el perfil de optimización especificado se utilizará al preparar
posteriores sentencias de DML dinámico.
v Si el valor del registro es nulo, especifica el nombre de un perfil de optimización
existente, el perfil de optimización especificado por la opción de enlace
OPTPROFILE, si existe, se utilizará al preparar posteriores sentencias de DML
dinámico.
v Si el valor del registro es nulo y no se ha establecido la opción de enlace
OPTPROFILE, no se utilizará ningún perfil de optimización al preparar
posteriores sentencias de DML dinámico.
v Si el valor del registro es una serie vacía, no se utilizará ningún perfil de
optimización al preparar posteriores sentencias de DML dinámico,
independientemente de si la opción de enlace OPTPROFILE se ha establecido o
no.
v Los cambios posteriores de CURRENT DEFAULT SCHEMA no afectan al perfil
de optimización. El valor de registro CURRENT OPTIMIZATION PROFILE se
establece con el nombre de dos partes que está en vigor al mismo tiempo que se
evalúa la sentencia SET CURRENT OPTIMIZATION PROFILE. Sólo otra
sentencia SET CURRENT OPTIMIZATION PROFILE puede cambiar el perfil de
optimización que se utiliza.
Ejemplos
v Ejemplo 1: El perfil de optimización RICK.FOO se utiliza para las sentencias 1, 2
y 3. TOM.FOO se utiliza para la sentencia 4.
SET CURRENT SCHEMA = ’RICK’
SET CURRENT OPTIMIZATION PROFILE = ’FOO’
sentencia 1
sentencia 2
SET CURRENT SCHEMA = ’TOM’
sentencia 3
SET CURRENT OPTIMIZATION PROFILE = ’FOO’
sentencia 4
v Ejemplo 2: Una aplicación con las sentencias siguientes se ha enlazado con las
opciones OPTPROFILE("Foo") y QUALIFIER("John"). El perfil de optimización
KAAREL.BAR se utiliza para la sentencia 1 y el perfil de optimización
"John"."Foo" se utiliza para la sentencia 2.
SET CURRENT SCHEMA = ’KAAREL’
SET CURRENT OPTIMIZATION PROFILE = ’BAR’
sentencia 1
SET CURRENT SCHEMA = "Tom"
SET CURRENT OPTIMIZATION PROFILE NULL
sentencia 2
v Ejemplo 3: La serie vacía es un valor especial que indica que no se debe utilizar
ningún perfil de optimización. El perfil de optimización "Hamid"."Foo" se utiliza
para la sentencia 1 y no se utiliza ningún perfil de optimización para la
sentencia 2.
SET CURRENT OPTIMIZATION PROFILE = ’"Hamid"."Foo"’
sentencia 1
SET CURRENT OPTIMIZATION PROFILE = ’’
sentencia 2
Invocación
Autorización
No se necesita.
Sintaxis
,
=
SET CURRENT PACKAGE PATH nombre-esquema
CURRENT PACKAGE PATH
CURRENT PATH
CURRENT_PATH
CURRENT USER
CURRENT_USER
SESSION_USER
SYSTEM_USER
USER
variable-lenguaje-principal
constante-serie
Descripción
nombre-esquema
Identifica un esquema. El nombre no debe ser un identificador delimitado que
esté vacío o que sólo contenga espacios en blanco (SQLSTATE 42815).
CURRENT PACKAGE PATH
El valor del registro especial CURRENT PACKAGE PATH antes de que se
ejecute esta sentencia.
CURRENT PATH
El valor del registro especial CURRENT PATH.
CURRENT USER
El valor del registro especial CURRENT USER.
SESSION_USER
El valor del registro especial SESSION_USER.
SYSTEM_USER
El valor del registro especial SYSTEM_USER.
USER
El valor del registro especial USER.
variable-lenguaje-principal
Contiene uno o varios nombres de esquema, separados mediante comas. La
variable del lenguaje principal debe:
Sentencias 1319
SET CURRENT PACKAGE PATH
Normas
v Si el mismo esquema aparece más de una vez en la lista, se utiliza la primera
ocurrencia del esquema (SQLSTATE 01625).
v El número de esquemas que se pueden especificar está limitado por la longitud
total del registro especial CURRENT PACKAGE PATH. La serie de registro
especial se crea tomando el nombre del esquema especificado y eliminando los
blancos de cola, delimitando el nombre con comillas dobles y separando los
nombres de esquema con comas. La longitud de la lista resultante no puede
exceder de la longitud máxima del registro especial (SQLSTATE 0E000).
v Un nombre de esquema que no se ajuste a las normas para un identificador
normal (por ejemplo, un nombre de esquema que contenga caracteres en
minúsculas o caracteres que no se pueden especificar en un identificador
normal), se debe especificar como un nombre de esquema delimitado y no se
debe especificar en una variable del lenguaje principal ni constante de serie.
v Para indicar que el valor actual de un registro especial (especificado como una
sola palabra clave) se debe utilizar en la vía de acceso del paquete, especifique el
nombre del registro especial como palabra clave. Si el nombre del registro
especial se especifica como identificador delimitado en su lugar (por ejemplo,
"USER"), se interpreta como un nombre de esquema de ese valor ('USER').
v Las normas siguientes se utilizan para determinar si un valor especificado en
una sentencia SET CURRENT PACKAGE PATH es una variable o un nombre de
esquema:
– Si el nombre es igual que un parámetro o variable de SQL en el procedimiento
de SQL, nombre se interpreta como parámetro o variable de SQL y el valor de
nombre se asigna a la vía de acceso del paquete.
Notas
v Consideraciones de la transacción: La sentencia SET CURRENT PACKAGE
PATH no es una operación que se pueda confirmar. ROLLBACK no tiene ningún
efecto en el registro especial CURRENT PACKAGE PATH.
v Comprobación de existencia de esquemas: No se hace ninguna validación de que
existan los esquemas especificados en el momento en que se establece el registro
especial CURRENT PACKAGE PATH. Por ejemplo, un esquema que no está bien
escrito no se detecta, lo que podría afectar a la manera en que funciona el SQL
subsiguiente. En tiempo de ejecución de paquetes, se comprueba la autorización
para un paquete coincidente y si la comprobación de autorización falla, se
devuelve un error (SQLSTATE 42501).
v Contenido de la variable del lenguaje principal o constante de serie: El
contenido de una variable del lenguaje principal o una constante de serie se
interpreta como una lista de nombres de esquema. Si se especifican múltiples
nombres de esquema, deben estar separados por comas. Cada nombre de
esquema de la lista debe ajustarse a las normas para formar un identificador
normal, o especificarse como identificador delimitado. El contenido de la
variable del lenguaje principal o constante de serie no se convierte a mayúsculas.
v Restricciones específicas para el SQL incorporado para aplicaciones COBOL:
Pueden aparecer un máximo de diez valores literales (no variables de lenguaje
principal) en el lado derecho de una sentencia SET CURRENT PACKAGE PATH.
Estos valores tienen una longitud máxima de 130 (no delimitado) o 128
(delimitado).
Ejemplos
v Ejemplo 1: Establecer el registro especial CURRENT PACKAGE PATH en la
siguiente lista de esquemas: MYPKGS, 'ABC E', SYSIBM
SET CURRENT PACKAGE PATH = MYPKGS, ’ABC E’, SYSIBM
El valor de la variable del lenguaje principal es: "MYPKGS", "ABC E", "SYSIBM".
v Ejemplo 2: Establecer el registro especial CURRENT PACKAGE PATH en la
siguiente lista de esquemas: "SCH4","SCH5", donde :hvar1 contiene
'SCH4,SCH5'.
SET CURRENT PACKAGE PATH :hvar1
Sentencias 1321
SET CURRENT PACKAGE PATH
CALL SUMMARIZE(:V1,:V2)
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT PACKAGESET constante-serie
variable-lenguaje-principal
Descripción
constante-serie
Constante de serie de caracteres. Si el valor excede de 128 bytes, sólo se
utilizarán los primeros 128 bytes.
variable-lenguaje-principal
Una variable de tipo CHAR o VARCHAR. No puede establecerse en nulo. Si el
valor excede de 128 bytes, sólo se utilizarán los primeros 128 bytes.
Notas
v Esta sentencia permite que una aplicación especifique el nombre de esquema
utilizado al seleccionar un paquete para una sentencia de SQL ejecutable. La
sentencia se procesa en el cliente y no fluye al servidor de aplicaciones.
v Se puede utilizar la opción de enlace lógico COLLECTION para crear un
paquete con un nombre de esquema especificado.
v A diferencia de DB2 para z/OS, la sentencia SET CURRENT PACKAGESET se
implementa sin soporte para un registro especial denominado CURRENT
PACKAGESET.
Ejemplos
v Ejemplo 1: supongamos que el ID de usuario PRODUSA ha compilado
previamente una aplicación denominada TRYIT, donde 'PRODUSA' es el nombre
de esquema por omisión en el archivo de vinculación. Después, la aplicación se
enlaza dos veces con diferentes opciones de enlace lógico. Se utilizan los
siguientes mandatos del procesador de línea de mandatos:
DB2 CONNECT TO SAMPLE USER PRODUSA
DB2 BIND TRYIT.BND DATETIME USA
DB2 CONNECT TO SAMPLE USER PRODEUR
DB2 BIND TRYIT.BND DATETIME EUR COLLECTION ’PRODEUR’
Sentencias 1323
SET CURRENT PACKAGESET
Esto crea dos paquetes llamados TRYIT. El primer mandato de enlace lógico ha
creado el paquete en el esquema llamado 'PRODUSA'. El segundo mandato de
enlace lógico ha creado el paquete en el esquema llamado 'PRODEUR'
basándose en la opción COLLECTION.
v Ejemplo 2: supongamos que la aplicación TRYIT contiene las sentencias
siguientes:
EXEC SQL CONNECT TO SAMPLE;
.
.
EXEC SQL SELECT HIREDATE INTO :HD FROM EMPLOYEE WHERE EMPNO=’000010’; 1
.
.
EXEC SQL SET CURRENT PACKAGESET ’PRODEUR’; 2
.
.
EXEC SQL SELECT HIREDATE INTO :HD FROM EMPLOYEE WHERE EMPNO=’000010’; 3
1 Esta sentencia se ejecutará utilizando el paquete PRODUSA.TRYIT
porque es el paquete por omisión para la aplicación. Por lo tanto, la
fecha se devuelve en formato USA.
2 Esta sentencia establece el nombre de esquema en 'PRODEUR' para la
selección del paquete.
3 Esta sentencia se ejecutará utilizando el paquete PRODEUR.TRYIT como
resultado de la sentencia SET CURRENT PACKAGESET. Por lo tanto, la
fecha se devuelve en formato EUR.
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT QUERY OPTIMIZATION 0
1
2
3
5
7
9
variable-lenguaje-principal
Descripción
clase-optimización
La clase-optimización se puede especificar como una constante de enteros o
como el nombre de una variable del lenguaje principal que contendrá el valor
adecuado en tiempo de ejecución. A continuación se facilita una visión general
de las clases.
0 Especifica que se efectúa una optimización mínima para generar un
plan de acceso. Esta clase es la más adecuada para el acceso SQL
dinámico simple para tablas bien indexadas.
1 Especifica que se efectúa una optimización más o menos comparable a
DB2 Versión 1 para generar un plan de acceso.
2 Especifica un nivel de optimización superior al de DB2 Versión 1, pero
con un coste de optimización significativamente menor que los niveles
3 y superiores, especialmente para consultas muy complejas.
3 Especifica que se efectúa una optimización moderada para generar un
plan de acceso.
5 Especifica que se efectúa una optimización significativa para generar
un plan de acceso. Para consultas SQL dinámico complejas, se utilizan
las normas heurísticas para limitar el tiempo empleado en seleccionar
un plan de acceso. Cuando sea posible, las consultas utilizarán tablas
de consulta materializada en lugar de las tablas base subyacentes.
Sentencias 1325
SET CURRENT QUERY OPTIMIZATION
Notas
v Cuando el registro CURRENT QUERY OPTIMIZATION se establece en un valor
en particular, se habilita un conjunto de normas para volver a escribir la
consulta y ciertas variables de optimización toman valores determinados. Esta
clase de técnicas de optimización se utiliza después durante la preparación de
sentencias de SQL.
v En general, el cambio de la clase de optimización afecta al tiempo de ejecución
de la aplicación, al tiempo de compilación y a los recursos necesarios. La
mayoría de las sentencias se optimizarán de manera adecuada utilizando la clase
de optimización de consulta por omisión. Las clases de optimización de consulta
inferiores, especialmente las clases 1 y 2,pueden ser adecuadas para las
sentencias de SQL dinámico para las cuales los recursos que consume una
operación PREPARE dinámica son una parte significativa de los necesarios para
ejecutar la consulta. Las clases de optimización superiores sólo deben elegirse
después de tener en cuenta los recursos adicionales que pueden consumirse y
verificar que se haya generado un plan de acceso mejor.
v Las clases de optimización de consulta deben estar en el rango de 0 a 9. Las
clases fuera de este rango devolverán un error (SQLSTATE 42815). Las clases no
soportadas dentro de este rango devolverán un aviso (SQLSTATE 01608) y se
sustituirán por la siguiente clase de optimización de consulta inferior. Por
ejemplo, una clase 6 de optimización de consulta se sustituirá por 5.
v Las sentencias preparadas dinámicamente utilizan la clase de optimización que
se ha establecido por la sentencia SET CURRENT QUERY OPTIMIZATION más
reciente que se ha ejecutado. En los casos en los que todavía no se ha ejecutado
una sentencia SET CURRENT QUERY OPTIMIZATION, la clase de optimización
de la consulta la determina el valor del parámetro de configuración de la base
de datos dft_queryopt.
v Las sentencias enlazadas estáticamente no utilizan el registro especial CURRENT
QUERY OPTIMIZATION; por lo tanto, esta sentencia no tiene ningún efecto
sobre ellas. La opción QUERYOPT se utiliza durante el preproceso o vinculación
para especificar la clase de optimización necesaria para las sentencias vinculadas
estáticamente. Si no se especifica QUERYOPT, se utilizará el valor por omisión
que especifica el parámetro de configuración de la base de datos dft_queryopt.
v No se retrotrae el resultado de la ejecución de la sentencia SET CURRENT
QUERY OPTIMIZATION si se retrotrae la unidad de trabajo en la que se ejecuta.
Ejemplos
v Ejemplo 1: Este ejemplo muestra cómo se puede seleccionar el grado de
optimización más alto.
SET CURRENT QUERY OPTIMIZATION 9
v Ejemplo 2: El ejemplo siguiente muestra cómo se puede utilizar el registro
especial CURRENT QUERY OPTIMIZATION en una consulta.
Mediante la utilización de la vista de catálogo SYSCAT.PACKAGES, busque
todos los planes que se han enlazado con el mismo valor que el valor actual del
registro especial CURRENT QUERY OPTIMIZATION.
EXEC SQL DECLARE C1 CURSOR FOR
SELECT PKGNAME, PKGSCHEMA FROM SYSCAT.PACKAGES
WHERE QUERYOPT = CURRENT QUERY OPTIMIZATION
Sentencias 1327
SET CURRENT REFRESH AGE
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT REFRESH AGE constante-numérica
ANY
variable-lenguaje-principal
Descripción
constante-numérica
Un valor DECIMAL(20,6) que representa una duración de indicación de la
hora. El valor debe ser 0 o 99.999.999.999.999 (la parte de microsegundos del
valor se ignora y, por consiguiente, puede ser cualquier valor).
ANY
Es una notación abreviada de 99.999.999.999.999.
variable-lenguaje-principal
Una variable de tipo DECIMAL(20,6) u otro tipo que se pueda asignar a
DECIMAL(20,6). No puede establecerse en nulo. Si una variable-lenguaje-
principal tiene asociada una variable de indicador, el valor de dicha variable de
indicador no debe indicar un valor nulo (SQLSTATE 42815). El valor de
variable-lenguaje-principal debe ser 0 o 99.999.999.999.999.
Notas
v El valor inicial del registro especial CURRENT REFRESH AGE es cero.
v El valor de CURRENT REFRESH AGE se sustituye por el valor especificado. El
valor debe ser 0 o 99.999.999.999.999. El valor 99.999.999.999.999 representa 9999
años, 99 meses, 99 días, 99 horas, 99 minutos y 99 segundos.
Si el valor de CURRENT REFRESH AGE es 0, las tablas de consulta
materializada afectadas por este registro especial no se utilizarán para optimizar
el proceso de una consulta. Si el valor de CURRENT REFRESH AGE es
99.999.999.999.999, las tablas de consulta materializada afectadas por este registro
especial pueden utilizarse para optimizar el proceso de una consulta, pero sólo
si el valor del registro especial CURRENT MAINTAINED TABLE TYPES FOR
OPTIMIZATION las incluye y el registro especial CURRENT QUERY
OPTIMIZATION se establece en 2 o en un valor mayor que o igual a 5. Las
Ejemplos
v Ejemplo 1: La sentencia siguiente establece el registro especial CURRENT
REFRESH AGE.
SET CURRENT REFRESH AGE ANY
v Ejemplo 2: El siguiente ejemplo recupera el valor del registro especial CURRENT
REFRESH AGE de una variable del lenguaje principal denominada
CURMAXAGE. El valor, establecido en el ejemplo anterior, es
99999999999999.000000.
EXEC SQL VALUES (CURRENT REFRESH AGE) INTO :CURMAXAGE;
Sentencias 1329
SET CURRENT SQL_CCFLAGS
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT SQL_CCFLAGS variable
constante-serie
Descripción
variable
Especifica una variable que contiene uno o varios pares de nombres y valores
separados mediante comas.
La variable debe tener las características siguientes (SQLSTATE 42815):
v El tipo de datos debe ser CHAR o VARCHAR. La longitud real del
contenido de la variable no debe exceder la longitud máxima del registro
especial.
v Debe ser una serie de caracteres en blanco, una serie vacía, o bien incluir
uno o varios pares de nombres y valores, donde el nombre se separa del
valor mediante un carácter de dos puntos. El nombre debe ser un
identificador ordinario válido. El valor asociado con un nombre debe ser una
constante de tipo BOOLEAN, una constante de tipo INTEGER o la palabra
clave NULL.
v Debe rellenarse por la derecha con espacios en blanco si se utiliza una
variable de caracteres de longitud fija.
v Puede incluir espacios en blanco adicionales al principio o al final de la
serie, alrededor del carácter de la coma o alrededor del carácter de los dos
puntos. Los espacios en blanco se pasan por alto.
v No debe ser el valor nulo.
constante-serie
Especifica una constante de serie de caracteres que contiene uno o varios pares
de nombres y valores que se separan mediante comas.
La constante de la serie debe tener las características siguientes (SQLSTATE
42815):
v Debe ser una constante de serie de caracteres. La longitud de la constante no
debe exceder la longitud máxima del registro especial.
v Debe ser una serie de caracteres en blanco, una serie vacía o bien incluir uno
o varios pares de nombres y valores, donde el nombre se separa del valor
mediante un carácter de dos puntos. El nombre debe ser un identificador
ordinario válido. El valor asociado con un nombre debe ser una constante de
tipo BOOLEAN, una constante de tipo INTEGER o la palabra clave NULL.
v Puede incluir espacios en blanco adicionales al principio o al final de la
serie, alrededor del carácter de la coma o alrededor del carácter de los dos
puntos. Los espacios en blanco se pasan por alto.
Notas
v Si aparece un nombre duplicado en el contenido del registro especial CURRENT
SQL_FLAGS, sólo se utiliza el último valor (el más cercano a la parte derecha).
El valor del registro especial sólo incluirá una única aparición del nombre
duplicado con el valor que se utiliza. Puede utilizarse la concatenación de un
nombre duplicado con un valor distinto para el valor de CURRENT
SQL_CCFLAGS con el fin de alterar temporalmente algunos valores de
compilación condicional mientras se retienen otros valores.
v Cuando se recupera CURRENT SQL_CCFLAGS, la serie que se devuelve incluye
los pares de nombres y valores exclusivos en caracteres en mayúsculas, con los
diversos pares separados mediante una coma y un espacio en blanco. Los pares
aparecen en el orden en el que se han especificado, donde un nombre duplicado
sólo se mostraría en su primera aparición, pero reflejando el valor de la posición
en la que ha aparecido por última vez.
v El registro especial CURRENT SQL_CCFLAGS puede establecerse en el valor
por omisión definido para la base de datos recuperando la columna VALUE de
SYSIBMADM.DBCFG donde NAME='sql_ccflags' en una variable y, a
continuación, asignando esa variable al registro especial.
v Consideraciones sobre transacciones: La sentencia SET SQL_CCFLAGS no es
una operación que pueda confirmarse. ROLLBACK no tiene ningún efecto en
CURRENT SQL_CCFLAGS.
Ejemplos
v Ejemplo 1: definir un valor de compilación condicional para la sesión para
indicar que el servidor es DB2 9.7 y que la depuración se ha establecido en false.
SET CURRENT SQL_CCFLAGS ’db2v97:true, debug:false’
v Ejemplo 2: ampliar la asignación CURRENT SQL_CCFLAGS existente para
establecer la depuración en true y definir el nivel de rastreo.
BEGIN
DECLARE LIST VARCHAR(1024);
SET LIST = CASE WHEN (CURRENT SQL_CCFLAGS = ’ ’)
THEN ’tracelvl:3,debug:true’
ELSE CURRENT SQL_CCFLAGS
concat ’,tracelvl:3,debug:true’
END;
SET CURRENT SQL_CCFLAGS = LIST;
END
En la asignación se utiliza una expresión CASE para gestionar la posibilidad de
que el registro especial CURRENT SQL_CCFLAGS no incluya ningún valor de
compilación condicional, dando como resultado una coma inicial en el valor de
la variable LIST.
Una consulta del registro especial CURRENT SQL_CCFLAGS tras la ejecución
de la sentencia en Ejemplo 1 y la sentencia compuesta de este ejemplo
devolvería lo siguiente:
DB2V97:TRUE, DEBUG:TRUE, TRACELVL:3
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT TEMPORAL BUSINESS_TIME NULL
expresión
Descripción
NULL
Especifica el valor nulo.
expresión
Cada expresión puede contener alguno de los operandos soportados siguientes
(SQLSTATE 428HY):
v Constante
v Registro especial
v Variable (variable del lenguaje principal, variable de SQL, parámetro de
SQL, variable de transición, variable global)
v Función escalar incorporada cuyos argumentos son operandos soportados.
Las funciones definidas por el usuario y las funciones no deterministas no se
soportan en este contexto.
v Especificación CAST donde el operando de conversión es un operando
soportado
v Expresión que utiliza operadores y operandos aritméticos
Notas
v Consideraciones de transacción: la sentencia SET CURRENT TEMPORAL
BUSINESS_TIME no es una operación que se pueda confirmar. ROLLBACK no
tiene ningún efecto en CURRENT TEMPORAL BUSINESS_TIME.
v Efectos en otros registros especiales: el valor del registro especial CURRENT
TEMPORAL BUSINESS_TIME no tiene ningún efecto en los valores de los otros
registros especiales, específicamente en los registros especiales CURRENT DATE
y CURRENT TIMESTAMP.
Ejemplos
v Ejemplo 1: establezca el registro especial CURRENT TEMPORAL
BUSINESS_TIME en el mes anterior.
SET CURRENT TEMPORAL BUSINESS_TIME = CURRENT TIMESTAMP - 1 MONTH
Sentencias 1333
SET CURRENT TEMPORAL SYSTEM_TIME
Invocación
Autorización
No se necesita.
Sintaxis
=
SET CURRENT TEMPORAL SYSTEM_TIME NULL
expresión
Descripción
NULL
Especifica el valor nulo.
expresión
Cada expresión puede contener alguno de los operandos soportados siguientes
(SQLSTATE 428HY):
v Constante
v Registro especial
v Variable (variable del lenguaje principal, variable de SQL, parámetro de
SQL, variable de transición, variable global)
v Función escalar incorporada cuyos argumentos son operandos soportados.
Las funciones definidas por el usuario y las funciones no deterministas no se
soportan en este contexto.
v Especificación CAST donde el operando de conversión es un operando
soportado
v Expresión que utiliza operadores y operandos aritméticos
Notas
v Consideraciones de la transacción: La sentencia SET CURRENT TEMPORAL
SYSTEM_TIME no es una operación que se pueda confirmar. ROLLBACK no
tiene ningún efecto en CURRENT TEMPORAL SYSTEM_TIME.
v Efectos en otros registros especiales: el valor del registro especial CURRENT
TEMPORAL SYSTEM_TIME no tiene ningún efecto en los valores de los otros
registros especiales, específicamente en los registros especiales CURRENT DATE
y CURRENT TIMESTAMP.
Ejemplos
v Ejemplo 1: establezca el registro especial CURRENT TEMPORAL SYSTEM_TIME
en el mes anterior.
SET CURRENT TEMPORAL SYSTEM_TIME = CURRENT TIMESTAMP - 1 MONTH
Sentencias 1335
SET ENCRYPTION PASSWORD
Invocación
Autorización
No se necesita.
Sintaxis
=
SET ENCRYPTION PASSWORD variable-lenguaje-principal
constante-serie
Descripción
Notas
v El valor inicial de ENCRYPTION PASSWORD es una serie vacía.
v La variable-lenguaje-principal o constante-serie se transmite al servidor de bases de
datos siguiendo mecanismos de DB2 normales.
Ejemplo
Sentencias 1337
SET EVENT MONITOR STATE
Invocación
Autorización
Sintaxis
SET EVENT MONITOR nombre-supervisor-sucesos STATE
=
0
1
variable-lenguaje-principal
Descripción
nombre-supervisor-sucesos
Identifica el supervisor de sucesos que se debe activar o desactivar. El nombre
debe identificar un supervisor de sucesos que exista en el catálogo (SQLSTATE
42704).
estado-nuevo
El estado-nuevo puede especificarse como una constante de enteros o como el
nombre de una variable del lenguaje principal que contendrá el valor adecuado
en tiempo de ejecución. Se pueden especificar los siguientes valores:
0 Indica que el supervisor de sucesos especificado debe desactivarse.
1 Indica que el supervisor de sucesos especificado debe activarse. El
supervisor de sucesos no debe estar activo todavía; de lo contrario se
emite un aviso (SQLSTATE 01598).
variable-lenguaje-principal
El tipo de datos es INTEGER. El valor especificado debe ser 0 ó 1
(SQLSTATE 42815). Si una variable-lenguaje-principal tiene asociada una
variable de indicador, el valor de dicha variable de indicador no debe
indicar un valor nulo (SQLSTATE 42815).
Normas
v Aunque puede definirse un número no limitado de supervisores de sucesos,
puede haber un máximo de 128 supervisores de sucesos activos
1338 Consulta de SQL - Volumen 2
SET EVENT MONITOR STATE
Notas
v La activación de un supervisor de sucesos que no es WLM realiza una
restauración de cualquier contador asociado al mismo. La restauración de los
contadores no se realiza al activar supervisores de sucesos de unidad de trabajo,
bloqueo y WLM.
v Cuando se inicia un supervisor de sucesos WRITE TO TABLE utilizando SET
EVENT MONITOR STATE, éste actualiza la columna EVMON_ACTIVATES de la
vista de catálogo SYSCAT.EVENTMONITORS. Si la unidad de trabajo en la que
se ha realizado la operación de conjuntos se retrotrae por cualquier motivo, la
actualización del catálogo se perderá. Cuando se reinicie el supervisor de
sucesos, volverá a utilizar el valor de EVMON_ACTIVATES que se haya
retrotraído.
v Si la partición de base de datos en la que se debe ejecutar el supervisor de
sucesos no está activa, la activación de este se produce la próxima vez que se
activa la partición de base de datos.
v Una vez activado un supervisor de sucesos, este se comporta como un
supervisor de sucesos de inicio automático hasta que el supervisor de sucesos se
desactiva explícitamente o se recicla la instancia. Es decir, si un supervisor de
sucesos está activo cuando se desactiva una partición de base de datos y esta se
vuelve a activar posteriormente, el supervisor de sucesos también se vuelve a
activar explícitamente.
v Si un supervisor de sucesos de actividades está activo cuando se desactiva la
base de datos, se descartan los registros de actividades anotados anteriormente
de la cola. Para asegurarse de obtener todos los registros del supervisor de
sucesos de actividades y que no se descarte ninguno de ellos, desactive
explícitamente el supervisor de sucesos de actividades antes de desactivar la
base de datos. Cuando se desactiva explícitamente un supervisor de sucesos de
actividades, se procesan todos los registros de actividades anotados
anteriormente en la cola antes de que se desactive el supervisor de sucesos.
Ejemplos
v Ejemplo 1: Active un supervisor de sucesos denominado SMITHPAY.
SET EVENT MONITOR SMITHPAY STATE = 1
v Ejemplo 2: Suponga que MYSAMPLE es una base de datos de varias particiones
con dos particiones de base de datos, 0 y 2. La partición 2 todavía no está activa.
En la partición de base de datos 0:
CONNECT TO MYSAMPLE;
CREATE EVENT MONITOR MYEVMON ON DBPARTITIONNUM 2;
SET EVENT MONITOR MYEVMON STATE 1;
Sentencias 1339
SET EVENT MONITOR STATE
SET INTEGRITY
La sentencia SET INTEGRITY se utiliza para establecer el estado pendiente de
integridad en las tablas, establece las tablas en un estado de acceso completo y
poda el contenido de una o varias tablas de etapas.
A continuación se indican las operaciones que pueden realizarse con una sentencia
SET INTEGRITY:
v Sacar una o varias tablas del estado pendiente de establecer integridad (antes
denominado "estado pendiente de comprobación") realizando el proceso de
integridad necesario en esas tablas.
v Sacar una o varias tablas del estado pendiente de establecer integridad sin
efectuar el proceso de integridad necesario en esas tablas.
v Colocar una o varias tablas en estado pendiente de establecer integridad.
v Colocar una o varias tablas en estado de acceso completo.
v Podar el contenido de una o más tablas de etapas.
Invocación
Autorización
Sentencias 1341
SET INTEGRITY
Sintaxis
SET INTEGRITY
cláusula-modalidad-acceso:
NO ACCESS
READ ACCESS
cláusula-cascada:
CASCADE DEFERRED
para-tipos-descendientes:
TO ALL TABLES
opciones-seleccionadas-tabla:
Sentencias 1343
SET INTEGRITY
opciones-en-línea
GENERATE IDENTITY
opciones-optimización-consulta
opciones-en-línea:
ALLOW NO ACCESS
opciones-optimización-consulta:
opciones-comprobación:
? opciones-incrementales ? ?
FORCE GENERATED PRUNE
? ?
FULL ACCESS cláusula-excepción
opciones-incrementales:
INCREMENTAL
NOT INCREMENTAL
cláusula-excepción:
cláusula-utilización-en-tabla:
opciones-no-seleccionadas-tabla:
opciones-integridad
FULL ACCESS
opciones-integridad:
ALL
,
FOREIGN KEY
CHECK
MATERIALIZED QUERY
GENERATED COLUMN
STAGING
Descripción
FOR nombre-tabla
Identifica una o más tablas para el proceso de la integridad. Debe ser una tabla
descrita en el catálogo y no debe ser una vista, una tabla del catálogo ni una
tabla con tipo.
OFF
Especifica que las tablas se colocan en estado pendiente de establecer
integridad. En una tabla que se encuentra en estado pendiente de establecer
integridad sólo está permitida una actividad muy limitada.
cláusula-modalidad-acceso
Especifica la posibilidad de lectura de la tabla mientras se encuentra en estado
pendiente de establecer integridad.
NO ACCESS
Especifica que la tabla debe colocarse en estado sin acceso pendiente de
establecer integridad, en que no está permitido el acceso de lectura o
grabación a la tabla.
READ ACCESS
Especifica que la tabla debe colocarse en estado de acceso de lectura
pendiente de establecer integridad, en que está permitido el acceso de
lectura a la parte no añadida de la tabla. Esta opción no está permitida en
una tabla en estado sin acceso pendiente de establecer integridad
(SQLSTATE 428FH).
cláusula-cascada
Especifica si el estado pendiente de establecer integridad de la tabla a la que se
hace referencia en la sentencia SET INTEGRITY debe aplicarse en cascada
inmediatamente a las tablas descendientes.
CASCADE IMMEDIATE
Especifica que el estado pendiente de establecer integridad debe extenderse
inmediatamente a las tablas descendientes.
para-tipos-descendientes
Especifica el tipo de tablas descendientes a las que se aplica en cascada de
inmediato el estado pendiente de establecer integridad.
TO ALL TABLES
Especifica que el estado pendiente de establecer integridad debe
aplicarse inmediatamente en cascada a todas las tablas descendientes
de las tablas de la lista de invocación. Las tablas descendientes
incluyen todas las tablas de claves foráneas descendientes, las tablas de
etapas inmediatas y las tablas de consulta materializada inmediatas
que son descendientes de las tablas de la lista de invocación o que son
descendientes de las tablas de claves foráneas descendientes.
Sentencias 1345
SET INTEGRITY
IMMEDIATE CHECKED
Especifica que la tabla debe sacarse del estado pendiente de establecer
integridad realizando el proceso de integridad necesario en la tabla. Esto se
realiza de acuerdo con la información que se ha establecido en las columnas
STATUS y CONST_CHECKED de la vista de catálogo SYSCAT.TABLES. Es
decir:
v El valor de la columna STATUS debe ser 'C' (la tabla se encuentra en estado
pendiente de establecer integridad) o se devuelve un error (SQLSTATE
51027), a menos que la tabla sea una tabla de claves foráneas descendiente,
una tabla de consulta materializada descendiente o una tabla de etapas
descendiente de una tabla especificada en la lista, que se encuentre en estado
pendiente de establecer integridad y cuyos ancestros inmediatos también
estén en la lista.
v Si la tabla que está comprobándose está en estado pendiente de establecer
integridad, el valor de CONST_CHECKED indica qué opciones de
integridad deben comprobarse.
Cuando la tabla se saca del estado pendiente de establecer integridad, sus
tablas descendientes se colocan, si es necesario, en estado pendiente de
establecer integridad. Se devuelve un aviso para indicar que las tablas
descendientes se han colocado en estado pendiente de establecer integridad
(SQLSTATE 01586).
Si la tabla es una tabla de consulta materializada mantenida por el sistema, los
datos se comprueban con la consulta y se renuevan en función de las
necesidades. (No se puede utilizar IMMEDIATE CHECKED para las tablas de
consulta materializada mantenidas por el usuario.) Si la tabla es una tabla de
etapas, los datos se comprueban con su definición de consulta y se propagan
en función de las necesidades.
Cuando se comprueba la integridad de una tabla hija:
v Ninguno de sus padres puede estar en estado pendiente de establecer
integridad, o
v cada uno de sus padres debe comprobarse para verificar si existen
violaciones de restricciones en la misma sentencia SET INTEGRITY.
Cuando se renueva una tabla de consulta materializada inmediata o cuando se
propagan deltas a una tabla de etapas:
v Ninguna de sus tablas subyacentes puede estar en estado pendiente de
establecer integridad, o
v cada una de sus tablas subyacentes debe comprobarse en la misma sentencia
SET INTEGRITY.
De lo contrario, se devolverá un error (SQLSTATE 428A8).
opciones-seleccionadas-tabla
opciones-en-línea
Especifica la accesibilidad de la tabla mientras se está procesando.
ALLOW NO ACCESS
Especifica que ningún otro usuario puede acceder a la tabla
mientras se está procesando, excepto si utiliza el nivel de
aislamiento de lectura no confirmada.
ALLOW READ ACCESS
Especifica que los demás usuarios tienen acceso de sólo lectura a la
tabla mientras se procesa.
Sentencias 1347
SET INTEGRITY
Sentencias 1349
SET INTEGRITY
opciones-integridad
Permite definir los tipos de proceso de integridad necesarios que deben
eludirse cuando se saca la tabla del estado pendiente de establecer
integridad.
ALL
La tabla se sacará inmediatamente del estado pendiente de establecer
integridad sin efectuar ningún proceso de integridad necesario.
FOREIGN KEY
No se realizará la comprobación de las restricciones de clave foránea
necesaria al sacar la tabla del estado pendiente de establecer
integridad.
CHECK
No se realizará la comprobación de las restricciones de comprobación
necesaria al sacar la tabla del estado pendiente de establecer
integridad.
MATERIALIZED QUERY
No se realizará la renovación necesaria de una tabla de consulta
materializada al sacar la tabla del estado pendiente de establecer
integridad.
GENERATED COLUMN
No se realizará la comprobación de las restricciones de columna
generada necesaria al sacar la tabla del estado pendiente de establecer
integridad.
STAGING
No se realizará la propagación de datos necesaria a una tabla de etapas
al sacar la tabla del estado pendiente de establecer integridad.
Sentencias 1351
SET INTEGRITY
Notas
v Efectos en las tablas que están en uno de los estados restringidos relacionados
con establecer integridad:
– La utilización de INSERT, UPDATE o DELETE no está permitida en una tabla
que está en estado de acceso de lectura o sin acceso. Además, se rechazará
cualquier sentencia que requiera una modificación de este tipo para una tabla
que se encuentra en un estado de este tipo. Por ejemplo, no está permitido
suprimir una fila de una tabla padre que se aplica en cascada a una tabla
dependiente que está en estado sin acceso.
– La utilización de SELECT no está permitida en una tabla que está en estado
sin acceso. Además, se rechazará cualquier sentencia que requiera acceso de
lectura a una tabla que está en estado sin acceso.
– Normalmente las nuevas restricciones añadidas a una tabla se imponen
inmediatamente. Sin embargo, si la tabla está en estado pendiente de
establecer integridad, la comprobación de cualquier restricción nueva se
diferirá hasta que se saque la tabla del estado pendiente de establecer
integridad. Si la tabla está en estado pendiente de establecer integridad, la
adición de una nueva restricción causará que la tabla se coloque en estado sin
acceso pendiente de establecer integridad, pues la validez de los datos está en
peligro.
– La sentencia CREATE INDEX no puede hacer referencia a ninguna tabla que
esté en estado de acceso de lectura o sin acceso. De forma similar, una
sentencia ALTER TABLE para añadir una clave primaria o una restricción de
unicidad no puede hacer referencia a ninguna tabla que esté en estado de
acceso de lectura o sin acceso.
– El programa de utilidad de importación no puede ejecutarse en una tabla que
está en estado de acceso de lectura o sin acceso.
Sentencias 1353
SET INTEGRITY
Sentencias 1355
SET INTEGRITY
Sentencias 1357
SET INTEGRITY
Ejemplos
v Ejemplo 1: El siguiente es un ejemplo de una consulta que proporciona
información acerca del estado pendiente de establecer integridad y los estados
de restricción de acceso relacionados con establecer integridad de las tablas.
SUBSTR se utiliza para extraer bytes individuales de la columna
CONST_CHECKED de SYSCAT.TABLES. El primer byte representa las
restricciones de clave foránea; el segundo byte representa las restricciones de
comprobación; el quinto byte representa la integridad de tabla de consulta
materializada; el sexto byte representa las restricciones de columna generada; el
séptimo byte representa la integridad de tabla de etapas, y el octavo byte
representa las restricciones de particionamiento de datos. STATUS proporciona el
estado pendiente de establecer integridad y ACCESS_MODE proporciona el
estado de restricción de acceso relacionado con establecer integridad.
SELECT TABNAME, STATUS, ACCESS_MODE,
SUBSTR(CONST_CHECKED,1,1) AS FK_CHECKED,
SUBSTR(CONST_CHECKED,2,1) AS CC_CHECKED,
SUBSTR(CONST_CHECKED,5,1) AS MQT_CHECKED,
SUBSTR(CONST_CHECKED,6,1) AS GC_CHECKED,
SUBSTR(CONST_CHECKED,7,1) AS STG_CHECKED,
SUBSTR(CONST_CHECKED,8,1) AS DP_CHECKED
FROM SYSCAT.TABLES
Sentencias 1359
SET INTEGRITY
utiliza en la tabla SALES para permitir las lecturas simultáneas de los datos
existentes mientras se realiza la comprobación de integridad de la parte cargada
de la tabla.
LOAD FROM 2000_DATA.DEL OF DEL
INSERT INTO SALES ALLOW READ ACCESS;
LOAD FROM 2001_DATA.DEL OF DEL
INSERT INTO SALES ALLOW READ ACCESS;
SET INTEGRITY FOR SALES ALLOW READ ACCESS IMMEDIATE CHECKED
FOR EXCEPTION IN SALES USE SALES_EXCEPTIONS;
REFRESH TABLE SALES_SUMMARY;
v Ejemplo 10: Enlace una partición nueva a una tabla particionada de datos
denominada SALES. Efectúe una comprobación incremental de las violaciones
de restricciones en los datos enlazados de la tabla SALES y renueve de modo
incremental la tabla SALES_SUMMARY dependiente. La opción ALLOW WRITE
ACCESS se utiliza en ambas tablas para permitir las actualizaciones simultáneas
mientras se realiza la comprobación de integridad.
ALTER TABLE SALES
ATTACH PARTITION STARTING (100) ENDING (200)
FROM SOURCE;
SET INTEGRITY FOR SALES ALLOW WRITE ACCESS, SALES_SUMMARY ALLOW WRITE ACCESS
IMMEDIATE CHECKED FOR EXCEPTION IN SALES
USE SALES_EXCEPTIONS;
v Ejemplo 11: Desenlace una partición de una tabla particionada de datos
denominada SALES. Renueve de manera incremental la tabla
SALES_SUMMARY dependiente.
ALTER TABLE SALES
DETACH PARTITION 2000_PART INTO ARCHIVE_TABLE;
SET INTEGRITY FOR SALES_SUMMARY
IMMEDIATE CHECKED;
v Ejemplo 12: Una nueva tabla de consulta materializada mantenida por el usuario
se quita del estado de pendiente de establecimiento de integridad.
CREATE TABLE YEARLY_SALES
AS (SELECT YEAR, SUM(SALES)AS SALES
FROM FACT_TABLE GROUP BY YEAR)
DATA INITIALLY DEFERRED REFRESH DEFERRED MAINTAINED BY USER
La tabla SALES sale del estado pendiente de SET INTEGRITY y los datos
nuevos están disponibles para que las aplicaciones los utilicen de inmediato.
Información relacionada:
SET PASSTHRU
La sentencia SET PASSTHRU abre y cierra una sesión para someter directamente el
SQL nativo de una fuente de datos a esa fuente de datos.
Invocación
Autorización
Sintaxis
SET PASSTHRU nombre-servidor
RESET
Descripción
nombre-servidor
Indica la fuente de datos para la que se debe abrir una sesión de paso a través.
nombre-servidor debe identificar una fuente de datos que esté descrita en el
catálogo.
RESET
Cierra una sesión de paso a través.
Notas
v A las fuentes de datos de Microsoft SQL Server, Sybase y Oracle se aplican las
restricciones siguientes:
– Las transacciones definidas por el usuario no pueden utilizarse para fuentes
de datos de Microsoft SQL Server y Sybase en modalidad de paso a través,
pues Microsoft SQL Server y Sybase restringen qué sentencias de SQL pueden
especificarse dentro de una transacción definida por el usuario. Puesto que
DB2 no analiza las sentencias de SQL que se procesan en modalidad de paso
a través, no es posible detectar si el usuario ha especificado una sentencia de
SQL que está permitida dentro de una transacción definida por el usuario.
– La cláusula COMPUTE no recibe soporte en fuentes de datos de Microsoft
SQL Server y Sybase.
– Las sentencias de DDL no están sujetas a la semántica de transacción en
fuentes de datos de Microsoft SQL Server, Oracle y Sybase. Microsoft SQL
Server, Oracle o Sybase confirman la operación automáticamente cuando ésta
se ha completado. Si se produce una retrotracción, el DDL no se retrotrae.
Ejemplos
v Ejemplo 1: Inicie una sesión de paso a través para la fuente de datos BACKEND.
Sentencias 1361
SET PASSTHRU
SET PATH
La sentencia SET PATH cambia el valor del registro especial CURRENT PATH.
Invocación
Autorización
No se necesita.
Sintaxis
,
CURRENT =
SET PATH nombre-esquema
CURRENT_PATH SYSTEM PATH
USER
CURRENT PATH
CURRENT_PATH
CURRENT PACKAGE PATH
variable-lenguaje-principal
constante-serie
Descripción
nombre-esquema
Este nombre, que consta de una sola parte, identifica un esquema que existe en
el servidor de aplicaciones. No se efectúa ninguna validación de que existe el
esquema en el momento en que se establece la vía de acceso. Si, por ejemplo,
un nombre-esquema está mal escrito, el error no se capturará y podría afectar a
las operaciones posteriores de SQL.
SYSTEM PATH
Este valor equivale a especificar los nombres de esquema
"SYSIBM","SYSFUN","SYSPROC","SYSIBMADM".
USER
El valor del registro especial USER.
CURRENT PATH
El valor del registro especial CURRENT PATH antes que se ejecute esta
sentencia.
CURRENT PACKAGE PATH
El valor del registro especial CURRENT PACKAGE PATH.
variable-lenguaje-principal
Una variable de tipo CHAR o VARCHAR. La longitud del contenido de la
variable-lenguaje-principal no debe ser mayor 128 bytes (SQLSTATE 42815). No
puede establecerse en nulo. Si una variable-lenguaje-principal tiene asociada una
variable de indicador, el valor de dicha variable de indicador no debe indicar
un valor nulo (SQLSTATE 42815).
Sentencias 1363
SET PATH
Normas
v Un nombre de esquema no puede aparecer más de una vez en la vía de acceso a
SQL (SQLSTATE 42732).
v El nombre de esquema SYSPUBLIC no puede especificarse en la vía de acceso
de SQL (SQLSTATE 42815).
v El número de esquemas que se pueden especificar está limitado por la longitud
total del registro especial CURRENT PATH. La serie del registro especial se crea
tomando cada nombre de esquema especificado y eliminando los blancos de
cola, delimitando con comillas dobles, doblando las comillas dentro del nombre
de esquema cuando sea necesario y, después, separando cada nombre de
esquema mediante una coma. La longitud de la serie resultante no puede
exceder de 2048 bytes (SQLSTATE 42907).
Notas
v El valor inicial del registro especial CURRENT PATH es
"SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","X" donde la X es el valor del
registro especial USER.
v No es necesario especificar el esquema SYSIBM. Si no se incluye en la vía de
acceso de SQL, se supone implícitamente que es el primer esquema (en este
caso, no se incluye en el registro especial CURRENT PATH).
v El registro especial CURRENT PATH especifica la vía de acceso SQL que se
utiliza para resolver nombres de función, nombres de procedimiento, nombres
de tipo de datos, nombres de variable global y nombres de objeto de módulo en
sentencias de SQL dinámico. La opción de vinculación FUNCPATH especifica la
vía de acceso SQL que se debe utilizar para resolver los nombres de función, los
nombres de procedimiento, los nombres de tipo de datos, los nombres de
variable global y los nombres de objeto de módulo en las sentencias de SQL
estático.
v Alternativas de sintaxis: Las siguientes alternativas de sintaxis reciben soporte
para mantener la compatibilidad con las versiones anteriores de los productos
DB2 y con otros productos de base de datos. Estas alternativas no son estándar y
no deberían utilizarse.
– CURRENT FUNCTION PATH puede utilizarse en lugar de CURRENT PATH
Ejemplos
v Ejemplo 1: La sentencia siguiente establece el registro especial CURRENT PATH.
SET PATH = FERMAT, "McDrw #8", SYSIBM
v Ejemplo 2: El ejemplo siguiente recupera el valor actual del registro especial
CURRENT PATH en la variable del lenguaje principal denominada CURPATH.
EXEC SQL VALUES (CURRENT PATH) INTO :CURPATH;
SET ROLE
La sentencia SET ROLE comprueba si el ID de autorización de la sesión es un
miembro de un rol específico. Un ID de autorización llega a ser miembro de un rol
cuando dicho rol se otorga al ID de autorización o a un grupo o rol en el que es
miembro el ID de autorización.
Invocación
Autorización
No se necesita.
Sintaxis
=
SET ROLE nombre-rol
Descripción
nombre-rol
Especifica un ID de rol en la que ha de verificarse su pertenencia como
miembro del ID de autorización de la sesión. El nombre-rol debe identificar un
rol existente en el servidor actual (SQLSTATE 42704). Si el ID de autorización
de la sesión no es miembro de nombre-rol, se devuelve un error (SQLSTATE
42501).
Notas
v Todos los roles que se han otorgado a un ID de autorización se utilizan para la
comprobación de autorizaciones. La sentencia SET ROLE no afecta a los roles
que se utilizan para esta comprobación de autorizaciones. Utilice las sentencias
GRANT ROLE y REVOKE ROLE para cambiar los roles de los que es miembro
un ID de autorización.
Ejemplos
v Ejemplo 1: Al usuario WALID se le ha otorgado el rol EDITOR, pero no el rol
AUTHOR. Compruebe que WALID sea miembro deL rol EDITOR.
SET ROLE EDITOR
v Ejemplo 2: Compruebe que WALID no sea miembro del rol AUTHOR. La
siguiente sentencia devuelve un error (SQLSTATE 42501).
SET ROLE AUTHOR
Sentencias 1365
SET SCHEMA
SET SCHEMA
La sentencia SET SCHEMA cambia el valor del registro especial CURRENT
SCHEMA.
Invocación
Autorización
No se necesita.
Sintaxis
CURRENT =
SET SCHEMA nombre-esquema
USER
SESSION_USER
SYSTEM_USER
CURRENT_USER
variable-lenguaje-principal
constante-serie
Descripción
nombre-esquema
Este nombre, que consta de una sola parte, identifica un esquema que existe en
el servidor de aplicaciones. La longitud no debe ser mayor que 128 bytes
(SQLSTATE 42815). No se efectúa ninguna validación de que existe el esquema
en el momento en que se establece el esquema. Si nombre-esquema está escrito
incorrectamente, no se capturará y ello puede afectar a la forma en la que se
ejecutan las sentencias subsiguientes de SQL.
USER
El valor del registro especial USER.
SESSION_USER
El valor del registro especial SESSION_USER.
SYSTEM_USER
El valor del registro especial SYSTEM_USER.
CURRENT_USER
El valor del registro especial CURRENT_USER.
variable-lenguaje-principal
Una variable de tipo CHAR o VARCHAR. La longitud del contenido de la
variable-lenguaje-principal no debe ser mayor que 128 bytes (SQLSTATE 42815).
No puede establecerse en nulo. Si una variable-lenguaje-principal tiene asociada
una variable de indicador, el valor de dicha variable de indicador no debe
indicar un valor nulo (SQLSTATE 42815).
Normas
v Si el valor especificado no se adapta a las normas para un nombre-esquema, se
produce un error (SQLSTATE 3F000).
v El valor del registro especial CURRENT SCHEMA se utiliza como nombre de
esquema en todas las sentencias de SQL dinámico, con la excepción de la
sentencia CREATE SCHEMA, donde existe una referencia no calificada a un
objeto de base de datos.
v La opción de enlace QUALIFIER especifica el nombre de esquema que debe
utilizarse como calificador para los nombres de objetos de base de datos no
calificados en las sentencias de SQL estático.
Notas
v El valor inicial del registro especial CURRENT SCHEMA equivale a USER.
v El establecimiento del registro especial CURRENT SCHEMA no afecta al registro
especial CURRENT PATH. En consecuencia, el registro especial CURRENT
SCHEMA no se incluirá en la vía de acceso de SQL y es posible que la
resolución de funciones, procedimientos y tipos definidos por el usuario no
encuentre estos objetos. Para incluir el valor del esquema actual en la vía de
acceso de SQL, siempre que se emita la sentencia SET SCHEMA, emita también
la sentencia SET PATH incluyendo el nombre de esquema de la sentencia SET
SCHEMA.
v CURRENT SQLID se acepta como sinónimo de CURRENT SCHEMA y el efecto
de una sentencia SET CURRENT SQLID será idéntico al de una sentencia SET
CURRENT SCHEMA. No tendrán lugar otros efectos, como, por ejemplo,
cambios de autorización de la sentencia.
Ejemplos
v Ejemplo 1: La sentencia siguiente establece el registro especial CURRENT
SCHEMA.
SET SCHEMA RICK
v Ejemplo 2: El ejemplo siguiente recupera el valor actual del registro especial
CURRENT SCHEMA en la variable del lenguaje principal denominada
CURSCHEMA.
v EXEC SQL VALUES (CURRENT SCHEMA) INTO :CURSCHEMA;
Sentencias 1367
SET SERVER OPTION
Invocación
Autorización
No se necesita.
Sintaxis
SET SERVER OPTION nombre-opción-servidor TO constante-serie
Descripción
nombre-opción-servidor
Nombra la opción del servidor que se debe establecer.
TO constante-serie
Especifica un valor para nombre-opción-servidor como una constante de serie de
caracteres.
SERVER nombre-servidor
Nombra la fuente de datos a la que se aplica nombre-opción-servidor. Debe ser
un servidor descrito en el catálogo.
Notas
v Los nombres de opción del servidor se pueden entrar en mayúsculas o
minúsculas.
v Se pueden someter una o varias sentencias SET SERVER OPTION cuando un
usuario o una aplicación se conecta a la base de datos federada. La sentencia (o
sentencias) debe especificarse en el inicio de la primera unidad de trabajo que se
procese después de establecer la conexión.
v SYSCAT.SERVEROPTIONS no se actualizará basándose en una sentencia SET
SERVER OPTION, pues este cambio sólo afecta a la conexión actual.
v En el caso del SQL estático, si se utiliza la sentencia SET SERVER OPTION sólo
se afecta a la ejecución de la sentencia de SQL estático. Si se utiliza la sentencia
SET SERVER OPTION, no tiene ningún efecto en los planes generados por el
optimizador.
Ejemplos
v Ejemplo 1: Se ha definido una fuente de datos Oracle denominado ORASERV
para una base de datos federada denominada DJDB. ORASERV se ha
configurado para inhabilitar la indicación de planes. Sin embargo, el DBA
desearía que las indicaciones de planes estuviesen habilitadas para una ejecución
de prueba de una aplicación nueva. Cuando la ejecución finalice, las
indicaciones de planes se inhabilitarán de nuevo.
CONNECT TO DJDB;
strcpy(stmt,"establecer la opción de servidor plan_hints en ’Y’ para el
servidor oraserv");
EXEC SQL EXECUTE IMMEDIATE :stmt;
strcpy(stmt,"select c1 from ora_t1 where c1 > 100"); /*Generar indicac. plan*/
EXEC SQL PREPARE s1 FROM :stmt;
EXEC SQL DECLARE c1 CURSOR FOR s1;
EXEC SQL OPEN c1;
EXEC SQL FETCH c1 INTO :hv;
v Ejemplo 2: Ha establecido la opción de servidor PASSWORD en ‘Y’ (validando
las contraseñas en la fuente de datos) para todas las fuentes de datos de Oracle
8. Sin embargo, para una sesión en particular en la que una aplicación se conecta
con la base de datos federada para acceder a una fuente de datos de Oracle 8
específico —uno que se ha definido para la base de datos federada DJDB como
ORA8A— no será necesario validar las contraseñas.
CONNECT TO DJDB;
strcpy(stmt,"establecer la opción de servidor password en ’N’ para
el servidor ora8a");
EXEC SQL PREPARE STMT_NAME FROM :stmt;
EXEC SQL EXECUTE STMT_NAME FROM :stmt;
strcpy(stmt,"seleccionar max(c1) en ora8a_t1");
EXEC SQL PREPARE STMT_NAME FROM :stmt;
EXEC SQL DECLARE c1 CURSOR FOR STMT_NAME;
EXEC SQL OPEN c1; /*No valida la contraseña en ora8a*/
EXEC SQL FETCH c1 INTO :hv;
Sentencias 1369
SET SESSION AUTHORIZATION
Invocación
Autorización
Sintaxis
=
SET SESSION AUTHORIZATION nombre-autorización
SESSION_USER USER
CURRENT_USER
SYSTEM_USER
variable-lenguaje-principal
constante-serie
ALLOW ADMINISTRATION
Descripción
nombre-autorización
Especifica el ID de autorización que se debe utilizar como el nuevo valor para
el registro especial SESSION_USER.
USER
El valor del registro especial USER.
CURRENT_USER
El valor del registro especial CURRENT USER.
SYSTEM_USER
El valor del registro especial SYSTEM_USER.
variable-lenguaje-principal
Una variable de tipo CHAR o VARCHAR. La longitud del contenido de
variable-lenguaje-principal no debe ser mayor 128 bytes (SQLSTATE 28000). No
puede establecerse en nulo. Si una variable-lenguaje-principal tiene asociada una
variable de indicador, el valor de dicha variable de indicador no debe indicar
un valor nulo (SQLSTATE 28000).
Normas
v El valor especificado para el registro especial SESSION_USER que cumple con
las normas de un ID de autorización de tipo USER (SQLSTATE 42602).
v La opción de vinculación OWNER especifica el ID de autorización que se debe
utilizar para sentencias de SQL estático.
v Esta sentencia sólo se puede emitir como la primera sentencia (que no sea una
sentencia de registro especial SET) en una nueva unidad de trabajo sin ningún
cursor WITH HOLD abierto (SQLSTATE 25001). Esta restricción incluye
cualquier petición PREPARE correspondiente a una sentencia que no sea una
sentencia de registro especial SET.
v El valor del registro especial SESSION_USER se utiliza como el ID de
autorización para todas las sentencias de SQL dinámico de un paquete vinculado
con la opción de vinculación DYNAMICRULES(RUN). (Esto incluye
INVOKERUN y DEFINERUN cuando el paquete no lo utiliza ninguna rutina). Si
un paquete utiliza autorización de propietario, invocador o definidor basado en
la opción DYNAMICRULES, esta sentencia no tiene ningún efecto sobre las
sentencias de SQL dinámico emitidas desde dentro del paquete.
Notas
v La sentencia SET SESSION AUTHORIZATION le permite modificar el ID de
autorización de sesión. El ID de autorización de sesión representa el usuario
actual de la conexión y es el ID de autorización que DB2 tiene en cuenta para
todos los controles de autorizaciones relativos al SQL dinámico dentro de un
paquete de ejecución DYNAMICRULES. El registro especial SESSION_USER se
puede utilizar para visualizar el valor actual de este ID de autorización de
sesión.
v El valor inicial del registro especial SESSION_USER para una nueva conexión es
el mismo que el valor del registro especial SYSTEM_USER.
v La información de grupo correspondiente al ID de autorización de sesión
especificado en esta sentencia se adquiere en el momento de ejecutar la
sentencia.
v El hecho de establecer el registro especial SESSION_USER no afecta a los
registros especiales CURRENT SCHEMA ni CURRENT PATH.
v Si se produce algún error durante el establecimiento del registro especial
SESSION_USER, el registro vuelve a tomar su valor anterior.
v Esta sentencia no se debe utilizar para permitir que varios usuarios diferentes
reutilicen la misma conexión, puesto que cada usuario heredará la capacidad de
cambiar el valor del registro especial SESSION_USER que tenía el propietario
original de la conexión. Esta sentencia depende del valor de SYSTEM_USER
correspondiente a la comprobación de privilegios y la sentencia SET SESSION
AUTHORIZATION no modifica el ID de autorización de conexión inicial.
Sentencias 1371
SET SESSION AUTHORIZATION
Ejemplos
v Ejemplo 1: La siguiente sentencia establecer el registro especial SESSION_USER.
SET SESSION_USER = RAJIV
v Ejemplo 2: Establezca el ID de autorización de sesión (el registro especial
SESSION_USER) de modo que sea un valor del ID de autorización del sistema,
que es el ID que ha establecido la conexión en la que se ha emitido la sentencia.
SET SESSION AUTHORIZATION SYSTEM_USER
Invocación
Autorización
Sintaxis
=
SET USAGE LIST nombre-lista-uso STATE ACTIVE
INACTIVE
RELEASED
variable-host
Descripción
nombre-lista-uso
Identifica la lista de uso. El nombre-lista-uso, incluido el calificador implícito o
explícito, debe identificar una lista de uso descrita en el catálogo (SQLSTATE
42704).
ACTIVE
Indica que la lista de uso está activada para la supervisión. La memoria de la
lista de uso se asigna cuando una sección hace referencia por primera vez a la
tabla o al índice. Si la lista de uso es para una tabla o índice particionados, la
memoria de la lista de uso se asigna cuando una sección hace referencia por
primera vez a la tabla o al índice. En un entorno de base de datos particionada
o un entorno DB2 pureScale, se asigna memoria en cada miembro. Si la lista de
uso ya está en estado ACTIVO, se devuelve un aviso (SQLSTATE 01598).
Al activarse, se eliminan los datos de la lista de uso y la recopilación empieza
por el principio de la lista.
INACTIVE
Indica que la lista de uso está desactivada para la supervisión. Si el estado de
una lista de uso ya se ha establecido, esta palabra clave se ignorará. Si el
estado de la lista de uso para una tabla o índice particionados se establece en
INACTIVO, el estado de la lista de uso para cada partición se establecerá en
INACTIVO. Si el estado ya es INACTIVO, se ignorará la palabra clave. De
forma similar, en un entorno de base de datos particionada o en un entorno
DB2 pureScale, el estado de la lista de uso para cada miembro se establece en
INACTIVO. Si el estado ya es INACTIVO, se ignorará la palabra clave.
Los datos recopilados en la lista no se eliminarán cuando el estado de la lista
de uso se establezca en INACTIVO.
Sentencias 1373
SET USAGE LIST STATE
RELEASED
Indica la memoria asociada a una lista de uso se ha liberado. Si el estado de la
lista de uso para una tabla o índice particionados se establece en RELEASED,
se publicará la memoria asociada con cada partición de datos. En un entorno
de base de datos particionada o en un entorno DB2 pureScale, se publicará la
memoria asociada con cada miembro.
Notas
v Estado actual determinante: el estado actual de una lista de uso se determina
utilizando la función incorporada MON_GET_USAGE_LIST_STATUS.
v Consideraciones para DB2 pureScale o entornos de bases de datos
particionadass: si se activa una lista de uso para una tabla o índice
particionados, se asignará memoria a cada partición de datos. De forma similar,
en un entorno de base de datos particionada o en un entorno DB2 pureScale, se
asignará memoria a cada miembro activo.
v Asignación de memoria para miembros no disponibles: si un miembro no está
disponible en el momento de la activación, la memoria se asigna cuando el
miembro se vuelve a activar (si el estado de la lista de uso todavía está
establecido en activo). Esto también se aplica cuando se añade un miembro al
clúster.
v Asignación de memoria a particiones de datos que se están añadiendo o
adjuntando: para las particiones de datos que se están añadiendo o adjuntando,
la memoria asociada con la lista de uso para la partición recién añadida o
adjuntada se asigna cuando se ejecuta la siguiente sección que hace referencia a
la tabla o al índice particionados.
v Establecimiento de INACTIVE independientemente: si la lista de uso se ha
creado con la propiedad, WHEN FULL DEACTIVATE, el estado de la lista de
uso de cada partición de datos o miembro se establece en INACTIVE
independientemente.
v Reactivación implícita de una lista de uso activa: Si el estado de una lista de
uso INACTIVE ON START DATABASE se establece en ACTIVE en un entorno
de base de datos particionada o en un entorno DB2 pureScale, su
comportamiento es similar al de ACTIVE ON START DATABASE hasta que la
lista de uso se desactiva explícitamente o hasta que la instancia se recicla. Es
decir, si el estado de una lista de uso está activo cuando se desactiva un
miembro de base de datos y el miembro de la base de datos se vuelve activar
posteriormente, la lista de uso para este miembro también se vuelve a activar de
forma implícita.
v Definición del estado publicado: una lista de uso se considera en estado liberado
si se ha definido y no se ha activado (explícita o automáticamente) o se ha
liberado utilizando la sentencia SET USAGE LIST STATE. La función
MON_GET_USAGE_LIST_STATUS no devuelve las listas de uso en el estado
publicado.
v Estados pendientes de activación, activos y anómalos: si se activa una lista de
uso (explícita o automáticamente), el estado de la lista de uso se establece en
pendiente de activación y la memoria se asigna cuando la sección hace referencia
por primera vez a la tabla o al índice. Llegado este punto, el estado de la lista de
uso se establece en activo. Si la memoria de la lista de uso no se puede asignar,
el estado de la lista de uso se establece en anómalo y se debe activar
explícitamente utilizando la sentencia SET USAGE LIST STATE.
v Las listas de uso inactivas permanecen inactivas cuando se reactiva el miembro
de la base de datos: Si el estado de una lista de uso ACTIVE ON START
DATABASE se establece en INACTIVE en un entorno de base de datos
particionada o en un entorno DB2 pureScale, su comportamiento es similar al de
Sentencias 1375
SET variable
SET variable
La sentencia SET variable asigna valores a variables.
Invocación
Autorización
Para ejecutar esta sentencia con una selección-completa-fila como la parte derecha de
la asignación, los privilegios del ID de autorización de la sentencia deben incluir
los privilegios necesarios para ejecutar la selección-completa-fila. Consulte la sección
Autorización en "Consultas de SQL".
Sintaxis
SET
variable-destino = expresión
NULL
DEFAULT
, ,
( variable-destino ) = (
expresión )
NULL
DEFAULT
( seleccióncompleta-fila )
nombre-variable-booleana = condición-búsqueda
TRUE
FALSE
NULL
nombre-variable-matriz [ índice-matriz ] = expresión
NULL
variable-cursor-destino = nombre-variable-cursor
constructor-valor-cursor
NULL
,
variable-fila-destino = ( expresión )
NULL
( seleccióncompleta-fila )
expresión-fila
NULL
variable-destino:
nombre-variable-global
variable-lenguaje-principal
marcador de parámetro
nombre-parámetro-SQL
referencia-campo
nombre-variable-SQL
nombre-variable-transición
..nombre-atributo
referencia-campo:
nombre-variable-fila.nombre-campo
constructor-valor-cursor:
ASENSITIVE
CURSOR
INSENSITIVE ,
( declaración-parámetro )
declaración-parámetro:
Sentencias 1377
SET variable
nombre-parámetro tipo-datos
tipo-datos:
tipo-incorporado
tipo-datos-parámetro-anclado
nombre-tipo-diferenciado
tipo-incorporado:
SMALLINT
INTEGER
INT
BIGINT
(5,0)
DECIMAL
DEC ,0
NUMERIC (entero )
NUM ,entero
(53)
FLOAT
(entero)
REAL
PRECISION
DOUBLE
(34)
DECFLOAT
(16)
(1)
CHARACTER
CHAR (entero) FOR BIT DATA
VARCHAR (entero)
CHARACTER VARYING
CHAR
(1M)
CLOB
CHARACTER LARGE OBJECT (entero )
CHAR K
M
G
(1)
GRAPHIC
(entero)
VARGRAPHIC (entero)
(1M)
DBCLOB
(entero )
K
M
G
(1M)
BLOB
BINARY LARGE OBJECT (entero )
K
M
G
DATE
TIME
( 6 )
TIMESTAMP
( entero )
XML
tipo-datos-parámetro-anclado:
DATA TYPE TO
ANCHOR nombre-variable
nombre-tabla.nombre-columna
Sentencias 1379
SET variable
posibilidad de mantenimiento:
WITHOUT HOLD
WITH HOLD
variable-fila-destino:
(2)
nombre-variable-global
marcador-parámetro
nombre-parámetro-SQL
nombre-variable-SQL
especificación-elemento-matriz-fila
referencia-campo-fila
Notas:
1 El nombre-sentencia no se puede especificar si se ha especificado la
declaración-parámetro.
2 El tipo de datos debe ser un tipo de fila.
Descripción
variable-destino
Identifica la variable de destino de la asignación. Una variable-destino que
represente la misma variable no debe especificarse más de una vez (SQLSTATE
42701).
nombre-variable-global
Identifica la variable global que es el sujeto de la asignación. El
nombre-variable-global debe identificar una variable global que exista en el
servidor actual (SQLSTATE 42704).
variable-lenguaje-principal
Identifica la variable del lenguaje principal que es el sujeto de la
asignación.
marcador-parámetro
Identifica el marcador de parámetro que es el sujeto de la asignación.
nombre-parámetro-SQL
Identifica el parámetro que es el sujeto de la asignación. El parámetro se
debe especificar en la declaración-parámetro de la sentencia CREATE
PROCEDURE.
referencia-campo
Identifica el campo de un valor de tipo de fila que es el destino de la
asignación.
nombre-variable-fila
El nombre de una variable con un tipo de datos que es un tipo de fila.
nombre-campo
El nombre de un campo dentro de un tipo de fila.
nombre-variable-SQL
Identifica la variable de SQL que es el sujeto de la asignación. Las variables
de SQL se deben declarar antes de utilizarlas.
nombre-variable-transición
Identifica la columna que se debe actualizar en la fila de transición. Un
nombre-variable-transición debe identificar una columna en la tabla sujeto de
un activador, calificado opcionalmente por un nombre de correlación que
identifique el nuevo valor (SQLSTATE 42703).
..nombre-atributo
Especifica el atributo de un tipo estructurado que está definido (esto se
denomina asignación de atributos). El nombre-variable-SQL o
nombre-variable-transición especificado debe definirse con un tipo
estructurado definido por el usuario (SQLSTATE 428DP). El
..nombre-atributo debe ser un atributo del tipo estructurado (SQLSTATE
42703). Una asignación que no incluye la cláusula ..nombre-atributo se
denomina asignación convencional.
expresión
Indica el nuevo valor del destino de la asignación. La expresión es cualquier
expresión del tipo que se describe en el apartado "Expresiones". La expresión
no puede incluir una función agregada salvo cuando aparece dentro de una
selección completa escalar (SQLSTATE 42903). En el contexto de una sentencia
CREATE TRIGGER, una expresión puede contener referencias a las variables de
transición OLD y NEW. Las variables de transición debe calificarlas el
nombre-correlación (SQLSTATE 42702).
NULL
Especifica el valor nulo. Si el destino de la asignación es una variable de fila,
se asigna a cada campo el valor nulo. NULL no puede ser el valor en una
asignación de atributos a menos que se convirtiera específicamente al tipo de
datos del atributo (SQLSTATE 429B9).
DEFAULT
Especifica que se debe utilizar el valor por omisión.
En procedimientos SQL, la cláusula DEFAULT puede especificarse sólo para
sentencias de SQL estático. La excepción es que la cláusula DEFAULT puede
especificarse cuando la variable-destino es una variable global de una sentencia
de SQL dinámico.
Si variable-destino es una columna, el valor insertado depende de cómo se haya
definido la columna en la tabla.
v Si la columna se ha definido utilizando la cláusula WITH DEFAULT, el valor
se establece en el valor por omisión que se ha definido para la columna
(consulte cláusula-valor-por-omisión en "ALTER TABLE").
v Si se utiliza la cláusula IDENTITY para definir la columna, el gestor de bases
de datos genera el valor.
v Si la columna se ha definido sin especificar la cláusula WITH DEFAULT, la
cláusula IDENTITY ni la cláusula NOT NULL, el valor es NULL.
v Si la columna se ha definido utilizando la cláusula NOT NULL y:
– No se utiliza la cláusula IDENTITY o
– No se ha utilizado la cláusula WITH DEFAULT o
– se ha utilizado la cláusula DEFAULT NULL
la clave DEFAULT no se puede especificar para dicha columna (SQLSTATE
23502).
Si la variable-destino es una variable de SQL, el valor que se ha insertado es el
valor por omisión, tal como se ha especificado o está implícito en la
declaración de variable.
Sentencias 1381
SET variable
constructor-valor-cursor
Un constructor-valor-cursor especifica la sentencia-select asociada con la variable
de destino. La asignación de un constructor-valor-cursor a una variable de cursor
define el cursor subyacente de esa variable de cursor.
ASENSITIVE o INSENSITIVE
Especifica si el cursor es sensible o insensible a los cambios. Consulte
“DECLARE CURSOR” para obtener más información. El valor por omisión
es ASENSITIVE.
ASENSITIVE
Especifica que el cursor debe ser todo lo sensible que sea posible para
las inserciones, actualizaciones o supresiones realizadas en las filas
subyacentes de la tabla de resultados, en función de cómo se haya
optimizado sentencia-select. ASENSITIVE es el valor por omisión.
INSENSITIVE
Especifica que el cursor no debe contar con sensibilidad para las
inserciones, actualizaciones o supresiones que se han realizado en las
filas subyacentes de la tabla de resultados. Si se especifica
INSENSITIVE, el cursor es de sólo lectura y la tabla de resultados se
materializa al abrirse el cursor. Como resultado de ello, el tamaño de la
tabla de resultados, el orden de las filas y los valores de cada fila no
cambian tras abrirse el cursor. La sentencia SELECT no puede contener
una cláusula FOR UPDATE, y el cursor no puede utilizarse para las
actualizaciones o supresiones posicionadas.
(declaración-parámetro, ...)
Especifica los parámetros de entrada del cursor, incluido el nombre y el
tipo de datos de cada parámetro. Sólo se pueden especificar parámetros de
entrada con nombre si la sentencia-select también está especificada en el
constructor-valor-cursor (SQLSTATE 428HU).
nombre-parámetro
Asigna un nombre al parámetro de cursor que se debe utilizar como
variable de SQL dentro de la sentencia-select. El nombre no puede ser
igual que ningún otro nombre de parámetro del cursor. Los nombres
deben elegirse también evitando nombres de columna que se puedan
utilizar en la sentencia-select, ya que los nombres de columna se
resuelven antes que los nombres de parámetro.
tipo-datos
Especifica el tipo de datos del parámetro de cursor utilizado dentro de
una sentencia-select. No se pueden especificar tipos estructurados ni
tipos de referencia (SQLSTATE 429BB).
tipo-incorporado
Especifica un tipo de datos incorporado. Para obtener una
descripción más completa de cada tipo de datos incorporado,
consulte "CREATE TABLE".
tipo-datos-parámetro-anclado
Identifica otro objeto que se utiliza para determinar el tipo de
datos del parámetro de cursor. 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.
Sentencias 1383
SET variable
nombre-variable
Identifica una variable de SQL local, un parámetro SQL o
una variable global. El tipo de datos de la variable a la que
se hace referencia se utiliza como tipo de datos para el
parámetro de cursor.
nombre-tabla.nombre-columna
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 el parámetro de cursor.
nombre-tipo-diferenciado
Especifica el nombre de un tipo diferenciado. Si se especifica el
nombre-tipo-diferenciado sin un nombre de esquema, el tipo
diferenciado se resuelve buscando en los esquemas de la vía de
acceso de SQL.
posibilidad de mantenimiento
Especifica si se impedirá que el cursor se cierre como consecuencia de una
operación de confirmación. Consulte “DECLARE CURSOR” para obtener
más información. El valor por omisión es WITHOUT HOLD.
WITHOUT HOLD
No impide que el cursor se cierre como consecuencia de una operación
de confirmación.
WITH HOLD
Mantiene recursos en varias unidades de trabajo. Impide que el cursor
se cierre como consecuencia de una operación de confirmación.
sentencia-select
Especifica la sentencia SELECT del cursor. Consulte “sentencia-select” para
obtener más información. Si se incluye una declaración-parámetro en el
constructor-valor-cursor, la sentencia-select no debe incluir ninguna variable
de SQL local ni parámetros de SQL de rutina (SQLSTATE 42704).
nombre-sentencia
Especifica la sentencia-select preparada del cursor. Consulte "PREPARE"
para obtener una explicación de las sentencias preparadas. La variable del
cursor de destino no debe tener un tipo de datos que sea un tipo de cursor
definido por el usuario con tipo firme (SQLSTATE 428HU). No se deben
especificar parámetros de entrada con nombre en el constructor-valor-cursor
si se especifica un nombre-sentencia (SQLSTATE 428HU).
variable-fila-destino
Identifica la variable de fila de destino de la asignación. El tipo de datos debe
ser un tipo de fila.
expresión-fila
Especifica el nuevo valor de fila para el destino de la asignación. Puede ser
cualquier expresión de fila del tipo descrito en “Expresión de fila”. El número
de campos de la fila debe coincidir con el destino de la asignación, y cada
campo de la fila debe poderse asignar al campo correspondiente en el destino
de la asignación. Si los valores fuente y de destino son un tipo de fila definido
por el usuario, los nombres de los tipos deben ser iguales (SQLSTATE 42821).
Normas
v El número de valores que se debe asignar a partir de las expresiones, NULL,
DEFAULT o la selección-completa-fila debe coincidir con el número de
variables-destino especificado para la asignación (SQLSTATE 42802).
v Una sentencia SET variable no puede asignar una variable de SQL y una
variable de transición en una sentencia (SQLSTATE 42997).
v Las variables globales no se pueden asignar dentro de activadores que no se han
definido mediante una sentencia de SQL compuesto (compilado), funciones que
no se han definido mediante una sentencia de SQL compuesto (compilado),
métodos o sentencias de SQL compuesto (en línea) (SQLSTATE 428GX).
v Si el valor que se asigna es una matriz resultante de un constructor de matriz o
de ARRAY_AGG, los tipos base de la matriz y de la variable de destino deben
ser idénticos (SQLSTATE 42821).
v Utilización de tipos de datos anclados: Un tipo de datos anclado no puede
hacer referencia a (SQLSTATE 428HS): un apodo, una tabla con tipo, una vista
con tipo, 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.
v Asignaciones que implican variables de cursor: las asignaciones que hacen
referencia a una variable de cursor y que la establecen en el valor de un
constructor de valor de cursor sólo se pueden utilizar en sentencias de SQL
compuesto (compilado). Todas las sentencias OPEN que utilizan una variable de
cursor deben aparecer en el mismo ámbito que la asignación (SQLSTATE 51044).
Notas
v Se asignan valores a las variables de destino en función de normas de asignación
específicas.
v Sentencia de asignación en procedimientos de SQL: las sentencias de asignación
de los procedimientos de SQL deben ajustarse a las normas de asignación de
SQL. Las asignaciones de series utilizan normas de asignación de recuperación.
v Asignaciones de elementos de matriz: si la asignación tiene la forma SET A[idx]
= rhs, donde A es un nombre de variable de matriz, idx es una expresión
utilizada como índice-matriz y rhs es una expresión del mismo tipo que el
elemento de matriz, entonces:
1. Si la matriz A es el valor nulo, defina A en la matriz vacía.
2. C tiene que ser la cardinalidad de la matriz A.
3. Si A es una matriz común:
– Si idx es menor que o igual a C, el valor en la posición que idx identifica
se sustituye por el valor de rhs.
– Si idx es mayor que C, entonces:
- El valor en posición i, dado que i es mayor que C y menor que idx, se
establece en el valor nulo.
- El valor en posición idx se establece en el valor de rhs.
- La cardinalidad de A se establece en idx.
4. Si A es una matriz asociativa:
– Si idx coincide con un valor de índice de matriz existente, el valor de
elemento cuyo índice de matriz es idx se sustituye por el valor de rhs.
– Si idx no coincide con ningún valor de índice de matriz existente,
entonces:
- La cardinalidad de A aumenta en 1.
- El nuevo valor de elemento se establece en rhs con el valor de índice de
matriz asociado idx.
5. Si idx es menor que o igual a C, el valor en la posición que idx identifica se
sustituye por el valor de rhs.
Sentencias 1385
SET variable
Ejemplos
v Ejemplo 1: Establezca la columna del salario de la fila para la que se ejecuta
actualmente la acción del activador en 50000.
SET NEW_VAR.SALARY = 50000;
O bien:
SET (NEW_VAR.SALARY) = (50000);
v Ejemplo 2: Establezca las columnas del salario y la comisión de la fila para la que
se está ejecutando actualmente la acción de activador en 50000 y 8000,
respectivamente.
SET NEW_VAR.SALARY = 50000, NEW_VAR.COMM = 8000;
O bien:
SET (NEW_VAR.SALARY, NEW_VAR.COMM) = (50000, 8000);
v Ejemplo 3: Establezca la columna del salario y la comisión de la fila para la que
se está ejecutando actualmente la acción del activador en el salario y la comisión
promedio de los empleados del departamento que está asociado a la fila
actualizada.
SET (NEW_VAR.SALARY, NEW_VAR.COMM)
= (SELECT AVG(SALARY), AVG(COMM)
FROM EMPLOYEE E
WHERE E.WORKDEPT = NEW_VAR.WORKDEPT);
O bien:
SET (NEW_VAR.SALARY, NEW_VAR.COMM) = (10000, NEW_VAR.SALARY);
v Ejemplo 5: Incremente la variable de SQL P_SALARY en un 10 por ciento.
SET P_SALARY = P_SALARY + (P_SALARY * .10)
v Ejemplo 6: Establezca la variable de SQL P_SALARY en el valor nulo.
SET P_SALARY = NULL
v Ejemplo 7: Asigne los números 2.71828183 y 3.1415926 al primer y décimo
elemento de la variable de matriz SPECIALNUMBERS. Después de la primera
asignación, la cardinalidad de P_PHONENUMBERS es 1. Después de la segunda
asignación, la cardinalidad es 10 y se ha asignado implícitamente a los
elementos del 2 al 9 el valor nulo.
SET SPECIALNUMBERS[1] = 2.71828183;
Al rellenar los valores de la matriz CAPITALS, los índices de matriz son nombres
de provincia, territorio y país especificados con series y los elementos de matriz
asociados son capitales, que también se especifican con series.
v Ejemplo 10: Asigne nombres fáciles de recordar como índices para los números
de teléfono personales almacenados en la variable de matriz PHONELIST con el
tipo de matriz PERSONAL_PHONENUMBERS.
SET PHONELIST[’Casa’] = ’4163053745’;
SET PHONELIST[’Trabajo’] = ’4163053746’;
SET PHONELIST[’Madre’] = ’4164789683’;
Sentencias 1387
SIGNAL
SIGNAL
La sentencia SIGNAL se utiliza para transmitir una condición de error o de aviso.
Da lugar a que se devuelva un error o un aviso especificándose el SQLSTATE,
junto con el texto de mensaje opcional.
Invocación
Autorización
Sintaxis
VALUE
SIGNAL SQLSTATE constante-serie-sqlstate
variable-serie-sqlstate
nombre-condición
información-señal
información-señal:
Descripción
SQLSTATE VALUE
Especifica el SQLSTATE que se devolverá. Puede utilizarse cualquier valor
válido de SQLSTATE. El valor especificado debe respetar las reglas para los
SQLSTATE:
v Cada carácter debe formar parte de un conjunto de dígitos (de '0' a '9') o de
un conjunto de letras en mayúsculas (de 'A' a 'Z') no acentuadas.
v La clase SQLSTATE (primeros dos caracteres) no puede ser '00', pues esto
representa una finalización satisfactoria.
En el contexto de una sentencia de SQL compuesto (en línea), se deben aplicar
también las normas siguientes:
v La clase SQLSTATE (dos primeros caracteres) no puede ser '01' o '02', dado
que éstos no son clases de error.
v Si la clase SQLSTATE empieza con los números '0' a '6' o las letras 'A' a 'H',
la subclase (los tres últimos caracteres) debe empezar con una letra en el
rango de 'I' a 'Z'.
v Si la clase SQLSTATE empieza con los números '7', '8', '9', o las letras 'I' a 'Z',
la subclase puede ser cualquier carácter de '0' a '9' o de 'A' a 'Z'.
Si SQLSTATE no se ajusta a estas normas, se devuelve un error.
constante-serie-sqlstate
El valor de constante-serie-sqlstate debe ser una constante de serie de
caracteres que contenga exactamente 5 caracteres.
variable-serie-sqlstate
La variable de SQL o parámetro de SQL que se especifica debe
corresponder al tipo de datos CHAR(5) y no debe ser un valor nulo.
nombre-condición
Especifica el nombre de una condición que se devolverá. El nombre-condición
debe declararse en la sentencia-compuesta o identificar una condición que
existe en el servidor actual (SQLSTATE 42373).
SET MESSAGE_TEXT =
Especifica una serie de caracteres que describe el error o aviso. La serie de
caracteres se coloca en el campo SQLERRMC de la SQLCA. Si la serie tiene
más de 70 bytes de longitud, se truncará sin avisar de ello.
expresión-serie-diagnóstico
Una serie literal, o una variable o parámetro local, que describe la
condición del error. Si la serie tiene más de 70 bytes, se truncará.
(expresión-serie-diagnóstico)
Una expresión con un tipo de CHAR o VARCHAR que devuelve una serie de
caracteres de hasta 70 bytes para describir la condición de error. Si la serie
tiene más de 70 bytes, se truncará. Esta opción sólo se proporciona en el
ámbito de una sentencia CREATE TRIGGER para compatibilidad con versiones
anteriores de DB2. Se recomienda no utilizarla de forma continua.
Notas
v Si una sentencia SIGNAL se emite usando un nombre-condición que no tiene un
valor de SQLSTATE asociado y la condición no se gestiona, se devuelve
SQLSTATE 45000 y el SQLCODE se establece en -438. Tenga en cuenta que una
condición de este tipo no se manejará por un manejador de condiciones para
SQLSTATE 45000 que se encuentre en el ámbito de la rutina que emite la
sentencia SIGNAL.
v Si una sentencia SIGNAL se emite utilizando un valor SQLSTATE o un
nombre-condición con un valor SQLSTATE asociado, el valor SQLCODE devuelto
se basa en el valor SQLSTATE de la siguiente manera:
– Si la clase de SQLSTATE especificada es '01' ó '02', se devuelve un aviso o una
condición de no encontrado y el SQLCODE se establece en +438.
– De otro modo, se devuelve una condición de excepción y el SQLCODE se
establece en -438.
v Una sentencia SIGNAL tiene los campos de la SQLCA establecidos de la forma
siguiente:
– Los campos sqlerrd se establecen en cero.
– Los campos sqlwarn se establecen en blancos.
– El campo sqlerrmc se establece en los 70 primeros bytes de MESSAGE_TEXT.
Sentencias 1389
SIGNAL
Ejemplo
TRANSFER OWNERSHIP
La sentencia TRANSFER OWNERSHIP transfiere la propiedad de un objeto de
base de datos.
Invocación
Autorización
Sintaxis
TRANSFER OWNERSHIP OF objetos TO propietario-nuevo
PRESERVE PRIVILEGES
objetos:
designador-alias
CONSTRAINT nombre-tabla.nombre-restricción
DATABASE PARTITION GROUP nombre-grupo-particiones-bd
EVENT MONITOR nombre-supervisor-sucesos
designador-función
FUNCTION MAPPING nombre-correlación-función
INDEX nombre-índice
INDEX EXTENSION nombre-extensión-índice
designador-método
NICKNAME apodo
PACKAGE id-paquete
nombre-esquema. VERSION
id-versión
designador-procedimiento
SCHEMA nombre-esquema
SEQUENCE nombre-secuencia
TABLE nombre-tabla
TABLE HIERARCHY nombre-tabla-raíz
TABLESPACE nombre-espacio-tablas
TRIGGER nombre-activador
TYPE nombre-tipo
DISTINCT
TYPE MAPPING nombre-correlación-tipos
VARIABLE nombre-variable
VIEW nombre-vista
VIEW HIERARCHY nombre-vista-raíz
XSROBJECT nombre-objetoxsr
Sentencias 1391
TRANSFER OWNERSHIP
designador-alias:
FOR TABLE
ALIAS nombre-alias
PUBLIC FOR SEQUENCE
designador-función:
FUNCTION nombre-función
( )
,
tipo-datos
SPECIFIC FUNCTION nombre-específico
designador-método:
designador-procedimiento:
PROCEDURE nombre-procedimiento
( )
,
tipo-datos
SPECIFIC PROCEDURE nombre-específico
propietario-nuevo:
USER nombre-autorización
SESSION_USER
SYSTEM_USER
Descripción
designador-alias
ALIAS nombre-alias
Identifica el alias cuya propiedad se debe transferir. El nombre-alias debe
designar un alias descrito en el catálogo (SQLSTATE 42704). Si se especifica
PUBLIC, el nombre-alias debe identificar un alias público que existe en el
servidor actual (SQLSTATE 42704).
FOR TABLE o FOR SEQUENCE
Especifica el tipo de objeto del alias.
FOR TABLE
El alias es para una tabla, vista o apodo. Cuando se transfiere la
propiedad del alias, el valor de la columna OWNER del alias de la
Sentencias 1393
TRANSFER OWNERSHIP
designador-método
Identifica el método cuya propiedad se debe transferir. Para obtener más
información, consulte el apartado “Designadores de función, método y
procedimiento” en la página 22. El cuerpo del método especificado debe ser un
método descrito en el catálogo (SQLSTATE 42704). La propiedad de los
métodos generados implícitamente por la sentencia CREATE TYPE no se
puede transferir (SQLSTATE 429BT).
Cuando se transfiere la propiedad del método, el valor de la columna OWNER
del método de la vista de catálogo SYSCAT.ROUTINES se sustituye por el ID
de autorización del propietario nuevo.
NICKNAME apodo
Identifica el apodo cuya propiedad se debe transferir. El apodo debe ser un
apodo descrito en el catálogo (SQLSTATE 42704).
Cuando se transfiere la propiedad del apodo, el valor de la columna OWNER
del apodo de la vista de catálogo SYSCAT.TABLES se sustituye por el ID de
autorización del propietario nuevo.
PACKAGE nombre-esquema.id-paquete
Identifica el paquete cuya propiedad se debe transferir. Si no se especifica un
nombre de esquema, el esquema por omisión califica implícitamente el
identificador del paquete. El nombre de esquema y el identificador de paquete,
junto con el identificador de versión especificado implícita o explícitamente,
deben identificar un paquete que esté descrito en el catálogo (SQLSTATE
42704).
VERSION id-versión
Identifica de qué versión del paquete se debe transferir la propiedad. Si no
se especifica ningún valor, la versión se establece por omisión en la serie
de caracteres vacía y se transfiere la propiedad de este paquete. Si existen
varios paquetes con el mismo nombre de paquete pero con distintas
versiones, sólo se transfiere la propiedad del paquete cuyo id-versión se ha
especificado en la sentencia TRANSFER OWNERSHIP. Delimite el
identificador de versión con comillas dobles cuando:
v Se genera mediante la opción del precompilador VERSION(AUTO)
v Comienza con un dígito
v Contiene minúsculas o mayúsculas y minúsculas
Si la sentencia se invoca desde un indicador de mandatos del sistema
operativo, preceda cada delimitador de comillas dobles con una barra
inclinada invertida para asegurarse de que el sistema operativo no divide
los delimitadores.
Sentencias 1395
TRANSFER OWNERSHIP
Sentencias 1397
TRANSFER OWNERSHIP
SYSTEM_USER
Especifica que el valor del registro especial SYSTEM_USER se debe utilizar
como el ID de autorización al cual se transfiere la propiedad del objeto.
PRESERVE PRIVILEGES
Especifica que el propietario actual de un objeto cuya propiedad se va a
transferir seguirá teniendo los privilegios actuales para el objeto tras la
transferencia. Por ejemplo, los privilegios que se otorgaron al creador de una
vista cuando se creó esa vista seguirán en poder del propietario original
incluso después de que se transfiera la propiedad a otro usuario.
Normas
v No se puede transferir la propiedad de la mayoría de los objetos incorporados
(en que el propietario es SYSIBM) (SQLSTATE 42832). No obstante, puede
transferir la propiedad de objetos de esquema creados implícitamente que tienen
SYSIBM en la columna OWNER y no tienen SYSIBM en la columna DEFINER.
v No se puede transferir la propiedad de esquemas cuyo nombre empieza por
'SYS' (SQLSTATE 42832).
v No se puede transferir explícitamente la propiedad de los objetos siguientes
(SQLSTATE 429BT):
– Subtablas de una jerarquía de tablas (se transfieren con la tabla de jerarquía
raíz)
– Subvistas de una jerarquía de vistas (se transfieren con la vista de jerarquía
raíz)
– Índices que están definidos en tablas temporales globales
– Métodos o funciones que se generan implícitamente cuando se crea un tipo
definido por el usuario
– Alias de módulo y módulos
– Paquetes que dependen de procedimientos de SQL (se transfieren con el
procedimiento de SQL)
– Supervisores de sucesos que están activos (se pueden transferir cuando no
están activos)
v Un ID de autorización con la autorización SECADM no puede transferirse la
propiedad de un objeto si no es ya el propietario del objeto (SQLSTATE 42502).
Notas
v Todos los privilegios del propietario actual que se otorgaron como parte de la
creación del objeto se transfieren al nuevo propietario. Si al propietario actual se
le ha revocado un privilegio sobre el objeto y posteriormente se le ha vuelto a
otorgar dicho privilegio, el privilegio no se transferirá.En el caso de los objetos
de esquema creados implícitamente que todavía no se han transferido, se otorga
al nuevo propietario privilegios CREATEIN, DROPIN y ALTERIN sobre el
esquema con la posibilidad de otorgar estos privilegios a otros usuarios.
v Al transferir la propiedad de un objeto de base de datos, el nuevo propietario
debe poseer el conjunto de privilegios sobre los objetos básicos, tal como indican
las dependencias del objeto que son necesarias para mantener la existencia del
objeto sin modificaciones. El nuevo propietario no necesita los privilegios para
crear el objeto si dichos privilegios no son necesarios para mantener la existencia
del objeto.
Por ejemplo:
– Imagine una vista con dependencias SELECT e INSERT sobre una tabla
subyacente. Entre los privilegios que posee el propietario nuevo de la vista
deben encontrarse como mínimo SELECT (con o sin GRANT OPTION) e
Sentencias 1399
TRANSFER OWNERSHIP
Ejemplos
v Ejemplo 1: Transfiera la propiedad de la tabla T1 a PAUL.
TRANSFER OWNERSHIP OF TABLE WALID.T1
TO USER PAUL PRESERVE PRIVILEGES
Sentencias 1401
TRANSFER OWNERSHIP
TRUNCATE
La sentencia TRUNCATE suprime todas las filas de una tabla.
Invocación
Autorización
Para pasar por alto los activadores DELETE definidos en la tabla, los privilegios
del ID de autorización de la sentencia deben incluir, como mínimo, una de las
autorizaciones siguientes para la tabla y todas las subtablas de una jerarquía de
tablas:
v Privilegio ALTER sobre la tabla
v Privilegio CONTROL sobre la tabla
v Autorización DBADM
Para truncar una tabla protegida por una política de seguridad, los privilegios del
ID de autorización de la sentencia deben incluir, como mínimo, una de las
autorizaciones siguientes:
v Privilegio CONTROL sobre la tabla
v Autorización DBADM
Para truncar una tabla que tiene activado el control de acceso a filas, el ID de
autorización de la sentencia debe incluir, como mínimo, una de las autorizaciones
siguientes:
v Privilegio CONTROL sobre la tabla
v Autorización DBADM
Sintaxis
TABLE DROP STORAGE
TRUNCATE nombre-tabla
REUSE STORAGE
Sentencias 1403
TRUNCATE
Descripción
nombre-tabla
Identifica la tabla que se debe truncar. El nombre debe identificar una tabla
que exista en el servidor actual (SQLSTATE 42704), pero no puede ser una
tabla de catálogo (SQLSTATE 42832), un apodo (SQLSTATE 42809), una vista,
una subtabla, una tabla de etapas, una tabla de consulta materializada
mantenida por el sistema, una tabla temporal de período de sistema
(SQLSTATE 428HZ) ni una tabla agrupada por clústeres de rangos (SQLSTATE
42807).
Si nombre-tabla es la tabla raíz de una jerarquía de tablas, se truncarán todas las
tablas de la jerarquía.
DROP STORAGE o REUSE STORAGE
Especifica si se debe descartar o reutilizar el almacenamiento existente
asignado para la tabla. El valor por omisión es DROP STORAGE.
DROP STORAGE
Todo el almacenamiento asignado a la tabla queda libre y disponible. Si se
especifica esta opción (de forma implícita o explícita), se bloquearía una
copia de seguridad en línea.
REUSE STORAGE
Todo el almacenamiento asignado a la tabla seguirá estando asignado a
ella, pero se considerará vacío. Esta opción sólo es aplicable a las tablas
que se encuentran en espacios de tablas DMS; en caso contrario se pasa
por alto.
IGNORE DELETE TRIGGERS o RESTRICT WHEN DELETE TRIGGERS
Especifica lo que debe llevarse a cabo cuando se definen activadores de
supresión en la tabla. El valor por omisión es IGNORE DELETE TRIGGERS.
IGNORE DELETE TRIGGERS
La operación de truncamiento no activa los activadores de supresión que
haya definidos para la tabla.
RESTRICT WHEN DELETE TRIGGERS
Se devuelve un error si hay activadores de supresión definidos en la tabla
(SQLSTATE 428GJ).
CONTINUE IDENTITY
Si existe una columna de identidad para la tabla, el siguiente valor de columna
de identidad generado continúa con el valor siguiente que se habría generado
si la sentencia TRUNCATE no se hubiera ejecutado.
IMMEDIATE
Especifica que la operación de truncamiento se procesa inmediatamente y no
se podrá deshacer. La sentencia debe ser la primera en una transacción
(SQLSTATE 25001).
La tabla truncada está disponible inmediatamente para ser utilizada en la
misma unidad de trabajo. Aunque está permitido que una sentencia
ROLLBACK se ejecute después de una sentencia TRUNCATE, la operación de
truncamiento no se puede deshacer y la tabla permanecerá truncada. Por
ejemplo, si se realiza otra operación de cambio de datos en la tabla después de
la sentencia TRUNCATE IMMEDIATE y a continuación se ejecuta la sentencia
ROLLBACK, la operación de truncamiento no se deshará, pero sí se desharán
las demás operaciones de cambio de datos.
Normas
v Integridad referencial: la tabla, así como todas las tablas de una jerarquía de
tablas, no deben ser una tabla padre en una restricción de referencia impuesta
(SQLSTATE 428GJ). Se permite el uso de una restricción de RI con referencia a sí
misma.
v Tablas particionadas: la tabla no debe tener el estado pendiente de establecer
integridad debido a que se ha alterado para añadirla a una partición de datos
(SQLSTATE 55019). Es necesario comprobar la integridad de la tabla antes de
ejecutar la sentencia TRUNCATE. En DB2 Versión 9.7 Fixpack 1 y releases
posteriores, la tabla no debe tener ninguna partición desenlazada lógicamente
SQLSTATE 55057). La tarea de desconexión de partición asíncrona deberá
haberse completado antes de ejecutar la sentencia TRUNCATE.
v Acceso exclusivo: ninguna otra sesión puede tener un cursor abierto ni un
bloqueo en la tabla (SQLSTATE 25001).
v Cursores WITH HOLD: la sesión actual no puede tener un cursor WITH HOLD
abierto en la tabla (SQLSTATE 25001).
Notas
v Estadísticas de tabla: la sentencia TRUNCATE no modifica las estadísticas de la
tabla.
v Número de filas suprimidas: SQLERRD(3) en la SQLCA tiene el valor -1 para la
operación de truncamiento. El número de filas que se han eliminado de la tabla
no se devuelve.
Ejemplos
v Ejemplo 1: vaciar una tabla de inventario no utilizada independientemente de si
existen activadores y devolver el espacio que tenía asignado.
TRUNCATE TABLE INVENTORY
IGNORE DELETE TRIGGERS
DROP STORAGE
IMMEDIATE
v Ejemplo 2: vaciar una tabla de inventario no utilizada independientemente de si
existen activadores de supresión y conservar el espacio que tiene asignado para
utilizarlo posteriormente.
TRUNCATE TABLE INVENTORY
REUSE STORAGE
IGNORE DELETE TRIGGERS
IMMEDIATE
Sentencias 1405
UPDATE
UPDATE
La sentencia UPDATE actualiza los valores de las columnas especificadas en las
filas de una tabla, vista o apodo, o las tablas, apodos o vistas subyacentes de la
selección completa especificada.
La actualización de una fila de una vista actualiza una fila de su tabla base, si no
se ha definido ningún activador INSTEAD OF para la operación de actualización
en esta vista. Si se ha definido un activador de este tipo, en su lugar se ejecutará el
activador. La actualización de una fila utilizando un apodo actualiza una fila del
objeto de fuente de datos al que hace referencia el apodo.
Invocación
Autorización
Para cada tabla, vista o apodo al que hace referencia una subconsulta, los
privilegios del ID de autorización de la sentencia también deben incluir, como
mínimo, una de las autorizaciones siguientes:
v Privilegio SELECT
v Privilegio CONTROL
v Autorización DATAACCESS
Sintaxis (update-con-búsqueda)
UPDATE nombre-tabla
nombre-vista cláusula-período
apodo
ONLY ( nombre-tabla )
nombre-vista
( selección completa )
cláusula-correlación columnas-include
SET cláusula-asignación
WHERE condición-búsqueda
WITH RR
RS
CS
UR
cláusula-período:
Sintaxis (update-con-posición)
UPDATE nombre-tabla
nombre-vista cláusula-correlación
apodo
ONLY ( nombre-tabla )
nombre-vista
Sentencias 1407
UPDATE
cláusula-correlación:
AS
nombre-correlación
,
( nombre-columna )
columnas-include:
cláusula-asignación:
nombre-columna = expresión
NULL
DEFAULT
..nombre-atributo
, ,
(1)
( nombre-columna ) = ( expresión )
NULL
DEFAULT
..nombre-atributo (2)
seleccióncompleta-fila
Notas:
1 El número de expresiones, de NULL y de DEFAULT debe coincidir con el
número de nombres de columna.
2 El número de columnas en la lista de selección debe coincidir con el número
de nombres de columna.
Descripción
nombre-tabla, nombre-vista, apodo o (selección completa)
Identifica el objeto de la operación de actualización. El nombre debe identificar
uno de los objetos siguientes:
v Una tabla, una vista o un apodo descritos en el catálogo en el servidor
actual
v Una tabla o una vista en un servidor remoto especificado utilizando un
nombre-objeto-remoto
El objeto no debe ser una tabla de catálogo, una vista de una tabla de catálogo
(a menos que sea una de las vistas SYSSTAT actualizables), una tabla de
consulta materializada mantenida por el sistema o una vista de sólo lectura
que no tenga definido el activador INSTEAD OF para sus operaciones de
actualización.
Si nombre-tabla es una tabla con tipo, la sentencia puede actualizar filas de la
tabla o cualquiera de sus subtablas correspondientes. Sólo pueden establecerse
o referirse las columnas de la tabla especificada en la cláusula WHERE. Para
Sentencias 1409
UPDATE
Sentencias 1411
UPDATE
Sentencias 1413
UPDATE
Normas
v Activadores: Las sentencias UPDATE pueden dar lugar a que se ejecuten
activadores. Un activador puede dar lugar a que se ejecuten otras sentencias o a
que se generen condiciones de error basadas en los valores de la actualización. Si
una operación de actualización en una vista da lugar a que se ejecute un
activador INSTEAD OF, se comprobarán la validez, la integridad referencial y
las restricciones de las actualizaciones que se realizan en el activador y no las de
la vista que ha dado lugar a la ejecución del activador o sus tablas subyacentes.
v Asignación: Los valores de actualización se asignan a las columnas según las
normas de asignación específicas.
v Validez: La fila actualizada se debe ajustar a cualquier restricción impuesta en la
tabla (o en la tabla base de la vista) por cualquier índice exclusivo de una
columna actualizada.
Sentencias 1415
UPDATE
Notas
v Si un valor de actualización viola cualquier restricción o si se produce cualquier
otro error durante la ejecución de la sentencia UPDATE, no se actualiza ninguna
fila. El orden en que se actualizan múltiples filas no está definido.
v Una actualización de una vista definida utilizando la cláusula WITH ROW
MOVEMENT puede ocasionar una operación de supresión y una operación de
inserción contra las tablas subyacentes de la vista. Para ver detalles, consulte la
descripción de la sentencia CREATE VIEW.
v Cuando una sentencia UPDATE completa su ejecución, el valor de SQLERRD(3)
de la SQLCA es el número de filas que se han calificado para la operación de
actualización. En el contexto de una sentencia de procedimiento de SQL, el valor
puede recuperarse utilizando la variable ROW_COUNT de la sentencia GET
DIAGNOSTICS. El campo SQLERRD(5) contiene el número de filas insertadas,
suprimidas o actualizadas por todos los activadores activados.
v A menos que ya existan los bloqueos adecuados, se adquieren uno o varios
bloqueos por la ejecución de una sentencia UPDATE satisfactoria. Hasta que se
liberan los bloqueos, la fila actualizada sólo puede accederse por el proceso de
aplicación que ha realizado la actualización (excepto las aplicaciones que utilizan
el nivel de aislamiento de Lectura no confirmada). Para obtener más información
sobre el bloqueo, consulte las descripciones de las sentencias COMMIT,
ROLLBACK y LOCK TABLE.
v Cuando se actualicen las estadísticas de distribución de columna para una tabla
con tipo, debe especificarse la subtabla que haya incluido primero la columna.
v Puede haber varias asignaciones de atributos en la misma columna de tipo
estructurado, en el orden especificado por la cláusula SET.
Sentencias 1417
UPDATE
Sentencias 1419
UPDATE
donde bt_begin y bt_end son las columnas inicial y final del período
BUSINESS_TIME de la tabla de destino de la sentencia UPDATE.
v Consideraciones sobre tablas temporales de período de aplicación y
activadores: Cuando se actualiza una fila y se especifica la cláusula FOR
PORTION OF BUSINESS_TIME, se pueden insertar implícitamente filas
adicionales para reflejar cualquier porción de la fila que no haya sido
actualizada. Los activadores de actualización existentes se activan para las filas
actualizadas y los activadores de inserción existentes se activan para las filas que
se han insertado implícitamente.
Ejemplos
v Ejemplo 1: Cambie el trabajo (JOB) del empleado número (EMPNO) ‘000290' en
la tabla EMPLOYEE por ‘LABORER'.
UPDATE EMPLOYEE
SET JOB = ’LABORER’
WHERE EMPNO = ’000290’
v Ejemplo 2: Aumente las personas que trabajan en el proyecto (PRSTAFF) en 1,5
para todos los proyectos de los cuales sea responsable el departamento
(DEPTNO) ‘D21' en la tabla PROJECT.
UPDATE PROJECT
SET PRSTAFF = PRSTAFF + 1.5
WHERE DEPTNO = ’D21’
v Ejemplo 3: Todos los empleados excepto el director del departamento
(WORKDEPT) ‘E21' se han reasignado temporalmente. Indique esto cambiando
su trabajo (JOB) por el valor null y los valores de su paga (SALARY, BONUS,
COMM) por cero en la tabla EMPLOYEE.
UPDATE EMPLOYEE
SET JOB=NULL, SALARY=0, BONUS=0, COMM=0
WHERE WORKDEPT = ’E21’ AND JOB <> ’MANAGER’
Esta sentencia también se podría escribir de la siguiente manera.
Sentencias 1421
UPDATE
UPDATE EMPLOYEE
SET (JOB, SALARY, BONUS, COMM) = (NULL, 0, 0, 0)
WHERE WORKDEPT = ’E21’ AND JOB <> ’MANAGER’
v Ejemplo 4: Actualice la columna del salario y comisión del empleado con el
número de empleado 000120 por el promedio del salario y la comisión de los
empleados del departamento de la fila actualizada respectivamente.
UPDATE (SELECT EMPNO, SALARY, COMM,
AVG(SALARY) OVER (PARTITION BY WORKDEPT),
AVG(COMM) OVER (PARTITION BY WORKDEPT)
FROM EMPLOYEE E) AS E(EMPNO, SALARY, COMM, AVGSAL, AVGCOMM)
SET (SALARY, COMM) = (AVGSAL, AVGCOMM)
WHERE EMPNO = ’000120’
UPDATE CIRCLES
SET C..CENTER..X = C..CENTER..Y,
C..CENTER..Y = C..CENTER..X
WHERE ID = 999
El ejemplo siguiente constituye otro modo de escribir las dos sentencias
anteriores. Este ejemplo combina los efectos de ambos ejemplos anteriores:
UPDATE CIRCLES
SET (OWNER,C..RADIUS,C..CENTER..X,C..CENTER..Y) =
(’Bruce’,5,C..CENTER..Y,C..CENTER..X)
WHERE ID = 999
v Ejemplo 7: Actualice la columna XMLDOC de la tabla DOCUMENTS con DOCID
'001' a la serie de caracteres seleccionada y analizada a partir de la tabla
XMLTEXT.
UPDATE DOCUMENTS SET XMLDOC =
(SELECT XMLPARSE(DOCUMENT C1 STRIP WHITESPACE)
FROM XMLTEXT WHERE TEXTID = ’001’)
WHERE DOCID = ’001’
Sentencias 1423
VALUES
VALUES
La sentencia VALUES es una forma de consulta.
VALUES INTO
La sentencia VALUES INTO produce una tabla de resultados que consta de una
fila como máximo y asigna los valores de dicha fila a las variables del lenguaje
principal.
Invocación
Autorización
Para todas las variables globales utilizadas como destino-asignación, los privilegios
del ID de autorización de la sentencia deben incluir una de las autorizaciones
siguientes:
v el privilegio WRITE sobre la variable global que no está definida en un módulo
v el privilegio EXECUTE sobre el módulo de la variable global que está definida
en un módulo
Sintaxis
,
( expresión )
expresión-fila
destino-asignación
nombre-variable-global
nombre-variable-lenguaje-principal
nombre-parámetro-SQL
nombre-variable-SQL
nombre-variable-transición
nombre-variable-matriz [ índice-matriz ]
referencia-campo
Descripción
VALUES
Presenta una única fila compuesta por una o más columnas.
expresión
Una expresión que define un solo valor de una tabla de resultados de una
columna.
(expresión,...)
Una o más expresiones que definen los valores para una o varias columnas
de la tabla de resultados.
Sentencias 1425
VALUES INTO
expresión-fila
Especifica la fila de valores nueva. La expresión-fila es cualquier expresión
de fila del tipo descrito en “Expresiones de fila”. La expresión-fila no debe
incluir un nombre de columna.
INTO destino-asignación
Identifica uno o varios destinos para la asignación de los valores de salida.
El primer valor de la fila del resultado se asigna al primer destino de la lista, el
segundo valor al segundo destino, etcétera. Cada asignación que se realiza
para un destino-asignación se realiza secuencialmente y siguiendo la lista. Si se
produce un error en cualquier asignación, no se asigna ningún valor a ningún
destino-asignación.
Cuando el tipo de datos de cada destino-asignación no es un tipo de fila, se
asigna el valor 'W' al campo SQLWARN3 del SQLCA si el número de
destinos-asignación es menor que el número de valores de la columna de
resultados.
Si el tipo de datos de un destino-asignación es un tipo de fila, debe haber
exactamente un destino-asignación especificado (SQLSTATE 428HR), el número
de columnas debe coincidir con el número de campos en el tipo de fila y los
tipos de datos de las columnas de la fila captada deben poder asignarse a los
campos correspondientes del tipo de fila (SQLSTATE 42821).
Si el tipo de datos de un destino-asignación es un elemento de matriz, debe
haber exactamente un destino-asignación especificado.
nombre-variable-global
Identifica la variable global que es el sujeto de la asignación.
nombre-variable-lenguaje-principal
Identifica la variable del lenguaje principal que es el sujeto de la
asignación. Para los valores de salida LOB, el destino puede ser una
variable del lenguaje principal normal (si es lo suficientemente grande),
una variable de localizador LOB o una variable de referencia a archivos
LOB.
nombre-parámetro-SQL
Identifica el parámetro de nombre que es el destino de la asignación.
nombre-variable-SQL
Identifica la variable de SQL que es el sujeto de la asignación. Las variables
de SQL se deben declarar antes de utilizarlas.
nombre-variable-transición
Identifica la columna que se debe actualizar en la fila de transición. Un
nombre-variable-transición debe identificar una columna en la tabla sujeto de
un activador, calificado opcionalmente por un nombre de correlación que
identifica el nuevo valor.
nombre-variable-matriz
Identifica una variable de SQL, un parámetro de SQL o una variable global
con tipo de matriz.
[índice-matriz]
Expresión que especifica qué elemento de la matriz será el destino de
la asignación. Para una matriz común, la expresión de índice-matriz se
debe poder asignar a INTEGER (SQLSTATE 428H1) y no puede ser un
valor nulo. Su valor debe estar entre 1 y la cardinalidad máxima
definida para la matriz (SQLSTATE 2202E). Para una matriz asociativa,
Normas
v Las variables globales no se pueden asignar dentro de activadores que no se han
definido mediante una sentencia de SQL compuesto (compilado), funciones que
no se han definido mediante una sentencia de SQL compuesto (compilado),
métodos o sentencias de SQL compuesto (en línea) (SQLSTATE 428GX).
Ejemplos
v Ejemplo 1: Este ejemplo C recupera el valor del registro especial CURRENT
PATH en una variable del lenguaje principal.
EXEC SQL VALUES(CURRENT PATH)
INTO :hvl;
v Ejemplo 2: Este ejemplo C recupera una parte de un campo LOB en una variable
del lenguaje principal, utilizando el localizador de LOB para la recuperación
diferida.
EXEC SQL VALUES (substr(:locator1,35))
INTO :details;
v Ejemplo 3: este ejemplo C recupera el valor del registro especial SESSION_USER
en una variable global.
EXEC SQL VALUES(SESSION_USER)
INTO GV_SESS_USER;
Sentencias 1427
WHENEVER
WHENEVER
La sentencia WHENEVER especifica la acción que se debe tomar cuando se
produce una condición de excepción especificada.
Invocación
Autorización
No se necesita.
Sintaxis
WHENEVER NOT FOUND
SQLERROR
SQLWARNING
CONTINUE
GOTO etiqueta-lenguaje-principal
GO TO :
Descripción
Notas
v WHENEVER SQLERROR
v WHENEVER SQLWARNING
Cada sentencia de SQL ejecutable en un programa está dentro del ámbito de una
sentencia WHENEVER implícita o explícita de cada tipo. El ámbito de una
sentencia WHENEVER está relacionado con la secuencia de listado de las
sentencias del programa, no con su secuencia de ejecución.
Una sentencia de SQL está dentro del ámbito de la última sentencia WHENEVER
de cada tipo que se especifica antes de la sentencia de SQL en el programa fuente.
Si una sentencia WHENEVER de cualquier tipo no se especifica antes de una
sentencia de SQL, dicha sentencia de SQL está dentro del ámbito de una sentencia
WHENEVER de dicho tipo en la que se especifica CONTINUE.
Ejemplo
Sentencias 1429
WHILE
WHILE
La sentencia WHILE repite la ejecución de una sentencia o grupo de sentencias
mientras sea verdadera una condición especificada.
Invocación
Autorización
Sintaxis
sentencia-rutina-SQL:
sentencia-procedimiento-SQL ;
sentencia-función-SQL ;
Descripción
etiqueta
Especifica la etiqueta de la sentencia WHILE. Si se especifica la etiqueta inicial,
esa etiqueta puede especificarse en sentencias LEAVE e ITERATE. Si se
especifica una etiqueta final, ésta deberá ser igual que la etiqueta inicial.
condición-búsqueda
Especifica una condición que se evalúa antes de cada ejecución del bucle. Si la
condición es verdadera, se procesan las sentencias de procedimiento de SQL
incluidas en el bucle.
sentencia-procedimiento-SQL
Especifica las sentencias de SQL que se deben ejecutar en el bucle. La
sentencia-procedimiento-SQL sólo se puede aplicar en el contexto de un
procedimiento de SQL o una sentencia de SQL compuesto (compilado).
Consulte sentencia-procedimiento-SQL en la sentencia de “SQL compuesto
(compilado)”.
sentencia-función-SQL
Especifica las sentencias de SQL que se deben ejecutar en el bucle. La
sentencia-función-SQL sólo se puede aplicar en una función de SQL o una
sentencia de SQL compuesto (en línea) que se puede incorporar en un
activador de SQL, una función de SQL o un método de SQL. Consulte
sentencia-función-SQL en “FOR”.
Ejemplo
Este ejemplo utiliza una sentencia WHILE para ejecutar un proceso iterativo
mediante sentencias FETCH y SET. Mientras el valor de la variable de SQL
v_counter sea menor que la mitad del número de empleados del departamento que
identifica el parámetro IN deptNumber, la sentencia WHILE seguirá realizando las
sentencias FETCH y SET. Cuando la condición deja de ser verdadera, el flujo de
control sale de la sentencia WHILE y cierra el cursor.
CREATE PROCEDURE DEPT_MEDIAN
(IN deptNumber SMALLINT, OUT medianSalary DOUBLE)
LANGUAGE SQL
BEGIN
DECLARE v_numRecords INTEGER DEFAULT 1;
DECLARE v_counter INTEGER DEFAULT 0;
DECLARE c1 CURSOR FOR
SELECT CAST(salary AS DOUBLE)
FROM staff
WHERE DEPT = deptNumber
ORDER BY salary;
DECLARE EXIT HANDLER FOR NOT FOUND
SET medianSalary = 6666;
SET medianSalary = 0;
SELECT COUNT(*) INTO v_numRecords
FROM staff
WHERE DEPT = deptNumber;
OPEN c1;
WHILE v_counter < (v_numRecords / 2 + 1) DO
FETCH c1 INTO medianSalary;
SET v_counter = v_counter + 1;
END WHILE;
CLOSE c1;
END
Sentencias 1431
1432 Consulta de SQL - Volumen 2
Apéndice A. Visión general de la información técnica de DB2
La información técnica de DB2 está disponible en diversos formatos a los que se
puede acceder de varias maneras.
Nota: Los temas del Centro de información de DB2 se actualizan con más
frecuencia que los manuales en PDF o impresos. Para obtener la información más
actualizada, instale las actualizaciones de la documentación conforme pasen a estar
disponibles, o consulte el Centro de información de DB2 en ibm.com.
Puede acceder a información técnica adicional de DB2 como, por ejemplo, notas
técnicas, documentos técnicos y publicaciones IBM Redbooks en línea, en el sitio
ibm.com. Acceda al sitio de la biblioteca de software de gestión de información de
DB2 en http://www.ibm.com/software/data/sw-library/.
Aunque las tablas identifican los manuales en copia impresa disponibles, puede
que dichos manuales no estén disponibles en su país o región.
Nota: El Centro de información de DB2 se actualiza con más frecuencia que los
manuales en PDF o impresos.
Tabla 37. Información técnica de DB2
Número de Copia impresa
Nombre documento disponible Última actualización
Consulta de las API SC11-8067-00 Sí Abril de 2012
administrativas
Rutinas y vistas SC11-8068-00 No Abril de 2012
administrativas
Call Level Interface SC27-3866-00 Sí Abril de 2012
Guide and Reference
Volume 1
Call Level Interface SC27-3867-00 Sí Abril de 2012
Guide and Reference
Volume 2
Consulta de mandatos SC11-8069-00 Sí Abril de 2012
Database Administration SC27-3871-00 Sí Abril de 2012
Concepts and
Configuration Reference
Data Movement Utilities SC27-3869-00 Sí Abril de 2012
Guide and Reference
Database Monitoring SC27-3887-00 Sí Abril de 2012
Guide and Reference
Data Recovery and High SC27-3870-00 Sí Abril de 2012
Availability Guide and
Reference
Database Security Guide SC27-3872-00 Sí Abril de 2012
Guía y consulta de DB2 SC11-8079-00 Sí Abril de 2012
Workload Management
Developing ADO.NET SC27-3873-00 Sí Abril de 2012
and OLE DB
Applications
Developing Embedded SC27-3874-00 Sí Abril de 2012
SQL Applications
Desarrollo de aplicaciones SC11-8065-00 Sí Abril de 2012
Java
Procedimiento
donde sqlstate representa un estado de SQL válido de cinco dígitos y código de clase
representa los dos primeros dígitos del estado de SQL.
Por ejemplo, ? 08003 visualiza la ayuda para el estado de SQL 08003, y ? 08
visualiza la ayuda para el código de clase 08.
Para los temas de DB2 Versión 10.1, el URL del Centro de información de DB2 es
http://publib.boulder.ibm.com/infocenter/db2luw/v10r1.
Para los temas de DB2 Versión 9.8, el URL del Centro de información de DB2 es
http://publib.boulder.ibm.com/infocenter/db2luw/v9r8/.
Para los temas de DB2 Versión 9.7, el URL del Centro de información de DB2 es
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/.
Para los temas de DB2 Versión 9.5, el URL del Centro de información de DB2 es
http://publib.boulder.ibm.com/infocenter/db2luw/v9r5.
Para los temas de DB2 Versión 9.1, el URL del Centro de información de DB2 es
http://publib.boulder.ibm.com/infocenter/db2luw/v9/.
Para los temas de DB2 Versión 8, vaya al URL del Centro de información de DB2 en
el sitio: http://publib.boulder.ibm.com/infocenter/db2luw/v8/.
Antes de empezar
Este tema detalla el proceso de las actualizaciones automáticas. Para conocer las
instrucciones para la actualización manual, consulte el tema “Actualización manual
del Centro de información de DB2 instalado en el sistema o en el servidor de
intranet”.
Procedimiento
Resultados
Nota: En Windows 2008 y Windows Vista (y posterior), los mandatos listados más
abajo deben ejecutarse como administrador. Para abrir un indicador de mandatos o
una herramienta gráfica con privilegios de administrador completos, pulse con el
botón derecho del ratón el atajo y, a continuación, seleccione Ejecutar como
administrador.
Procedimiento
Nota: El script help_end contiene los mandatos necesarios para detener sin
peligro los procesos que se iniciaron mediante el script help_start. No utilice
ningún otro método para detener el script help_start.
7. Reinicie el Centro de información de DB2.
v En Windows, pulse Inicio > Panel de control > Herramientas
administrativas > Servicios. A continuación, pulse con el botón derecho del
ratón en el servicio Centro de información de DB2 y seleccione Iniciar.
v En Linux, especifique el mandato siguiente:
/etc/init.d/db2icdv10 start
Resultados
Antes de comenzar
Documentación de DB2
Puede encontrar información sobre la resolución de problemas en la
publicación Troubleshooting and Tuning Database Performance o en la sección
sobre conceptos fundamentales sobre bases de datos del Centro de
información de DB2, que contiene:
v Información sobre cómo aislar e identificar problemas con programas de
utilidad y herramientas de diagnóstico de DB2.
v Soluciones a algunos de los problemas más comunes.
v Consejo para ayudarle a resolver problemas que podría encontrar en los
productos de base de datos DB2
Portal de Soporte de IBM
Consulte el portal de soporte de IBM si tiene problemas y desea obtener
ayuda para encontrar las causas y soluciones posibles. El sitio de soporte
técnico tiene enlaces a las publicaciones más recientes de DB2, notas
técnicas, Informes autorizados de análisis del programa (APAR o arreglos
de defectos), fixpacks y otros recursos. Puede buscar en esta base de
conocimiento para encontrar posibles soluciones a los problemas.
Acceda al portal de Soporte de IBM en el sitio http://www.ibm.com/
support/entry/portal/Overview/Software/Information_Management/
DB2_for_Linux,_UNIX_and_Windows
Términos y condiciones
Los permisos para utilizar estas publicaciones se otorgan sujetos a los siguientes
términos y condiciones.
Aplicación: Además de las condiciones de uso del sitio web de IBM, se aplican
estos términos y condiciones.
Las referencias hechas en esta publicación a sitios web que no son de IBM se
proporcionan sólo para la comodidad del usuario y no constituyen un aval de esos
sitios web. La información de esos sitios web no forma parte de la información del
presente producto de IBM y la utilización de esos sitios web se realiza bajo la
responsabilidad del usuario.
Los licenciatarios de este programa que deseen obtener información sobre él con el
fin de habilitar: (i) el intercambio de información entre programas creados de
forma independiente y otros programas (incluido éste) y (ii) el uso mutuo de la
información intercambiada, deben ponerse en contacto con:
LICENCIA DE COPYRIGHT:
Marcas registradas
Índice 1449
cursores (continuación) errores
ubicación en la tabla como resultado de la sentencia cursores 1200
FETCH 1091 FETCH, sentencia 1091
unidades de trabajo UPDATE, sentencia 1406
estados condicionales 993 espacio gestionado por base de datos (DMS)
terminación para 1276 espacios de tablas
WITH HOLD CREATE TABLESPACE, sentencia 806
cláusula de bloqueo de la sentencia COMMIT 321 espacio gestionado por el sistema (SMS)
cursores ambiguos 993 espacios de tablas
cursores de sólo lectura CREATE TABLESPACE, sentencia 806
ambiguo 993 espacios de tablas
agrupaciones de almacenamientos intermedios 375
añadir
D comentarios al catálogo 310
creación
datos XML
CREATE TABLESPACE, sentencia 806
CREATE INDEX, sentencia 584
descartar
db2nodes.cfg, archivo
DROP, sentencia 1038
ALTER DATABASE PARTITION GROUP, sentencia 36
identificación
CREATE DATABASE PARTITION GROUP, sentencias 379
CREATE TABLE, sentencia 719
Sentencia CONNECT (Tipo 1) 351
índices
DBADM (administrador de la base de datos), autorización
CREATE TABLE, sentencia 719
otorgar 1111
otorgar privilegios 1151
DBCLOB, tipo de datos
renombrar 1222
CREATE TABLE, sentencia 719
revocar privilegios 1265
declaraciones
suprimir utilizando la sentencia DROP 1038
inserción en programa 1165
tamaños de página 806
DECLARE, sentencias
esquemas
BEGIN DECLARE SECTION, sentencia 294
adición de comentarios al catálogo 310
END DECLARE SECTION, sentencia 1074
CREATE SCHEMA, sentencia 682
SQL compuesto 333
implícitos
DECLARE CURSOR, sentencia
autorización, revocar 1231
detalles 993
otorgamiento de autoridad 1111
DECLARE GLOBAL TEMPORARY TABLE, sentencia
esquemas implícitos
detalles 999
GRANT (autorizaciones de bases de datos), sentencia 1111
DELETE, sentencia
sentencia REVOKE (autorizaciones de base de datos) 1231
detalles 1014
estado cerrado
DESCRIBE, sentencia
cursores 1200
detalles 1025
estado pendiente de establecer integridad
sentencias preparadas
SET INTEGRITY, sentencia 1341
DESCRIBE INPUT, sentencia 1026
estándares
DESCRIBE OUTPUT, sentencia 1030
establecer normas para SQL dinámico 1366
DESCRIBE INPUT, sentencia 1026
estructura SQLCA
DESCRIBE OUTPUT, sentencia 1030
visión general 14
determinación de problemas
estructuras de almacenamiento
guías de aprendizaje 1441
ALTER BUFFERPOOL, sentencia 33
información disponible 1441
ALTER TABLESPACE, sentencia 192
devolución de conjuntos de resultados
CREATE BUFFERPOOL, sentencia 375
procedimientos SQL 333
CREATE TABLESPACE, sentencia 806
diagramas de sintaxis
etiquetas
lectura viii
GOTO 1109
DISCONNECT, sentencia 1035
Etiquetas
documentación
referencias 20
archivos PDF 1434
etiquetas de seguridad (LBAC)
copia impresa 1434
ALTER SECURITY LABEL COMPONENT, sentencia 91
términos y condiciones de uso 1441
CREATE SECURITY LABEL, sentencia 688
visión general 1433
CREATE SECURITY LABEL COMPONENT, sentencia 685
DROP, sentencia
políticas
detalles 1038
ALTER SECURITY POLICY, sentencia 94
transformaciones 1038
CREATE SECURITY POLICY, sentencia 690
sentencia GRANT (etiqueta de seguridad) 1141
sentencia REVOKE (etiqueta de seguridad) 1256
E EXCLUSIVE MODE, conexión 351
elemento de sintaxis designador de función 22 EXECUTE, sentencia
elemento de sintaxis designador de método 22 detalles 1075
elemento de sintaxis designador de procedimiento 22 incorporado 11, 12
END DECLARE SECTION, sentencia 1074
Índice 1451
ITERATE, sentencia MODE, palabra clave 1183
detalles 1179 módulos
creación 626
modificar 60
L
LBAC
ALTER SECURITY LABEL COMPONENT, sentencia 91 N
ALTER SECURITY POLICY, sentencia 94 niveles de aislamiento
componentes de etiqueta de seguridad DELETE, sentencia 1014
ALTER SECURITY LABEL COMPONENT, INSERT, sentencia 1167
sentencia 91 SELECT, sentencia 1283
CREATE SECURITY LABEL COMPONENT, UPDATE, sentencia 1406
sentencia 685 NO ACTION, norma de supresión 719
CREATE SECURITY LABEL, sentencia 688 nombres de condición de SQL
CREATE SECURITY LABEL COMPONENT, sentencia 685 referencias 20
CREATE SECURITY POLICY, sentencia 690 nombres de cursor de SQL
etiquetas de seguridad referencias 21
ALTER SECURITY LABEL COMPONENT, nombres de sentencias de SQL
sentencia 91 referencias 21
CREATE SECURITY LABEL, sentencia 688 norma de supresión RESTRICT 719
CREATE SECURITY LABEL COMPONENT, NOT FOUND, cláusula
sentencia 685 WHENEVER, sentencia 1428
sentencia GRANT (etiqueta de seguridad) 1141
sentencia REVOKE (etiqueta de seguridad) 1256
exenciones de normas
sentencia GRANT (exención) 1117
O
objetos dependientes
sentencia REVOKE (exención) 1235
DROP, sentencia 1038
políticas de seguridad
objetos grandes binarios (BLOB)
ALTER SECURITY POLICY, sentencia 94
tablas 719
CREATE SECURITY POLICY, sentencia 690
OID
sentencia GRANT (etiqueta de seguridad) 1141
véase identificadores de objeto (OID) 719
sentencia GRANT (exención) 1117
opción PROGRAM para DB2 para compatibilidad con z/OS
sentencia REVOKE (etiqueta de seguridad) 1256
DROP, sentencia 1038
sentencia REVOKE (exención) 1235
OPEN, sentencia
lenguaje REXX
detalles 1200
prohibición END DECLARE SECTION 1074
listas de uso
suprimir utilizando la sentencia DROP 1038
localizadores P
ASSOCIATE LOCATORS, sentencia 288 paquetes
FREE LOCATOR, sentencia 1104 ALTER TABLE, sentencia 121
LOCK TABLE, sentencia autorización para crear 1111
detalles 1183 comentarios de catálogo 310
COMMIT, efecto de la sentencia en los cursores 321
privilegios
M otorgar 1127
revocación utilizando la sentencia REVOKE (privilegios
manejadores de condiciones
de paquete) 1244
declarar 333
revocación utilizando la sentencia REVOKE (privilegios
marcadores de parámetro
de tabla, vista o apodo) 1267
con tipo 1206
suprimir 1038
EXECUTE, sentencia 1075
permisos
normas de contraseña 1206
sentencia ALTER PERMISSION 81
OPEN, sentencia 1200
sentencia CREATE PERMISSION 642
PREPARE, sentencia 1206
precisión simple, tipo de datos de coma flotante 719
sin tipo 1206
precompilación
máscaras
archivos de texto externos 1165
sentencia ALTER MASK 57
INCLUDE, sentencia 1165
sentencia CREATE MASK 613
sentencias de SQL no ejecutables 11
mensajes de error
SQLCA 1165
activadores
SQLDA 1165
tipo, tablas 223
PREPARE, sentencia
códigos de retorno 11, 14
declarar dinámicamente 1206
ejecución de activador 845
detalles 1206
máscaras de columna 57, 613
incorporado 11, 12
permisos de fila 81, 642
sustitución de variable en sentencia OPEN 1200
MERGE, sentencia 1187
R
REAL SQL, tipo de datos S
CREATE TABLE, sentencia 719 SAVEPOINT, sentencia 1279
Referencias secuencias
etiquetas 20 DROP, sentencia 1038
nombres de condición de SQL 20 seguridad
nombres de cursor de SQL 21 sentencia CONNECT 351
nombres de sentencias de SQL 21 selección completa
REFRESH TABLE, sentencia 1213 CREATE VIEW, sentencia 940
registros selección completa de fila
bloqueos en datos de fila 1167 UPDATE, sentencia 1406
RELEASE (conexión), sentencia 1216 SELECT, sentencia
RELEASE SAVEPOINT, sentencia 1218 cursores 993
RENAME, sentencia 1219 detalles 1282
RENAME STOGROUP, sentencia 1221 evaluación para la tabla de resultados del cursor de
RENAME TABLESPACE, sentencia 1222 sentencia OPEN 1200
rendimiento SELECT INTO, sentencia
recomendación de clave de particionamiento 719 detalles 1283
Índice 1453
sentencia ALTER MASK sentencias de SQL (continuación)
detalles 57 ALTER METHOD 58
sentencia ALTER PERMISSION ALTER MODULE 60
detalles 81 ALTER NICKNAME 68
sentencia ALTER SERVER 102 ALTER NODEGROUP (véase sentencias de SQL, ALTER
sentencia ALTER STOGROUP 116 DATABASE PARTITION GROUP) 36
sentencia ALTER WORKLOAD 268 ALTER PACKAGE 77
Sentencia CASE ALTER PERMISSION 81
detalles 305 ALTER PROCEDURE (derivado) 85
sentencia compuesta compilada ALTER PROCEDURE (externo) 82
detalles 333 ALTER PROCEDURE (SQL) 87
sentencia CONNECT ALTER SCHEMA 89
tipo 1 351 ALTER SECURITY LABEL COMPONENT 91
Sentencia CREATE EVENT MONITOR (antememoria de ALTER SECURITY POLICY 94
paquete) 429 ALTER SEQUENCE 98
sentencia CREATE EVENT MONITOR (historial de ALTER SERVER 102
cambios) 416 ALTER SERVICE CLASS 105
Sentencia CREATE EVENT MONITOR (unidad de ALTER STOGROUP 116
trabajo) 462 ALTER TABLE 121
sentencia CREATE GLOBAL TEMPORARY TABLE ALTER TABLESPACE 192
detalles 569 ALTER THRESHOLD 209
sentencia CREATE MASK ALTER TRIGGER 223
detalles 613 ALTER TRUSTED CONTEXT 224
sentencia CREATE NODEGROUP 379 ALTER TYPE (estructurado) 233
sentencia CREATE PERMISSION ALTER USAGE LIST 240
detalles 642 ALTER USER MAPPING 242
sentencia CREATE TYPE MAPPING ALTER VIEW 245
detalles 916 ALTER WORK ACTION SET 247
sentencia CREATE WRAPPER ALTER WORK CLASS SET 262
detalles 991 ALTER WORKLOAD 268
sentencia de SQL compuesto 323 ALTER WRAPPER 285
sentencia de SQL compuesto (incorporado) ALTER XSROBJECT 287
detalles 329 ASSOCIATE LOCATORS 288
Sentencia FLUSH OPTIMIZATION PROFILE CACHE 1098 atributo de cursor WITH HOLD 993
Sentencia GOTO AUDIT 290
detalles 1109 BEGIN DECLARE SECTION 294
Sentencia IF CALL 296
SQL 1163 CLOSE 308
Sentencia LEAVE COMMENT 310
detalles 1181 COMMIT 321
Sentencia LOOP compuesto (incorporado) 329
SQL 1185 CONNECT
Sentencia REPEAT tipo 1 351
detalles 1224 tipo 2 359
Sentencia RESIGNAL 1226 CONTINUE 1428
Sentencia RETURN control 18
detalles 1229 CREATE ALIAS 367
sentencia SET 1376 CREATE AUDIT POLICY 371
sentencia SET CURRENT LOCALE LC_MESSAGES 1306 CREATE BUFFERPOOL 375
sentencia SET CURRENT TEMPORAL BUSINESS_TIME 1332 CREATE DATABASE PARTITION GROUP 379
sentencia SET CURRENT TEMPORAL SYSTEM_TIME 1334 CREATE EVENT MONITOR 382
Sentencia SET SESSION AUTHORIZATION 1370 CREATE EVENT MONITOR (actividades) 404
Sentencia WHILE CREATE EVENT MONITOR (antememoria de
detalles 1430 paquete) 429
sentencias CREATE EVENT MONITOR (estadísticas) 436
LEAVE 1181 CREATE EVENT MONITOR (historial de cambios) 416
sentencias de SQL CREATE EVENT MONITOR (violaciones de umbral) 449
ALLOCATE CURSOR 27 CREATE FUNCTION
ALTER AUDIT POLICY 29 derivadas 532
ALTER BUFFERPOOL 33 escalares de SQL 547
ALTER DATABASE 40 escalares externas 469
ALTER DATABASE PARTITION GROUP 36 fila de SQL 547
ALTER EVENT MONITOR 45 plantilla 532
ALTER FUNCTION 50 tabla de SQL 547
ALTER HISTOGRAM TEMPLATE 54 tabla externa 499
ALTER INDEX 56 tabla externa OLE DB 521
ALTER MASK 57 visión general 468
Índice 1455
sentencias de SQL (continuación) SET CURRENT DEFAULT TRANSFORM GROUP,
SET CURRENT DEFAULT TRANSFORM GROUP 1292 sentencia 1292
SET CURRENT DEGREE 1294 SET CURRENT DEGREE, sentencia 1294
SET CURRENT EXPLAIN MODE 1296 SET CURRENT EXPLAIN MODE, sentencia 1296
SET CURRENT EXPLAIN SNAPSHOT 1299 SET CURRENT EXPLAIN SNAPSHOT, sentencia 1299
SET CURRENT FEDERATED ASYNCHRONY 1302 SET CURRENT FEDERATED ASYNCHRONY, sentencia 1302
SET CURRENT FUNCTION PATH 1363 SET CURRENT FUNCTION PATH, sentencia 1363
SET CURRENT IMPLICIT XMLPARSE OPTION 1304 SET CURRENT IMPLICIT XMLPARSE OPTION,
SET CURRENT ISOLATION 1305 sentencia 1304
SET CURRENT LOCALE LC_MESSAGES 1306 SET CURRENT ISOLATION, sentencia 1305
SET CURRENT LOCK TIMEOUT 1310 SET CURRENT LOCALE LC_TIME, sentencia 1308
SET CURRENT MAINTAINED TABLE TYPES FOR SET CURRENT LOCK TIMEOUT, sentencia 1310
OPTIMIZATION 1312 SET CURRENT MAINTAINED TABLE TYPES FOR
SET CURRENT MDC ROLLOUT MODE 1314 OPTIMIZATION, sentencia 1312
SET CURRENT OPTIMIZATION PROFILE 1316 SET CURRENT MDC ROLLOUT MODE, sentencia 1314
SET CURRENT PACKAGE PATH 1319 SET CURRENT OPTIMIZATION PROFILE, sentencia 1316
SET CURRENT PACKAGESET 1323 SET CURRENT PACKAGE PATH, sentencia 1319
SET CURRENT PATH 1363 SET CURRENT PACKAGESET, sentencia 1323
SET CURRENT QUERY OPTIMIZATION 1325 SET CURRENT PATH, sentencia 1363
SET CURRENT REFRESH AGE 1328 SET CURRENT QUERY OPTIMIZATION, sentencia
SET CURRENT SQL_CCFLAGS 1330 detalles 1325
SET CURRENT TEMPORAL BUSINESS_TIME 1332 SET CURRENT REFRESH AGE, sentencia 1328
SET CURRENT TEMPORAL SYSTEM_TIME 1334 SET CURRENT SQL_CCFLAGS, sentencia 1330
SET ENCRYPTION PASSWORD 1336 SET CURRENT SQLID, sentencia 1366
SET EVENT MONITOR STATE 1338 SET ENCRYPTION PASSWORD, sentencia
SET INTEGRITY 1341 detalles 1336
SET PASSTHRU 1361 SET EVENT MONITOR STATE, sentencia 1338
SET PATH 1363 SET INTEGRITY, sentencia
SET ROLE 1365 detalles 1341
SET SCHEMA 1366 SET NULL, norma de supresión 719
SET SERVER OPTION 1368 SET PASSTHRU, sentencia
SET SESSION AUTHORIZATION 1370 detalles 1361
SET USAGE LIST STATE 1373 independencia de la sentencia COMMIT 321
SET variable 1376 independencia de la sentencia ROLLBACK 1276
SQL compuesto 323 SET PATH, sentencia 1363
TRANSFER OWNERSHIP 1391 SET ROLE, sentencia 1365
TRUNCATE 1403 SET SCHEMA, sentencia 1366
UPDATE 1406 SET SERVER OPTION, sentencia
VALUES 1424 detalles 1368
VALUES INTO 1425 independencia de la sentencia COMMIT 321
WHENEVER 1428 independencia de la sentencia ROLLBACK 1276
Sentencias de SQL SET USAGE LIST STATE, sentencia 1373
visión general 1 SHARE MODE, conexión 351
sentencias de SQL activadas SIGNAL, sentencia 1388
SET variable 1376 signo de interrogación
sentencias de SQL ejecutables 11, 12, 13 como marcador de parámetro EXECUTE 1075
sentencias de SQL no ejecutables simultaneidad
invocación 11 LOCK TABLE, sentencia 1183
requisitos del precompilador 11 sinónimos
sentencias de SQL preparadas CREATE ALIAS, sentencia 367
ejecución 1075 DROP ALIAS, sentencia 1038
obtención de información SMALLINT, tipo de datos
DESCRIBE INPUT, sentencia 1026 SQL estático 719
DESCRIBE OUTPUT, sentencia 1030 SQL
sustitución de variable del lenguaje principal 1075 códigos de retorno 11
sentencias SQL objetos
ayuda suprimir 1038
visualización 1436 parámetros 19
series de caracteres variables
creación de sentencias de SQL 1083 referencias 19
servidores sentencia de SQL compuesto (compilado) 333
otorgar privilegios 1147 una sentencia de SQL compuesto (en línea) 324
SET COMPILATION ENVIRONMENT, sentencia 1287 SQL dinámico
SET CONNECTION, sentencia 1288 cursores
SET CONSTRAINTS, sentencia 1341 DECLARE CURSOR, sentencia 11, 12
SET CURRENT DECFLOAT ROUNDING MODE, DESCRIBE INPUT, sentencia 1026
sentencia 1290 DESCRIBE OUTPUT, sentencia 1030
Índice 1457
U variables del lenguaje principal de la aplicación
Assembler 1083
UDF variables globales
CREATE FUNCTION, sentencia referencias 19
derivadas 532 VARIANT
escalar, tabla o fila de SQL 547 CREATE TYPE (estructurado), sentencia 891
escalares externas 469 vinculación
plantilla 532 GRANT, sentencia 1127
tabla externa 499 revocación de todos los privilegios 1244
tabla externa OLE DB 521 vistas
visión general 468 actualizables 940
DROP, sentencia 1038 actualización de filas por columnas 1406
sentencia REVOKE (autorizaciones de base de datos) 1231 adición de comentarios al catálogo 310
UDT alias 367, 1038
adición de comentarios al catálogo 310 creación 940
CREATE TRANSFORM, sentencia 841 esquemas 682
CREATE TYPE (diferenciado), sentencia 879 insertable 940
tipos diferenciados insertar filas 1167
CREATE TABLE, sentencia 719 no operativos 940
tipos estructurados 719 nombres 245
una sentencia de SQL compuesto (en línea) nombres de columna 940
detalles 324 otorgar privilegios 1153
unidades de trabajo prevención de la pérdida de definición de vista con WITH
cancelar 1276 CHECK OPTION 1406
COMMIT, sentencia 321 Privilegio CONTROL 1153
destrucción de sentencias preparadas 1206 revocar privilegios 1267
iniciación cierra cursores 1200 sólo lectura 940
referencia a sentencias preparadas 1206 suprimible 940
ROLLBACK, sentencia 1276 suprimir utilizando la sentencia DROP 1038
terminación WITH CHECK OPTION 1406
confirmaciones 321 vistas con tipo
destrucción de sentencias preparadas 1206 definir subvistas 940
sin guardar cambios 1276 vistas de sólo lectura
uniones creación 940
CREATE TABLE, sentencia 719 vistas insertables
UPDATE, sentencia creación 940
detalles 1406 vistas no operativas 940
vistas suprimibles
visión general 940
V
valores de clave de detención 606
valores de clave de inicio 606 W
VALUES, cláusula WHENEVER, sentencia
carga de una fila 1167 cambio del flujo de control 11
normas para número de valores 1167 detalles 1428
VALUES, sentencia 1424 WHERE, cláusula
VALUES INTO, sentencia 1425 DELETE, sentencia 1014
VARCHAR, tipo de datos UPDATE, sentencia 1406
CREATE TABLE, sentencia 719
variables del lenguaje principal
aplicaciones REXX 294
asignación de valores de una fila X
SELECT INTO, sentencia 1283 XML
VALUES INTO, sentencia 1425 CREATE INDEX, sentencia 584
BEGIN DECLARE SECTION, sentencia 294
declarar
BEGIN DECLARE SECTION, sentencia 294
cursores 993
END DECLARE SECTION, sentencia 1074
END DECLARE SECTION, sentencia 1074
enlazar conjunto activo con cursor 1200
EXECUTE IMMEDIATE, sentencia 1083
FETCH, sentencia 1091
inserción en filas 1167
sentencias de SQL incorporadas 11, 14
series de sentencia 1206
sustitución de marcador de parámetro 1075
Impreso en España
SC11-8071-00
Spine information:
IBM DB2 10.1 para Linux, UNIX y Windows Consulta de SQL - Volumen 2