Manipulación de campos de repetición en un árbol de mensaje

En este tema se describe el uso de la función SELECT y otras funciones de columna para manipular los campos de repetición en un árbol de mensaje.

Suponga que desea realizar una acción especial en las facturas que tienen un valor total de pedido superior a una cantidad determinada. Para calcular el valor total del pedido de un campo Invoice, debe multiplicar los campos Price por los campos de Quantity de todos los Items del mensaje y obtener el resultado total. Puede hacerlo utilizando una expresión SELECT como se indica a continuación:

(
 SELECT SUM( CAST(I.Price AS DECIMAL) * CAST(I.Quantity AS INTEGER) )
  FROM Body.Invoice.Purchases."Item"[] AS I
) 

El ejemplo presupone que tiene que utilizar expresiones CAST para realizar una transformación CAST de los valores de series de caracteres de los campos Price y Quantity en los tipos de datos correctos. La transformación CAST del campo Price en decimales genera un valor decimal con la escala y la precisiónnaturales, esto es, la escala y precisión necesarias para representar el número. Estas transformaciones CAST no serán necesarias si los datos ya estaban en un tipo de datos adecuado.

La expresión SELECT funciona de un modo similar al predicado cuantificado y de un modo muy similar a como funciona SELECT en SQL de base de datos estándar. La cláusula FROM especifica lo que se está iterando, en este caso, todos los campos de Item en Invoice y establece que se puede hacer referencia a la instancia actual de Item utilizando I. Este formato de SELECT implica una función de columna, este caso la función SUM, por lo tanto, SELECT se evalúa sumando los resultados de la evaluación de la expresión dentro de la función SUM para cada campo Item de Invoice. Al igual que con SQL estándar, las funciones de columna ignoran los valores NULL, con la excepción de la función de columna COUNT descrita anteriormente y la función de columna devuelve un valor NULL únicamente si no hay ningún valor que no sea NULL con el que pueda combinarse.

Las otras funciones de columnas proporcionadas son MAX, MIN y COUNT. La función COUNT tiene dos formatos que funcionan de diferentes maneras en relación con los valores NULL. El primer formato se utiliza de forma muy similar a la función SUM anterior, por ejemplo:

SELECT COUNT(I.Quantity)
  FROM Body.Invoice.Purchases."Item"[] AS I

Esta expresión devuelve el número de campos Item para los que el campo Quantity no es NULL. Esto es, la función COUNT cuenta valores que no son NULL, del mismo modo que la función SUM añade valores que no son NULL. El modo alternativo de utilizar la función COUNT es la siguiente:

SELECT COUNT(*)
  FROM Body.Invoice.Purchases."Item"[] AS I

Utilizar COUNT(*) cuenta el número total de campos Item, independientemente de si cualquiera de los campos es NULL. De hecho, el ejemplo anterior es equivalente a utilizar la función CARDINALITY, como a continuación:

CARDINALITY(Body.Invoice.Purchases."Item"[]

En todos los ejemplos de SELECT que se han proporcionado aquí, del mismo modo que en SQL estándar, puede utilizar una cláusula WHERE para proporcionar el filtrado de los campos.

Conceptos relacionados
Visión general de flujos de mensajes
Visión general de ESQL
Modelado de mensajes
Tareas relacionadas
Diseñar un flujo de mensajes
Definir el contenido del flujo de mensajes
Gestión de archivos ESQL
Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
Referencia de ESQL
Función CARDINALITY
Función SELECT
Mensaje de ejemplo
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ak20705_