Sentencia DECLARE

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

SINTAXIS

procedimiento.
  • No se puede especificar SHARED con el TipoDatos REFERENCE. (Para almacenar un árbol de mensaje en una variable compartida, utilice el tipo de datos ROW.)
  • Las variables EXTERNAL son constantes implícitamente.
  • Se recomienda dar un valor inicial a una variable EXTERNAL.
  • Si especifica el TipoDatos REFERENCE, debe especificar un valor inicial (de una variable o un árbol) en ExpresiónValorInicial.
  • 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. 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 (definidas con la palabra clave SHARED) tienen una duración larga: consulte Variables de larga duración. Sólo se reinicializan cuando se modifica o reinicia un flujo de mensajes, y son visibles para todos los mensajes que pasan por el flujo de mensajes. Sus valores pueden modificarse mediante ESQL.

    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.

    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 extremo de la derecha de la asignación se utiliza una constante de 
              espacio de nombres como, por ejemplo, while
           -- En el extremo de la izquierda, se utiliza una como una constante ordinaria 
              (estos es, 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).

    Las variables compartidas tienen una gran duración y son visibles para múltiples mensajes que pasan por un flujo. 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.

    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
    Tareas relacionadas
    Desarrollo de ESQL
    Creación de referencias de campo dinámicas
    Utilización de las UDP para configurar un flujo de mensajes en el tiempo de despliegue
    Referencia relacionada
    Diagramas de sintaxis: tipos disponibles
    Sentencias ESQL
    Tipos de datos ESQL en flujos de mensajes
    Editor de flujos de mensajes
    Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
    Copyright IBM Corporation 1999, 2005 Última actualización: 11/11/2005
    ak04980_