Nodo Database

Este tema contiene los apartados siguientes:

Finalidad

Utilice el nodo Database para interactuar con una base de datos del origen de datos ODBC especificado. La naturaleza de la interacción se define codificando sentencias ESQL que especifican los datos del mensaje de entrada y, quizá, los transforman de algún modo (por ejemplo, para realizar un cálculo) y asignan el resultado a una tabla de base de datos.

Puede establecer una propiedad para controlar si la actualización de una base de datos se debe confirmar inmediatamente, o bien, si se debe diferir hasta que finalice el flujo de mensajes, cuando la actualización se confirma o se restituye según el estado de finalización global del flujo de mensajes.

Aunque puede utilizar este nodo para actualizar la base de datos, no puede realizar ninguna actualización en el mensaje.

Puede utilizar formatos especializados de este nodo para:

  • Actualizar valores de una tabla de base de datos (nodo DataUpdate)
  • Insertar filas en una tabla de base de datos (nodo DataInsert)
  • Suprimir filas de una tabla de base de datos (nodo DataDelete)
  • Almacenar el mensaje, o partes del mismo, en un almacén (nodo Warehouse)

El nodo Database se representa en el área de trabajo mediante el icono siguiente:

icono del nodo Database

Utilización de este nodo en un flujo de mensajes

Consulte los ejemplos siguientes para informarse sobre cómo puede utilizar este nodo:

Imagínese una situación en la que recibe un pedido de 20 monitores. Si dispone de suficientes monitores en el almacén, desea el nivel de existencias de la base de datos de existencias. Puede utilizar el nodo Database para comprobar si tiene suficientes monitores disponibles y disminuir el valor del campo de cantidad de la base de datos.

Configuración del nodo Database

Se puede configurar al transferir una instancia del nodo Database a un flujo de mensajes. Pulse el botón derecho del ratón en la vista del editor y, a continuación, pulse en Propiedades. Se muestran las propiedades básicas del nodo.

Todas las propiedades obligatorias para las que debe entrar un valor (las que no tienen un valor por omisión definido) se muestran marcadas con un asterisco en el diálogo de propiedades.

Configure el nodo Database tal como se indica a continuación:

  1. Especifique en Origen de datos el nombre por el que se conoce la base de datos adecuada en el sistema en el que se va a ejecutar este flujo de mensajes. El intermediario conecta a esta base de datos con información de contraseña e ID de usuario que se ha especificado en el mandato mqsicreatebroker, mqsichangebroker o mqsisetdbparms.

    En sistemas z/OS, el intermediario utiliza el ID de tarea iniciada del intermediario.

  2. En Sentencia, identifique el módulo de un archivo ESQL que contenga las sentencias ESQL que se van a ejecutar en este nodo. Si desea que el nombre del módulo incluya uno o más espacios, especifíquelo entre comillas en la propiedad Sentencia.

    Cuando codifica sentencias ESQL que interactúan con tablas, se presupone que las tablas existen en esta base de datos. Si no es así, el intermediario genera un error de base de datos durante la ejecución.

    Codifique sentencias ESQL para personalizar el comportamiento del nodo Database en un archivo ESQL que esté asociado al flujo de mensajes en el que ha incluido esta instancia del nodo Database. El archivo ESQL que, por omisión, tiene el nombre <nombre_flujo_mensajes>.esql, contiene el ESQL para cada flujo de mensajes que lo necesita. Cada parte del código que está relacionada con un nodo específico se conoce como módulo.

    Si aún no existe ningún archivo ESQL para este flujo de mensajes, pulse el botón derecho del ratón en el nodo Database y, a continuación, pulse el botón en Abrir ESQL. De este modo, se crea y se abre un nuevo archivo ESQL en la vista del editor ESQL.

    Si el archivo ya existe, pulse en el botón Examinar, situado junto a la propiedad Sentencia. De este modo, se visualiza el diálogo Selección de módulo, que lista los módulos de nodos Database disponibles que se han definido en los archivos ESQL a los que puede acceder el flujo de mensajes (los archivos ESQL se pueden haber definido en otros proyectos dependientes). Seleccione el módulo adecuado y, a continuación, pulse el botón en Aceptar. Si no hay ningún módulo adecuado, la lista se muestra vacía.

    Si el módulo que ha especificado no existe, se crea automáticamente y el editor sitúa el archivo para su visualización. Si el archivo y el módulo ya existen, el editor sitúa el archivo y visualiza y resalta el módulo correcto.

    Si lo prefiere, puede abrir el archivo ESQL adecuado en el navegador de recursos y seleccionar el nodo en la vista Esquema.

    El esqueleto del módulo para este nodo se crea en un archivo ESQL nuevo o existente y consta del ESQL siguiente. El nombre del módulo por omisión se muestra en el ejemplo siguiente:


    CREATE DATABASE MODULE <flow_name>_Database
           CREATE FUNCTION Main() RETURNS BOOLEAN
           BEGIN
                   	 	RETURN TRUE; 
           END;
    END MODULE;

    Si crea su propio módulo ESQL, créelo exactamente como este esqueleto. Puede actualizar el nombre por omisión, pero asegúrese de que el nombre que especifica coincide con el nombre de la propiedad Sentencia del nodo correspondiente.

    Añada su propio ESQL para personalizar el nodo después de la sentencia BEGIN y antes de RETURN TRUE.

    También puede crear un archivo ESQL pulsando el botón en Archivo > Nuevo > Archivo ESQL de flujo de mensajes.

    Puede utilizar todas las sentencias ESQL, incluidas SET, WHILE, DECLARE e IF en este módulo, pero (a diferencia del nodo Compute) el nodo Database propaga el mensaje que recibe en el terminal de entrada a su terminal de salida, sin realizar modificaciones, lo que significa que, como en el caso del nodo Filter, en un nodo Database sólo existe un mensaje al que hacer referencia.

    Puesto que no puede modificar ninguna parte de los mensajes, la sentencia de asignación (la sentencia SET, no la cláusula SET de la sentencia INSERT) sólo puede asignar valores a variables temporales. Por consiguiente, el ámbito de las acciones que puede llevar a cabo con una sentencia de asignación es limitado.

    Si lo prefiere, puede abrir el archivo ESQL adecuado en el navegador de recursos y seleccionar el nodo en la vista Esquema.

  3. Seleccione el valor Transacción del menú desplegable. Los valores son:
    • Automática (el valor por omisión). El flujo de mensajes, del que forma parte el nodo Database, se confirma en caso satisfactorio. Es decir, se llevan a cabo las acciones que define en el módulo ESQL y el mensaje continúa a través del flujo de mensajes. Si el flujo de mensajes no se ejecuta correctamente, se restituye. Si elige Automática, la posibilidad de confirmar o restituir la acción del nodo Database en la base de datos depende de que las acciones se realicen de modo satisfactorio o de que se produzca una anomalía en todo el flujo de mensajes.
    • Confirmar. Si desea confirmar todas las acciones no confirmadas que se realizan en este flujo de mensajes en la base de datos conectada a este nodo, sin tener en cuenta el éxito o la anomalía del flujo de mensajes a nivel global, seleccione Confirmar. Los cambios de la base de datos se confirman aunque el flujo de mensajes en sí mismo no se haya ejecutado correctamente.
  4. Seleccione Básico en el navegador de diálogo de propiedades y establezca o deseleccione los dos recuadros de selección:
    • Si desea que los mensajes de aviso de base de datos se traten como errores y que el nodo propague el mensaje de salida al terminal de anomalías, seleccione el recuadro de selección Tratar los avisos como errores. El recuadro está, inicialmente, deseleccionado.

      Cuando selecciona el recuadro, el nodo maneja todos los códigos de retorno positivos de la base de datos como errores y genera excepciones utilizando el mismo procedimiento que para los errores negativos, o más graves.

      Si no selecciona el recuadro, el nodo trata los avisos como códigos de retorno normales y no emite ninguna excepción. El aviso emitido más importante es not found, que se puede manejar, de modo seguro, como un código de retorno normal en la mayor parte de los casos.

    • Si desea que el intermediario genere una excepción cuando se detecta un error de base de datos, seleccione el recuadro de selección *Generar excepción en error de la base de datos. El recuadro está, inicialmente, seleccionado.

      Si deselecciona el recuadro, incluya ESQL para comprobar si hay algún error de base de datos que se pueda devolver después de cada invocación de base de datos que realiza (puede utilizar SQLCODE y SQLSTATE para ello). Si se ha producido un error, debe manejarlo en el flujo de mensajes a fin de garantizar la integridad del intermediario y de la base de datos: el error se ignora si no se maneja a través de procesos propios, puesto que se ha elegido que el intermediario no invoque el manejo de errores por omisión. Por ejemplo, puede incluir la sentencia ESQL THROW para que emita una excepción en este nodo, o bien, puede utilizar el nodo Throw para que genere la excepción en un punto posterior.

  5. Seleccione Descripción en el navegador del diálogo de propiedades para especificar una descripción corta, una descripción larga, o ambas.
  6. Pulse el botón en Aplicar para realizar los cambios en el nodo Database sin cerrar el diálogo de propiedades. Pulse el botón en Aceptar para aplicar los cambios y cerrar el diálogo de propiedades.

    Pulse el botón en Cancelar para cerrar el diálogo y descartar todos los cambios que ha realizado en las propiedades.

Terminales y propiedades

Los terminales del nodo Database se describen en la tabla siguiente:

Terminal Descripción
Terminal de entrada Terminal de entrada que acepta un mensaje para que lo procese el nodo.
Terminal de anomalías Terminal de salida al que se propaga el mensaje de entrada si se detecta una anomalía durante el cálculo. Si ha seleccionado Tratar los avisos como errores, el nodo propaga el mensaje a este terminal, aunque el proceso se complete satisfactoriamente.
Terminal de salida Terminal de salida desde el que sale el mensaje después de la ejecución de la sentencia de base de datos.

En las tablas siguientes se describen las propiedades del nodo; la columna que tiene el encabezamiento M indica si se trata de una propiedad obligatoria (marcada con un asterisco en el diálogo de propiedades si se debe especificar un valor cuando no se ha definido ningún valor por omisión), la columna que tiene el encabezamiento C indica que se trata de una propiedad configurable (se puede cambiar el valor cuando se añade el flujo de mensajes al archivo bar para su difusión).

Las propiedades básicas del nodo Database se describen en la tabla siguiente:

Propiedad M C Valor por omisión Descripción
Origen de datos No   Nombre de origen de datos ODBC de la base de datos en la que residen las tablas a las que se hace referencia en el ESQL asociado a este nodo (identificado en la propiedad Sentencia).
Sentencia No Base de datos Nombre del módulo del archivo ESQL que contiene las sentencias que se deben ejecutar con respecto a la base de datos.
Transacción No Automática Modalidad de transacción para el nodo. Puede ser Automática o Confirmar.
Tratar los avisos como errores No Deseleccionada Tratar los avisos SQL de base de datos como errores. Si selecciona el recuadro de selección, se realiza esta acción.
*Generar excepción en error de la base de datos No Seleccionado Los errores de base de datos hacen que el intermediario emita una excepción. Si selecciona el recuadro de selección, se realiza esta acción.

Las propiedades de descripción del nodo Database se describen en la tabla siguiente:

Propiedad M C Valor por omisión Descripción
Descripción corta No No   Descripción breve del nodo.
Descripción larga No No   Texto que describe la finalidad del nodo en el flujo de mensajes.

Conceptos relacionados
Flujos de mensajes
Flujos de mensajes, correlaciones y ESQL

Tareas relacionadas
Configuración de DB2
Cómo decidir los nodos que utilizar
Configuración de flujos de mensajes coordinados
Manejo de errores en flujos de mensajes
Configuración de ESQL dentro de nodos
Edición de propiedades configurables

Referencia relacionada
Mandato mqsichangebroker
Mandato mqsicreatebroker
Mandato mqsisetdbparms
Nodo Compute
Nodo DataDelete
Nodo DataInsert
Nodo DataUpdate
Nodo Warehouse