La sentencia DECLARE define una variable, el tipo de datos de la variable y, opcionalmente, su valor inicial.
Notas:
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 se muestra en la lista siguiente:
Una constante o variable que está declarada en una rutina solapa cualquier parámetro del mismo nombre y todas las constantes y variables del mismo nombre que están declaradas en el módulo o esquema que la contiene.
Utilice EXTERNAL para indicar una UDP (propiedad definida por el usuario). Una UDP es una constante definida por el usuario cuyo valor inicial (opcionalmente establecido por la sentencia DECLARE) puede modificar el editor de flujos de mensajes en el momento de diseño (consulte Editor de flujos de mensajes) o cuyo valor inicial puede alterar temporalmente el editor de archivador de intermediario puede alterar temporalmente durante el despliegue (consulte Editor de archivador de intermediario). El valor de una UDP no se puede modificar mediante ESQL.
Cuando se da un valor inicial a la UDP en la sentencia DECLARE, éste pasa a ser su valor predeterminado. Sin embargo, cualquier valor que especifique en el Editor de flujos de mensajes durante el diseño, o en el del archivador de intermediario durante el despliegue (incluso una serie de longitud cero), alterará temporalmente cualquier valor inicial codificado en la sentencia DECLARE.
DECLARE deployEnvironment EXTERNAL CHARACTER 'Dev';ha definido una variable UDP deployEnvironment con un valor inicial Dev.
Añada la UDP al flujo de mensajes utilizando el
separador UDP en el editor de flujos de mensajes.
Cuando se añade el flujo al archivo BAR, la UDP está allí como atributo del flujo; debe
dar al el atributo el mismo nombre de la variable ESQL en la sentencia DECLARE (en este caso
deployEnvironment) para asegurarse de que el valor inicial que establezca no cambie.
Todas las UDP de un flujo de mensajes deben tener un valor, proporcionado mediante una sentencia DECLARE, o el flujo de mensajes o el editor de archivador de intermediario; de lo contrario, se produce un error en tiempo de despliegue. Durante la ejecución, después de haber declarado la UDP, su valor se puede consultar mediante sentencias ESQL subsiguientes,
La ventaja de las UDP es que sus valores se pueden
cambiar durante el despliegue. Por ejemplo, si utiliza las UDP para que contengan datos de configuración,
puede configurar un flujo de mensajes para un sistema, tarea o entorno determinados en el tiempo de despliegue, sin tener que cambiar el código a nivel de nodo. Las
UDP también se pueden modificar en la ejecución utilizando la API de Proxy de Gestor de configuración
(CMP).
Sólo puede declarar las UDP en módulos o esquemas, esto significa que puede utilizar la sentencia DECLARE con la palabra clave EXTERNAL sólo a nivel de módulo o esquema. Si utiliza una sentencia DECLARE con la palabra clave EXTERNAL dentro de un procedimiento o función, se genera una excepción BIP2402E cuando despliega el flujo de mensajes.
Tenga cuidado al especificar el tipo de datos de una UDP, porque se utiliza una transformación CAST para cambiar el valor al TipoDatos solicitado.
Para obtener una visión general de las UDP, consulte Propiedades definidas por el usuario en ESQL.
DECLARE mycolor EXTERNAL CHARACTER 'blue';
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.
Utilice NAME para definir un alias (un nombre alternativo) por el que puede ser conocida una variable.
-- La sentencia siguiente proporciona el alias 'Joe' a Schema1. DECLARE Schema1 NAME 'Joe'; -- La sentencia siguiente crea un campo denominado 'Joe'. SET OutputRoot.XMLNS.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;
DECLARE Schema1 EXTERNAL NAME; CREATE FIRSTCHILD OF OutputRoot.XMLNS.TestCase.Schema1 Domain('XMLNS') 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>
Utilice NAMESPACE para definir un alias (un nombre alternativo) por el que puede ser conocido un espacio de nombres.
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.XMLNS.{prefixOne}:{'PurchaseOrder'} = InputRoot.XMLNS.prefixOne:PurchaseOrder;
Utilice SHARED para definir una variable compartida. Las variables compartidas están 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). Ningún tipo de variable es visible más allá del nivel de flujo; por ejemplo, no puede compartir variables entre grupos de ejecución.
Puede utilizar variables compartidas 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 larga duración y son visibles para múltiples mensajes que pasan por un flujo; consulte Variables de larga duración.
No se puede definir una variable compartida dentro de una función o procedimiento.
Estas variables de lectura-escritura son ideales para usuarios dispuestos a sacrificar las ventajas de persistencia y transaccionalidad de las bases de datos a fin de obtener un mayor rendimiento, puesto que tienen una duración más larga que un solo mensaje y un rendimiento superior a una base de datos.
Como las variables compartidas
se pueden actualizar mediante varias instancias adicionales, asegúrese de que no efectúa cambios en variables compartidas que podrían causar
resultados inesperados si, por ejemplo, la variable está siendo usada como contador.
Puede impedir que otras instancias vean las etapas intermedias de los datos utilizando una construcción BEGIN ATOMIC; consulte Sentencia BEGIN ... END.
El programa del usuario puede realizar una copia de lectura o escritura eficaz de un mensaje de nodo de entrada utilizando variables de filas compartidas, lo que simplifica la técnica para manejar mensajes grandes.
Los subárboles no pueden copiarse directamente desde una variable de fila compartida a otra. Los subárboles se pueden copiar 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.