Utilice la sentencia DECLARE para definir una variable, el tipo de datos de la variable y, si lo desea, su valor inicial.
.-<<-,-<<---. V | >>-DECLARE---- -Nombre -+--+------------------+-----------------> +-SHARED (1) (2)---+ '-EXTERNAL (3) (4)-' >--+-+----------+--TipoDatos (5)-+--+-----------------------+-->< | '-CONSTANT-' | '-ExpresiónValorInicial-' +-NAMESPACE (6)---------------+ '-NAME (6)--------------------'
Siga los enlaces para ver más información sobre todos estos parámetros:
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, este valor 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 editor 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 en un flujo de mensajes deben tener un valor, proporcionado mediante una sentencia DECLARE, o el flujo de mensajes o el editor del 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,
Puede definir una UDP para un subflujo. Una UDP tiene un ámbito global y no es específica de ningún subflujo en particular. Si reutiliza un subflujo en un flujo de mensajes, y estos subflujos tienen UPD idénticas, no podrá establecer las UDP en valores diferentes.
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, significa que 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 puede modificar en tiempo de ejecución utilizando la API de CMP.
Las UPD sólo se pueden declarar 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.
Ejemplo 1:
DECLARE mycolor 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.Utilice NAME para definir un alias (un nombre alternativo) por el que puede ser conocida 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.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;
Ejemplo 2:
-- At Module scope define ColourElementName and set it external
-- so that its default value of 'black' can be overridden as a UDP
DECLARE ColourElementName EXTERNAL NAME 'black';
-- Use the ColourElementName in a function
CREATE FIRSTCHILD OF OutputRoot.XMLNSC.TestCase.ColourElementName
Domain('XMLNSC')
NAME 'Node1' VALUE '1';
Si el flujo de mensajes propietario se ha configurado con una UDP denominada ColourElementName del tipo Serie, a la que se le ha dado el valor de red, se generará el mensaje de salida siguiente:
<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.
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.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.
Puesto que las variables SHARED se pueden actualizar mediante varias instancias adicionales, debe asegurarse de que no se efectúan cambios en variables SHARED que podrían causar resultados inesperados si, por ejemplo, la variable está siendo usada como contador.
CREATE SCHEMA testSchema
DECLARE mySharedRow SHARED ROW;
DECLARE initialized SHARED BOOLEAN myINIT();
CREATE COMPUTE MODULE testModule
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot.XMLNSC.Top.TEST.Result1 VALUE = initialized;
SET OutputRoot.XMLNSC.Top.TEST.Result2 = mySharedRow;
END;
END MODULE;
CREATE FUNCTION myINIT( ) RETURNS BOOLEAN
BEGIN
LOG EVENT VALUES('myINIT CALLED');
SET mySharedRow.Top[] = SELECT A.MyCol1, A.MyCol2 from Database.Test AS A;
RETURN TRUE;
END;
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 entrada en el nodo de entrada utilizando variables de filas compartidas, lo que simplifica la técnica para manejar mensajes grandes.
Los subárboles no se pueden copiar directamente de 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.
Puede ver información sobre los ejemplos sólo cuando utilice el Information Center que está integrado en WebSphere Message Broker Toolkit o el Information Center en línea. Puede ejecutar ejemplos sólo cuando utilice el Information Center que está integrado en WebSphere Message Broker Toolkit.