Acceso a varias tablas de base de datos

Puede hacer referencia a varias tablas que haya creado en la misma base de datos. Utilice la cláusula FROM en la sentencia SELECT para unir los datos de ambas tablas.

En el ejemplo siguiente se da por supuesto que tiene dos tablas de base de datos denominadas USERTABLE1 y USERTABLE2. Ambas tablas tienen dos columnas de tipo de datos char(6) (o equivalente).

USERTABLE1 contiene dos filas:

  Column1 Column2
Fila 1 value1 value2
Fila 2 value3 value4

USERTABLE2 contiene dos filas:

  Column3 Column4
Fila 1 value5 value6
Fila 2 value7 value8

Configure el nodo Compute para que identifique la base de datos en la que ha definido ambas tablas. Pulse el botón derecho del ratón en el nodo, seleccione Abrir ESQL y codifique las sentencias ESQL siguientes en el módulo para este nodo:

SET OutputRoot.XML.Test.Result[] =
         (SELECT A.Column1 AS FirstColumn,
                 A.Column2 AS SecondColumn,
                 B.Column3 AS ThirdColumn,
                 B.Column4 AS FourthColumn
            FROM Database.USERTABLE1 AS A,
                 Database.USERTABLE2 AS B
           WHERE A.Column1 = 'value1' AND
                 B.Column4 = 'value8'
         ); 

Esto dará como resultado el siguiente contenido del mensaje de salida:

<Test>
  <Result>
    <FirstColumn>value1</FirstColumn>
    <SecondColumn>value2</SecondColumn>
    <ThirdColumn>value7</ThirdColumn>
    <FourthColumn>value8</FourthColumn>
  </Result>
</Test>

El ejemplo anterior muestra cómo se accede a datos de dos tablas de base de datos. Puede codificar cláusulas FROM más complejas para acceder a varias tablas de base de datos; aunque todas las tablas deben ser de una sola base de datos (definida por la propiedad Origen de datos del nodo). También puede hacer referencia a uno o más árboles de mensajes y puede utilizar SELECT para unir tablas con tablas, mensajes con mensajes o tablas con mensajes. El apartado Unión de datos de mensajes XML y tablas de base de datos proporciona un ejemplo sobre la manera de fusionar datos de mensajes en una tabla de base de datos.

Si especifica una función ESQL o se especifica un nombre de procedimiento en el identificador de columna de la cláusula WHERE, esto se procesa como parte de la consulta de base de datos y no como ESQL.

Examine el ejemplo siguiente:

  SET OutputRoot.XML.Test.Result = 
     THE(SELECT ITEM T.Column1 FROM Database.USERTABLE1 AS T 
     WHERE UPPER(T.Column2) = 'VALUE2');

Este ejemplo intenta devolver las filas donde el valor de Column2 convertido a mayúsculas es VALUE2. No obstante, sólo el gestor de bases de datos puede determinar el valor de T.Column2 para cualquier fila determinada y, por consiguiente, ESQL no puede procesarlo antes de que se emita la consulta de base de datos, porque la cláusula WHERE determina las filas que se devuelven al flujo de mensajes.

Por consiguiente, UPPER se pasa al gestor de bases de datos para incluirlo como parte de su proceso. No obstante, si el gestor de bases de datos no puede procesar la señal en la sentencia SELECT, se devolverá un error.

Conceptos relacionados
Flujos de mensajes
ESQL
Diseño de mensajes

Tareas relacionadas
Diseño de un flujo de mensajes
Definición del contenido del flujo de mensajes
Gestión de archivos ESQL
Unión de datos de mensajes XML y tablas de base de datos

Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
ESQL
Función SELECT
Sentencia SET