Puede configurar un nodo Compute para seleccionar datos de columnas de base de datos e incluirlos en un mensaje de salida. En el ejemplo siguiente se da por supuesto que tiene una tabla de base de datos denominada USERTABLE con dos columnas de tipo de datos char(6) (o equivalente) denominadas Column1 y Column2. La tabla contiene dos filas:
Column1 | Column2 | |
---|---|---|
Fila 1 | value1 | value2 |
Fila 2 | value3 | value4 |
Configure el nodo Compute para que identifique la base de datos en la que ha definido la tabla (propiedad Origen de datos). 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 = InputRoot; DELETE FIELD OutputRoot.*[<]; SET OutputRoot.XML.Test.Result[] = (SELECT T.Column1, T.Column2 FROM Database.USERTABLE AS T);
Esto dará como resultado el siguiente mensaje de salida:
<Test> <Result> <Column1>value1</Column1> <Column2>value2</Column2> </Result> <Result> <Column1>value3</Column1> <Column2>value4</Column2> </Result> </Test>
<Test> <Result> <Column1></Column1> <Column2></Column2> </Result> <Result> <Column1></Column1> <Column2></Column2> </Result> </Test>
La estructura exacta del XML no es importante, pero el código que lo incluya debe ser <Test> para que coincida con la referencia de ESQL. Si no lo es, las sentencias ESQL causarán la formación de códigos incluyentes de nivel superior, lo que no es XML válido.
Si desea crear un mensaje de salida que incluya todas las columnas de todas las filas que cumplen una condición determinada, utilice la sentencia SELECT con una cláusula WHERE:
-- Declarar e inicializar una variable para que contenga -- el valor de prueba (en este caso, el apellido Smith) DECLARE CurrentCustomer STRING 'Smith'; -- Crear un bucle en los registros de tabla para extraer información coincidente SET OutputRoot.XML.Invoice[] = (SELECT R FROM Database.USERTABLE AS R WHERE R.Customer.LastName = CurrentCustomer );
Los campos de mensajes se crean en el mismo orden en que aparecen las columnas en la tabla.
Si está familiarizado con SQL en un entorno de base de datos, tal vez espere el código SELECT *. El intermediario no lo acepta porque debe iniciar todas las referencias a columnas con un nombre de correlación. Así se evitan ambigüedades con las variables declaradas. Además, si crea el código SELECT I.*, el intermediario lo aceptará pero el * se interpretará como el primer elemento dependiente, no como todos los elementos, como cabría esperar de otros tipos de SQL de base de datos.
Si el sistema de base de datos es sensible a las mayúsculas y minúsculas, debe utilizar un enfoque alternativo. Este enfoque también es necesario si desea cambiar el nombre del campo generado por otro distinto:
SET OutputRoot = InputRoot; SET OutputRoot.XML.Test.Result[] = (SELECT T.Column1 AS Column1, T.Column2 AS Column2 FROM Database.USERTABLE AS T);
Este ejemplo genera el mismo mensaje que el ejemplo anterior. Asegúrese de que las referencias a las columnas de base de datos (en este ejemplo, T.Column1 y T.Column2) se especifican correctamente en mayúsculas o minúsculas para que coincidan exactamente con las definiciones de la base de datos. Si no lo hace así, por ejemplo, si especifica T.COLUMN1, el intermediario generará un error de ejecución. Observe el uso de Column1 y Column2 en la sentencia SELECT. Puede utilizar cualquier valor; a diferencia de este ejemplo, no tienen por qué coincidir con los nombres de las columnas que ha definido en la base de datos.
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
Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
ESQL
Sentencia DECLARE
Sentencia DELETE
Función SELECT
Sentencia SET
Avisos |
Marcas registradas |
Descargas |
Biblioteca |
Soporte |
Información de retorno (feedback)
![]() ![]() |
ak05810_ |