Aunque la sintaxis SQL SELECT estándar tiene soporte para consultas en una base de datos externa, hay varios puntos que hay que tener en cuenta. Debe añadir como prefijo al nombre de la tabla la palabra clave Database para indicar que SELECT tendrá como destino una base de datos externa y no una estructura de repetición del mensaje.
El formato básico de SELECT de base de datos es:
SELECT ... FROM Database.TABLE1 WHERE ...
Si es necesario, puede especificar un nombre de esquema:
SELECT ... FROM Database.SCHEMA.TABLE1 WHERE ...
donde SCHEMA es el nombre del esquema en el que se ha definido la tabla TABLE1. Incluya el esquema si el ID de usuario bajo el que está ejecutando no coincide con el esquema. Por ejemplo, si userID es USER1, la expresión Database.TABLE1 es equivalente a Database.USER1.TABLE1. No obstante, si el esquema asociado a la tabla de la base de datos es db2admin, debe especificar Database.db2admin.TABLE1. Si no incluye el esquema y éste no coincide con el ID de usuario actual, el intermediario genera un error de tiempo de ejecución cuando el flujo de mensajes procesa un mensaje.
SELECT ... FROM Database.DataSource.SCHEMA.TABLE1 WHERE ...
Limite las referencias a los nombres de columnas con el nombre de tabla o el nombre de correlación definido para la tabla mediante la cláusula FROM. Por lo tanto, donde normalmente ejecutaría una consulta como, por ejemplo:
SELECT column1, column2 FROM table1
debe escribir uno de los dos formatos siguientes:
SELECT T.column1, T.column2 FROM Database.table1 AS T SELECT table1.column1, table1.column2 FROM Database.table1
Esto es necesario para diferenciar las referencias a las columnas de base de datos desde cualquier referencia a los campos de un mensaje que también pueden aparecer en la sentencia SELECT:
SELECT T.column1, T.column2 FROM Database.table1 AS T WHERE T.column3 = Body.Field2
SELECT T.column1 AS price, T.column2 AS item FROM Database.table1 AS T WHERE...
Se da soporte a la opción SQL para seleccionar lo todo en el cláusula SELECT. Si utiliza esta opción, debe calificar los nombres de columnas con el nombre de tabla o el nombre de correlación definido para la tabla. Por ejemplo:
SELECT T.* FROM Database.Table1 AS T
Cuando utiliza nombres de funciones y procedimientos ESQL en una consulta de base de datos, la posición de los mismos en la llamada afecta el modo en que se procesan estos nombres. Si se determina que el procedimiento o la función afecta al resultado devuelto por la consulta, no se procesa como ESQL y se pasa como parte de la llamada a base de datos.
Esto es aplicable cuando se intenta utilizar un nombre de función o procedimiento con los identificadores de columna en la sentencia SELECT.
Por ejemplo, si utiliza una sentencia CAST en un identificador de columna especificado en la cláusula SELECT, se utiliza durante la consulta de base de datos para determinar el tipo de datos de los datos que se están devolviendo para dicha columna. Se efectúa una transformación CAST ESQL en dicho tipo de datos ESQL y los datos devueltos resultan afectados por el modo en que la interacción de base de datos interpreta dicho tipo de datos.
Si utiliza una función o procedimiento en un identificador de columna especificado en la cláusula WHERE, se pasa directamente al gestor de bases de datos para su proceso.
Los ejemplos de los siguientes temas muestran cómo se representan los conjuntos de resultados de las consultas de base de datos en WebSphere Message Broker. Los resultados de las consultas de base de datos se asignan a campos de un mensaje utilizando un nodo Compute.
Una función de columna es una función que toma los valores de una sola columna en todas las filas seleccionadas de una tabla o mensaje y devuelve un resultado individual escalar.