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 la base de datos por omisión (especificada 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, Filter o Database que esté utilizando para identificar la base de datos en la que ha definido las tablas. Por ejemplo, si utiliza la base de datos por omisión, pulse el botón derecho del ratón en el nodo, seleccione Abrir ESQL y codifique las siguientes sentencias ESQL del 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 genera el siguiente contenido de 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 acceder a los 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 estar en la misma base de datos). 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. En Enlace de datos de mensajes XML y tablas de base de datos se proporciona un ejemplo de cómo fusionar los datos del mensaje con los datos de una tabla de base de datos.
(definido por la propiedad origen de datos del nodo).
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');
Esto 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 y, 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.