Selección de datos de columnas de base de datos

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>
Para desencadenar la sentencia SELECT, envíe un mensaje desencadenante con cuerpo XML que tenga el formato siguiente:
<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.

Selección de datos de una tabla en un sistema de base de datos sensible a las mayúsculas y minúsculas

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