WebSphere Message Broker, Versión 8.0.0.5 Sistemas operativos: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte la información sobre la última versión del producto en IBM Integration Bus, Versión 9.0

Sentencia INSERT

La sentencia INSERT inserta una fila en una tabla de base de datos.

Sintaxis

Leer el esquema de sintaxisOmitir el esquema de sintaxis visual
>>-INSERT--INTO--ReferenciaTabla--+-------------------------+--->
                                  |    .-,-------------.    |   
                                  |    V               |    |   
                                  '-(----NombreColumna-+--)-'   

              .-,----------.      
              V            |      
>--VALUES--(---- Expresión-+--)--------------------------------><

WHERE

|--ReferenciaTabla =  --Database-------------------------------->

>--+------------------------------------------------+----------->
   '-+------------------------+--.--CláusulaEsquema-'   
     '-.--CláusulaOrigenDatos-'                         

>--.--CláusulaTabla---------------------------------------------|

|--CláusulaOrigenDatos =  --+-NombreOrigenDatos----------+------|
                            '-{--ExpresiónOrigenDatos--}-'   

|--CláusulaEsquema =  --+-NombreEsquema----------+--------------|
                        '-{--ExpresiónEsquema--}-'   

|--CláusulaTabla =  --+-NombreTabla----------+------------------|
                      '-{--ExpresiónTabla--}-'   

Se inserta una sola fila en la tabla identificada por ReferenciaTabla. La lista NombreColumna identifica las columnas en la tabla de destino a las que se han de dar valores específicos. Estos valores los determinan las expresiones dentro de la cláusula VALUES (la primera expresión proporciona el valor de la primera columna con nombre, etc.). El número de expresiones en la cláusula VALUES debe ser el mismo que el número de columnas con nombre. A las columnas que están en la tabla pero no se mencionan en la lista, se les da su valor predeterminado.

Referencia de tabla

Una referencia de tabla es un caso especial de referencias de campo que se utilizan para hacer referencia a los árboles de mensaje. Siempre empieza con la palabra "Database" y puede contener cualquiera de estos elementos:
  • Sólo un nombre de tabla
  • Un nombre de esquema y un nombre de tabla
  • Un nombre de origen de datos (es decir, el nombre de una instancia de base de datos), un nombre de esquema y un nombre de tabla
En cada caso, el nombre puede especificarse directamente o mediante una expresión encerrada entre llaves ({...}). Un nombre de origen de datos, esquema o tabla especificado directamente, puede ser sustituido. Es decir, si el nombre utilizado se ha declarado como un nombre conocido, se utiliza más bien el valor del nombre declarado en lugar del nombre mismo (consulte Sentencia DECLARE).

Si no se especifica un nombre de esquema, se utiliza el esquema predeterminado para el usuario de base de datos del intermediario.

Si no se especifica un nombre de origen de datos, se utiliza la base de datos que indica el atributo data source del nodo.

Manejo de errores

Se pueden producir errores durante las operaciones de inserción. Por ejemplo, es posible que la base de datos no esté operativa, o la tabla puede tener restricciones definidas que la nueva fila violaría. En estos casos, se genera una excepción a menos que haya borrado la propiedad de nodo Generar excepción en Error de base de datos. Estas excepciones establecen los valores adecuados para los elementos siguientes y pueden ser manejadas por los manejadores de errores (consulte la sentencia DECLARE HANDLER):
  • código SQL
  • Estado
  • Error nativo
  • Texto del error

Para obtener más información sobre el manejo de errores de base de datos, consulte Captura del estado de la base de datos.

Ejemplos

El ejemplo siguiente presupone que se ha configurado la propiedad Origen de datos del nodo Database y que la base de datos que identifica tiene una tabla denominada TABLE1 con las columnas A, B y C.

Dado un mensaje con el cuerpo XML genérico siguiente:
<A>
 <B>1</B>
 <C>2</C>
 <D>3</D>
</A>
La sentencia INSERT siguiente inserta una fila nueva en la tabla con los valores 1, 2 y 3 para las columnas A, B y C:
INSERT INTO Database.TABLE1(A, B, C) VALUES (Body.A.B, Body.A.C, Body.A.D);
El ejemplo siguiente muestra el uso de nombres calculados de origen de datos, esquema y tabla:
-- Declarar variables para que contengan los nombres de origen de datos, esquema y tabla
-- y establecer sus valores predeterminado
DECLARE Source CHARACTER 'Production';
DECLARE Schema CHARACTER 'db2admin';
DECLARE Table  CHARACTER 'DynamicTable1';

-- Aquí va el código que calcula sus valores actuales

-- Insertar los datos en la tabla
INSERT INTO Database.{Source}.{Schema}.{Table} (Name, Value) values ('Joe', 12.34);

Inserción de una corriente de bits en una base de datos

Si la columna de base de datos en la que desea insertar datos está establecida en un tipo de datos binario como BLOB, el mensaje de entrada debe representarse en forma de corriente de bits. Si el mensaje de entrada está en el dominio BLOB, utilice el código ESQL siguiente:
DECLARE msgBitStream BLOB InputRoot.BLOB.BLOB;
INSERT INTO Database.TABLE1(MSGDATA) VALUES (msgBitStream);

En cambio, si el mensaje de entrada está en un dominio XML como XMLNS, entonces el árbol de mensaje debe serializarse antes de la sentencia INSERT. Para serializar el árbol de mensaje e insertar el contenido en la base de datos, utilice el código ESQL siguiente:
DECLARE propRef REFERENCE TO InputRoot.Properties;
DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot.XMLNS, propRef.Encoding, propRef.CodedCharSetId);
INSERT INTO Database.TABLE1(MSGDATA) VALUES (msgBitStream);
Si los mensajes de entrada recibidos por el flujo de mensajes proceden de páginas de códigos diferentes, la información de CodedCharSetID y Encoding se pierde si utiliza el ejemplo anterior. Para capturar la información de CodedCharSetID y Encoding, puede ampliar la tabla con dos columnas numéricas para almacenar los datos de CodedCharSetID y Encoding. Para ampliar la tabla, modifique el ESQL del ejemplo anterior para insertar los datos de CodedCharSetID y Encoding en columnas de base de datos separadas:
DECLARE propRef REFERENCE TO InputRoot.Properties;
DECLARE inCCSID INT propRef.CodedCharSetId;
DECLARE inEncoding INT propRef.Encoding;
DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot.XMLNS, inEncoding, inCCSID);
INSERT INTO Database.TABLE1(MSGDATA, MSGENCODING, MSGCCSID) VALUES 
(msgBitStream, inEncoding, inCCSID);

Como ampliación del ejemplo anterior, si necesita que se almacene el mensaje entero junto con la cabecera MQMD y la utiliza posteriormente para reconstruir el mensaje entero en otro flujo de mensajes de una plataforma distinta utilizando una página de códigos y una codificación diferentes, la tabla de base de datos se puede ampliar para que contenga todos los campos numéricos de la cabecera MQMD.

Por ejemplo, un flujo de mensajes que se ejecuta en AIX inserta una corriente de bits de mensaje en la tabla de base de datos y otro flujo de mensajes que se ejecuta en Windows la recupera e intenta reconstruir el mensaje junto con la cabecera MQMD almacenada.

A continuación se lista el conjunto de campos numéricos de la cabecera MQMD:
    BackoutCount (MQLONG)  
    CodedCharSetId (MQLONG)
    Encoding (MQLONG)      
    Expiry (MQLONG)        
    Feedback (MQLONG)      
    MsgFlags (MQLONG)      
    MsgSeqNumber (MQLONG)  
    MsgType (MQLONG)       
    Offset (MQLONG)        
    OriginalLength (MQLONG)
    Persistence (MQLONG)   
    Priority (MQLONG)      
    PutApplType (MQLONG)   
    Report (MQLONG)        
    Version (MQLONG) 
El ejemplo siguiente utiliza CodedCharSetID, Encoding, Priority y MsgSeqNumber:
   DECLARE propRef REFERENCE TO InputRoot.Properties;
   DECLARE mqmdRef REFERENCE TO InputRoot.MQMD;
   DECLARE inCCSID INT propRef.CodedCharSetId;
   DECLARE inEncoding INT propRef.Encoding;

   DECLARE inPriority INT mqmdRef.Priority;
   DECLARE inMsgSeqNumber INT mqmdRef.MsgSeqNumber;

   DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot, inEncoding, inCCSID);

   INSERT INTO Database.TABLE1(MSGDATA, MSGENCODING, MSGCCSID, MSGPRIORITY,MSGSEQNUMBER) 
   VALUES (msgBitStream, inEncoding, inCCSID, inPriority, inMsgSeqNumber);
Si desea insertar un mensaje XML en una columna de base de datos que tiene un tipo de datos CHAR o VARCHAR, el ESQL debe modificarse para convertir el mensaje de entrada al tipo de datos CHAR antes de la sentencia INSERT. En el ejemplo siguiente se utiliza una transformación CAST para transformar el mensaje serializado al tipo de datos CHAR. Los datos de CodedCharSetID y Encoding se insertan en columnas de base de datos separadas.
DECLARE propRef REFERENCE TO InputRoot.Properties;
DECLARE inCCSID INT propRef.CodedCharSetId;
DECLARE inEncoding INT propRef.Encoding;
DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot.XMLNS, inEncoding, inCCSID);
DECLARE msgChar CHAR CAST(msgBitStream AS CHAR CCSID inCCSID);
INSERT INTO Database.TABLE1(MSGDATA, MSGENCODING, MSGCCSID) VALUES (msgChar, inEncoding, inCCSID);

Para ver ejemplos de cómo extraer una corriente de bits de mensaje de una base de datos, basándose en los dos ejemplos anteriores, consulte Selección de datos de corriente de bits de una base de datos.

Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Comentarios

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Última actualización:
        
        Última actualización: 2015-02-28 16:59:54


Tema de referenciaTema de referencia | Versión 8.0.0.5 | ak05050_