Sentencia PROPAGATE

La sentencia PROPAGATE propaga el mensaje de entrada a los nodos en sentido descendente del flujo de mensajes.

Sintaxis

Cuando se utiliza en un nodo Compute, la sentencia PROPAGATE finaliza los árboles de mensajes de salida del nodo (es decir, arregla las cadenas de cabeceras) y se propaga a los nodos en sentido descendente del flujo de mensajes. A continuación, la sentencia PROPAGATE borra los árboles de mensajes de salida y reclama la memoria lista para su uso en el futuro.

El árbol Environment se propaga siempre. Los árboles Local Environment, de lista de mensajes y de lista de excepción que se propagan, pueden ser los árboles de entrada o salida bajo el control de la propiedad Modalidad de cálculo de manera normal. Sin embargo, son los árboles de salida los que se finalizan y borran, independientemente de los que se propaguen.

Por omisión, el nodo Compute se propaga automáticamente a sus nodos en sentido descendente cuando su ESQL se interrumpe. Para evitar que esto haga que ESQL devuelva el valor FALSE (consulte el apartado Sentencia RETURN).

Cuando se utiliza en un nodo Database, la sentencia PROPAGATE se comporta se forma similar. Propaga el mensaje de entrada a los nodos en sentido descendente en el flujo de mensajes. Por omisión, el nodo Database también se propaga automáticamente a sus nodos en sentido descendente cuando su ESQL se interrumpe. Esto se puede evitar haciendo que ESQL devuelva el valor FALSE (consulte el apartado Sentencia RETURN).

No utilice la sentencia PROPAGATE en nodos Filter.

Cuando se utiliza la sentencia PROPAGATE, la vía de acceso que toma el mensaje como resultado y el proceso que se aplica al mismo por nodos posteriores, se consideran parte del proceso de la propia sentencia PROPAGATE. La ejecución del nodo que emite PROPAGATE no se completa hasta que se ha devuelto el control y el ESQL se interrumpe. Si utiliza PROPAGATE en un nodo que tiene Transacción definido como Confirmar, las actualizaciones de base de datos que ha realizado en este nodo no se confirmarán hasta que el ESQL se interrumpa. Por consiguiente, si el proceso en la vía de acceso PROPAGATE da como resultado una excepción y el flujo de mensajes restituye su unidad de trabajo, la actividad de base de datos también se restituirá.

El ESQL de este ejemplo produce tres mensajes en el terminal OUT, utilizando el mensaje de ejemplo incluido en el apartado Mensaje de ejemplo:

DECLARE i INTEGER 1;

WHILE i <= CARDINALITY(InputRoot.XML.Invoice.Purchases."Item"[]) DO
    			SET OutputRoot = InputRoot;
    		SET OutputRoot.XML = NULL;
    SET OutputRoot.XML.BookSold."Item" = InputRoot.XML.Invoice.Purchases."Item"[i];
    PROPAGATE; 
    SET i = i+1;
END WHILE; 
RETURN FALSE;

Estos son los mensajes producidos en el terminal OUT por la sentencia PROPAGATE:

<BookSold>
 <Item>
  <Title Category="Computer" Form="Paperback" Edition="2">The XML Companion </Title>
  <ISBN>0201674866</ISBN>
  <Author>Neil Bradley</Author>
  <Publisher>Addison-Wesley</Publisher>
  <PublishDate>October 1999</PublishDate>
  <UnitPrice>27.95</UnitPrice>
  <Quantity>2</Quantity>
 </Item>
</BookSold>
<BookSold>
 <Item>
  <Title Category="Computer" Form="Paperback" Edition="2">A Complete Guide to 
   DB2 Universal Database</Title>
  <ISBN>1558604820</ISBN>
  <Author>Don Chamberlin</Author>
  <Publisher>Morgan Kaufmann Publishers</Publisher>
  <PublishDate>April 1998</PublishDate>
  <UnitPrice>42.95</UnitPrice>
  <Quantity>1</Quantity>
 </Item>
</BookSold>
<BookSold>
 <Item>
  <Title Category="Computer" Form="Hardcover" Edition="0">JAVA 2 Developers Handbook</Title>
  <ISBN>0782121799</ISBN>
  <Author>Phillip Heller, Simon Roberts </Author>
  <Publisher>Sybex, Inc.</Publisher>
  <PublishDate>September 1998</PublishDate>  <UnitPrice>59.99</UnitPrice>
  <Quantity>1</Quantity>
 </Item>
</BookSold>

Conceptos relacionados
ESQL

Tareas relacionadas
Desarrollo de ESQL
Generación de varios mensajes de salida
Confirmar actualizaciones de base de datos

Referencia relacionada
Preferencia de sintaxis
Sentencias ESQL
Sentencia RETURN
Mensaje de ejemplo