Sentencia DECLARE

La sentencia DECLARE define una variable, el tipo de datos de la variable y, opcionalmente, su valor inicial.

SINTAXIS

  1. La palabra clave SHARED no está permitida dentro de una función o procedimiento.
  2. No puede especificar SHARED con el TipoDatos REFERENCE. (Para almacenar un árbol de mensaje en una variable compartida, utilice el tipo de datos ROW.)
  3. Las variables EXTERNAL son constantes implícitamente.
  4. En programación, se recomienda asignar un valor inicial a una variable EXTERNAL.
  5. Si especifica el TipoDatos REFERENCE, debe especificar un valor inicial (de una variable o un árbol) en ExpresiónValorInicial.
  6. Cuando se utilizan las cláusulas NAMESPACE y NAME, los valores son constantes implícitamente y de tipo CHARACTER.

Tipos de variables

Puede utilizar las Sentencia DECLARE para definir tres tipos de variables:
Externa
Las variables externas (definidas con la palabra clave EXTERNAL) también se denominan propiedades definidas por el usuario (UDP): vea Propiedades definidas por el usuario en ESQL. Existen mientras está activo un flujo de mensajes y son visibles para todos los mensajes que pasan a través del flujo de mensajes. Sus valores iniciales (opcionalmente establecidos mediante la sentencia DECLARE) pueden modificarse, en el tiempo de diseño, mediante el editor de flujos de mensajes o, en el tiempo de despliegue, mediante el editor BAR. Estos valores no pueden modificarse mediante ESQL.
Normal
Las variables "normales" tienen una duración de sólo un mensaje que pase por el nodo. Sólo son visibles a ese mensaje. Para definir una variable "normal", omita las palabras clave EXTERNAL y SHARED.
Compartida
Las variables compartidas pueden utilizarse para implementar una memoria caché interna en el flujo de mensajes, consulte Optimizar los tiempos de respuesta de los flujos de mensajes. Las variables compartidas tienen una gran duración y son visibles para múltiples mensajes que pasan por un flujo, consulte Variables de larga duración. Su duración es la misma que el proceso del grupo de ejecución, la duración del flujo o nodo, o la duración del SQL del nodo que declara la variable (el que sea menor). Se inicializan cuando el primer mensaje pasa por el flujo o el nodo después de cada inicio de intermediario.

Consulte también la opción ATOMIC de la Sentencia BEGIN ... END. La construcción BEGIN ATOMIC es útil cuando deben realizarse varios cambios en una variable compartida y es importante evitar que otras instancias vean los estados intermedios de los datos.

CONSTANT

Utilice CONSTANT para definir una constante. Puede declarar constantes en sentencias compuestas, esquemas, módulos o rutinas (tanto implícita como explícitamente). El comportamiento de estos casos es el siguiente:

Una constante o variable declarada en una rutina solapa cualquier parámetro del mismo nombre y todas las constantes y variables del mismo nombre declaradas en el módulo o esquema que la contiene.

TipoDatos

Los valores posibles que puede especificar para TipoDatos son:
  • BOOL
  • BOOLEAN
  • INT
  • INTEGER
  • FLOAT
  • DEC
  • DECIMAL
  • DATE
  • TIME
  • TIMESTAMP
  • GMTTIME
  • GMTTIMESTAMP
  • INTERVAL: no se aplica a variables externas (opción EXTERNAL especificada)
  • CHAR
  • CHARACTER
  • BLOB
  • BIT
  • ROW: no se aplica a variables externas (opción EXTERNAL especificada)
  • REF: no se aplica a variables externas o compartidas (opción EXTERNAL o SHARED especificada)
  • REFERENCE-TO: no se aplica a variables externas o compartidas (opción EXTERNAL o SHARED especificada)
Nota: Si especifica el TipoDatos REFERENCE, también debe especificar ExpresiónValorInicial.

EXTERNAL

Utilice EXTERNAL para indicar una UDP (propiedad definida por el usuario). Una UDP es una constante definida por el usuario cuyo valor inicial (establecido opcionalmente mediante una sentencia DECLARE) lo puede modificar, durante el diseño, el Editor de flujos de mensajes o lo puede alterar temporalmente, durante el despliegue, el Editor de archivador de intermediario. Su valor no se puede modificar mediante ESQL.

Para obtener una visión general de las UDP, consulte Propiedades definidas por el usuario en ESQL.

Cuando se da un valor inicial a la UDP en la sentencia DECLARE, éste pasa a ser su valor por omisión. Sin embargo, cualquier valor especificado por el editor de flujos de mensajes durante el diseño o por el editor BAR durante el despliegue (incluso una serie de longitud cero) alterará temporalmente cualquier valor inicial codificado en la sentencia DECLARE.

Todas las UDP en un flujo de mensajes deben tener un valor, proporcionado mediante una sentencia DECLARE, o el flujo de mensajes o el editor BAR; de lo contrario, se produce un error en tiempo de despliegue. En la ejecución, después de que la UDP se haya declarado, el valor se puede consultar mediante sentencias ESQL subsiguientes pero no se puede modificar.

La ventaja de las UDP es que el personal de operaciones puede cambiar los valores en el tiempo de despliegue. Por ejemplo, si utiliza las UDP para que contengan datos de configuración, significa que puede configurar un flujo de mensajes para una máquina, una tarea o un entorno determinados durante el despliegue, sin tener que cambiar el código a nivel de nodo.

Las UDP sólo se pueden declarar en módulos o esquemas.

Los tipos siguientes de nodo de intermediario pueden acceder a las UDP:
  • Compute
  • Database
  • Filter
  • Nodos derivados de estos tipos de nodo

Tenga cuidado al especificar el tipo de datos de una UDP, porque se produce un CAST para efectuar una transformación CAST en el TipoDatos solicitado.

Ejemplo 1

DECLARE mycolour EXTERNAL CHARACTER ‘blue'; 

Ejemplo 2

DECLARE TODAYSCOLOR EXTERNAL CHARACTER;
SET COLOR = TODAYSCOLOR;
donde TODAYSCOLOR es una propiedad definida por el usuario que tiene el valor TYPE de CHARACTER y el valor de VALUE establecido por el editor de flujos de mensajes.

NAME

Utilice NAME para definir un alias (otro nombre) por el que se conozca una variable.

Ejemplo 1

-- La sentencia siguiente proporciona el alias 'Joe' a Schema1.
DECLARE Schema1 NAME 'Joe';  
-- La sentencia siguiente crea un campo denominado 'Joe'.
SET OutputRoot.XML.Data.Schema1 = 42; 
 
-- La sentencia siguiente inserta un valor en una tabla denominada Table1 
-- del esquema denominado 'Joe'.
INSERT INTO Database.Schema1.Table1 (Answer) VALUES 42; 

Ejemplo 2

DECLARE Schema1 EXTERNAL NAME;

CREATE FIRSTCHILD OF OutputRoot.XML.TestCase.Schema1 Domain('XML') NAME 'Node1' VALUE '1';

-- Si a Schema1 se le da el valor 'red', el resultado sería:
<xml version="1.0"?>
<TestCase>
  <red>
    <Node1>1</Node1>
  </red>

NAMESPACE

Utilice NAMESPACE para definir un alias (otro nombre) por el que se conozca un espacio de nombres.

Ejemplo

En este ejemplo se utiliza una declaración de espacio de nombres, su uso como SpaceId en una vía de acceso y su uso como una constante de carácter en una expresión de espacio de nombres:

       DECLARE prefixOne NAMESPACE 'http://www.example.com/PO1';

       -- En el lado derecho de la asignación se está utilizando una constante
       -- de espacio de nombres como tal, mientras que en el lado izquierdo 
       -- se utiliza una como una constante ordinaria (es decir, en una expresión).

       SET OutputRoot.XML.{prefixOne}:{'PurchaseOrder'} = InputRoot.XML.prefixOne:PurchaseOrder;

SHARED

Utilice SHARED para definir una variable compartida. Las variables compartidas son reservadas para el flujo (si se declaran dentro de un esquema) o el nodo (si se declaran dentro de un módulo) pero se comparten entre las instancias del flujo (hebras). No hay ningún tipo de variable que sea visible más ampliamente que a nivel de flujo. Por ejemplo, no puede compartir variables entre grupos de ejecución.

Las variables compartidas pueden utilizarse para implementar una memoria caché interna en el flujo de mensajes, consulte Optimizar los tiempos de respuesta de los flujos de mensajes. Las variables compartidas tienen una gran duración y son visibles para múltiples mensajes que pasan por un flujo, consulte Variables de larga duración. Su duración es la misma que el proceso del grupo de ejecución, la duración del flujo o nodo, o la duración del SQL del nodo que declara la variable (el que sea menor). Se inicializan cuando el primer mensaje pasa por el flujo o el nodo después de cada inicio de intermediario.

No se puede definir una variable compartida dentro de una función o procedimiento.

Las ventajas de las variables compartidas, en relación a una base de datos, son las siguientes:
  • El acceso de escritura es mucho más rápido.
  • El acceso de lectura de pequeñas estructuras de datos es más rápido.
  • El acceso es directo. Es decir, no es necesario utilizar una función especial (SELECT) para obtener los datos, o sentencias especiales (INSERT, UPDATE o DELETE) para modificarlos. Al contrario, puede hacer referencia a los datos directamente en expresiones.
Las ventajas de las bases de datos, en relación con las variables compartidas, son las siguientes:
  • Los datos son permanentes.
  • Los datos se cambian transaccionalmente.

Estas variables de lectura-escritura, con una duración mayor que la de un mensaje pero con un rendimiento superior a una base de datos, son ideales para usuarios dispuestos a sacrificar las ventajas de permanencia y transaccionalidad de las bases de datos para obtener un mayor rendimiento.

Con las variables compartidas por flujos (es decir, las definidas a nivel de esquema), tenga cuidado cuando varios flujos puedan actualizar las variables, especialmente si la variable se utiliza como contador. Asimismo, con variables compartidas por nodos (es decir, las definidas a nivel de módulo), tenga cuidado cuando varias instancias puedan actualizarlas.

Las variables de fila compartidas permiten que un programa de usuario realice una copia eficaz de lectura/escritura del mensaje de un nodo de entrada. Normalmente, esta característica es muy útil y, concretamente, simplifica la técnica para manejar mensajes grandes.

Hay una restricción por la cual los subárboles no pueden copiarse directamente de una variable de fila compartida a otra. Los subárboles puede copiarse indirectamente utilizando una variable de fila no compartida. Los valores escalares extraídos de una variable de fila compartida (utilizando la función FIELDVALUE) pueden copiarse a otra variable de fila compartida.

Ejemplo

Para obtener un ejemplo del uso de las variables compartidas, consulte el programa de ejemplo "Direccionamiento de mensajes", que muestra cómo utilizar tanto las variables compartidas como las externas. El ejemplo "Dirección de mensajes" está en la Galería de ejemplos en el Kit de herramientas de Message Brokers.

Conceptos relacionados
Visión general de ESQL
Propiedades definidas por el usuario en ESQL
Tareas relacionadas
Desarrollo de ESQL
Creación de referencias de campo dinámicas
Configurar un flujo de mensajes en el despliegue utilizando las UDP
Referencia relacionada
Diagramas de sintaxis: tipos disponibles
Sentencias ESQL
Tipos de datos ESQL en flujos de mensajes
Editor de flujos de mensajes
Función FIELDVALUE
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ak04980_