Selección de datos de las columnas de base de datos

Puede configurar un nodo Compute, Filter o Database para seleccionar datos de las columnas de base de datos e incluirlos en un mensaje de salida. El ejemplo siguiente presupone 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, Filter o Database para identificar la base de datos en la que ha definido la tabla. Por ejemplo, si utiliza la base de datos por omisión, (especificada en la propiedad "origen de datos" del nodo), 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 = InputRoot;
DELETE FIELD OutputRoot.*[<];
SET OutputRoot.XML.Test.Result[] =
  (SELECT T.Column1, T.Column2 FROM Database.USERTABLE AS T);

Este procedimiento genera 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 un texto 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 final debe ser <Test> para que coincida con la referencia del ESQL. De no ser así, las sentencias ESQL resultantes formarán códigos finales de nivel superior, lo cual no es XML válido.

Si desea crear un mensaje de salida que incluya todas las columnas de todas las filas que cumplen con una condición determinada, utilice la sentencia SELECT con una cláusula WHERE:

-- Declarar e inicializar una variable que contenga el 
--      valor de test (en este caso el apellido Smith)
DECLARE CurrentCustomer STRING 'Smith';

-- Cree un bucle por los registros de la tabla para extraer la 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 de la tabla.

Si está familiarizado con SQL en un entorno de base de datos, es posible que espere poder codificar SELECT *. Pero esto no lo acepta el intermediario porque debe iniciar todas las referencias a columnas con un nombre de correlación. Esto evita las ambigüedades de las variables declaradas. Asimismo, si codifica SELECT I.*, el intermediario lo aceptará pero el asterisco, *, se interpretará como el hijo, no como todos los elementos, como está previsto en otro SQL de base de datos.

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

Si el sistema de base de datos es sensible a las mayúsculas y minúsculas, debe utilizar un método alternativo. Este método también es necesario, si desea modificar el nombre del campo generado por algo diferente:

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 columnas de base de datos (en este ejemplo, T.Column1 y T.Column2) se especifiquen con las mayúsculas y minúsculas correctas, de modo que coincidan exactamente con las definiciones de la base de datos. Si no lo hace así, por ejemplo, si especifica T.COLUMN1, el intermediario genera un error de tiempo de ejecución. Observe el uso de Column1 y Column2 en la sentencia SELECT. Aquí puede utilizar cualquier valor, no es necesario que coincida con el de los nombres de las columnas que ha definido en la base de datos, como ocurre en este ejemplo.

Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ak05810_