Puede hacer referencia a varias tablas que haya creado en la misma base de datos. Utilice la cláusula FROM de la sentencia SELECT para enlazar los datos de las dos tablas.
El ejemplo siguiente presupone que tiene dos tablas de base de datos denominadas USERTABLE1 y USERTABLE2. Ambas tablas tienen dos columnas de tipo de datos char(6) (o equivalentes).
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 |
Todas las tablas a las que hace referencia una sola función SELECT deben estar en la misma base de datos. La base de datos puede ser el valor predeterminado (especificado en la propiedad Origen de datos del nodo) u otra base de datos (especificada en la cláusula FROM de la función SELECT).
Configure el nodo Compute, Database o Filter que esté utilizando para identificar la base de datos en la que ha definido las tablas. Por ejemplo, si está utilizando la base de datos predeterminada, pulse el botón derecho del ratón en el nodo, seleccione Abrir ESQL y codifique las siguientes sentencias ESQL en el módulo de 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'
);
Este código genera el siguiente contenido de mensaje de salida:
<Test>
<Result>
<FirstColumn>value1</FirstColumn>
<SecondColumn>value2</SecondColumn>
<ThirdColumn>value7</ThirdColumn>
<FourthColumn>value8</FourthColumn>
</Result>
</Test>
Este ejemplo muestra cómo acceder a los datos desde 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 estar en la misma base de datos). También puede hacer referencia a uno o más árboles de mensaje y puede utilizar SELECT para unir tablas con tablas, mensajes con mensajes o tablas con mensajes. En Enlace de datos de mensajes y tablas de base de datos, se proporciona un ejemplo de cómo fusionar datos de mensaje con datos de una tabla de base de datos.
Si especifica una función ESQL o un procedimiento en el identificador de columna de la cláusula WHERE, se procesa como parte de la consulta de base de datos y no como ESQL.
Observe el ejemplo siguiente:
SET OutputRoot.XML.Test.Result =
THE(SELECT ITEM T.Column1 FROM Database.USERTABLE1 AS T
WHERE UPPER(T.Column2) = 'VALUE2');
Este código intenta devolver las filas en las que el valor de Column2 convertido en mayúsculas es VALUE2. No obstante, sólo el gestor de base de datos determina el valor de T.Column2 para cualquier fila concreta, por lo tanto, no se puede procesar mediante ESQL antes de emitir la consulta de base de datos, debido a que la cláusula WHERE determina las filas que se devuelven al flujo de mensajes.
Por lo tanto, se pasa UPPER al gestor de base de datos que se incluirá como parte de su proceso. No obstante, si el gestor de base de datos no puede procesar la señal contenida en la sentencia SELECT, se devuelve un error.