Sentencia SET

La sentencia SET asigna un valor a una variable.

SINTAXIS

Introducción

ReferenciaCampoDestino identifica el destino de la asignación. El destino puede ser uno de estos valores:
  • Una variable escalar declarada
  • Una variable de fila declarada
  • Una de las variables de fila predefinidas (por ejemplo, InputRoot)
  • Un campo dentro de cualquier tipo de variable de fila (es decir, un subárbol o fila conceptual)
  • Una lista de campos dentro de cualquier tipo de variable de fila (es decir, una lista conceptual)
  • Una variable de referencia declarada que apunta a uno de los elementos anteriores
El destino no puede ser ningún tipo de entidad de base de datos.

ExpresiónOrigen es una expresión que proporciona el valor que se debe asignar. Puede ser cualquier tipo de expresión y puede devolver un valor escalar, de fila o de lista.

Asignación a variables escalares

Si el destino es una variable escalar declarada, se evalúa ExpresiónOrigen y se asigna a la variable. Si es necesario, su valor se convierte al tipo de datos de la variable. Si esta conversión no es posible, habrá un error en tiempo de despliegue o una excepción en tiempo de ejecución.

Los valores Null se manejan exactamente del mismo modo que cualquier otro valor. Es decir, si la expresión se evalúa en Null, se asigna el valor "null" a la variable.

Para las variables escalares, las cláusulas TYPE, NAME, NAMESPACE y VALUE no tienen sentido y no se permiten.

Asignación a filas, listas y campos

Si el destino es una variable de fila declarada, una de las variables de fila predefinidas, un campo dentro de cualquier tipo de variable de fila, una lista de campos dentro de cualquier variable de fila, o una variable de referencia declarada que apunta a cualquiera de estos elementos, el destino final es un campo. En estos casos, se navega al campo de destino (creando los campos, si fuera necesario).

Si se utilizan índices de matriz en ReferenciaCampoDestino, la navegación al campo de destino sólo puede crear campos en la vía de acceso directa desde el elemento raíz al campo de destino. Por ejemplo, la siguiente sentencia SET requiere que ya exista en el mensaje una instancia, como mínimo, de Structure:

SET OutputRoot.XML.Message.Structure[2].Field = ... 
El valor del campo de destino se establece según un conjunto de normas, basadas en:
  1. La presencia o ausencia de las cláusulas TYPE, NAME, NAMESPACE o VALUE
  2. El tipo de datos devueltos por la expresión de origen
  1. Si no está presente ninguna cláusula TYPE, NAME, NAMESPACE ni VALUE (que es el caso más común) la salida depende de si ExpresiónOrigen toma un valor escalar, de una fila o de una lista:
    • Si ExpresiónOrigen toma un valor escalar, el valor del campo de destino se establece en el valor que devuelve ExpresiónOrigen, con la excepción de que, si el resultado es Null, se descarta el campo de destino. Tenga en cuenta que es posible que el nuevo valor del campo no sea del mismo tipo de datos que el valor anterior.
    • Si ExpresiónOrigen toma el valor de una fila:
      1. Se identifica el campo de destino.
      2. Se establece el valor del campo de destino.
      3. Los campos hijo del campo de destino se sustituyen por un nuevo conjunto, según la estructura y el contenido de la lista.
    • Si ExpresiónOrigen toma el valor de una lista:
      1. Se identifica el conjunto de campos de destino en el árbol de destino.
      2. Si hay demasiado pocos campos de destino, se crean más; si hay demasiados, se eliminan los que sobran.
      3. Se establecen los valores de los campos de destino.
      4. Los campos hijo de los campos de destino se sustituyen por un nuevo conjunto, según la estructura y el contenido de la lista.

      Para obtener más información sobre cómo trabajar con elementos de tipo list, consulte Cómo trabajar con elementos de tipo xsd:: list

  2. Si está presente una cláusula TYPE, el tipo del campo de destino se establece en el valor devuelto por ExpresiónOrigen. Se genera una excepción si el valor devuelto no es escalar, no es de tipo INTEGER ni es NULL.
  3. Si está presente una cláusula NAMESPACE, el espacio de nombres del campo de destino se establece en el valor devuelto por ExpresiónOrigen. Se genera una excepción si el valor devuelto no es escalar, no es de tipo CHARACTER ni es NULL.
  4. Si está presente una cláusula NAME, el nombre del campo de destino se establece en el valor devuelto por ExpresiónOrigen. Se genera una excepción si el valor devuelto no es escalar, no es de tipo CHARACTER ni es NULL.
  5. Si está presente una cláusula VALUE, el valor del campo de destino se modifica por el que devuelve ExpresiónOrigen. Se genera una excepción si el valor devuelto no es escalar.

Notas

Las sentencias SET son especialmente útiles en los nodos Compute que modifican un mensaje, ya sea cambiando un campo o añadiendo un campo nuevo al mensaje original. Las sentencias SET también son útiles en los nodos Filter y Database para establecer variables declaradas o los campos del árbol Entorno o de los árboles Entorno local. Puede utilizar sentencias como las siguientes en un nodo Compute que modifique un mensaje:
SET OutputRoot = InputRoot; 
SET OutputRoot.XML.Order.Name = UPPER(InputRoot.XML.Order.Name);

Este ejemplo coloca un campo en el mensaje en mayúsculas. La primera sentencia crea un mensaje de salida que es una copia completa del mensaje de entrada. La segunda sentencia establece el valor del campo Order.Name en un valor nuevo, como se ha definido mediante la expresión de la derecha.

Si el campo Order.Name no existe en el mensaje de entrada original, no existe en el mensaje de salida generado por la primera sentencia. La expresión de la derecha de la segunda sentencia devuelve NULL (debido a que el campo al que se hace referencia en la llamada a la función UPPER no existe). Asignar el valor NULL a un campo tiene el efecto de suprimirlo si éste ya existe y, como resultado, la segunda sentencia no tiene efecto alguno.

Si desea asignar un valor NULL a un campo sin suprimirlo, utilice una sentencia como esta:
 SET OutputRoot.XML.Order.Name VALUE = NULL;
Conceptos relacionados
Visión general de ESQL
Tareas relacionadas
Desarrollo de ESQL
Acceder a elementos en el cuerpo del mensaje
Referencia relacionada
Diagramas de sintaxis: tipos disponibles
Sentencias ESQL
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ak05140_