La sentencia INSERT inserta una fila en una tabla de base de datos.
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.
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.
Para obtener más información sobre el manejo de errores de base de datos, consulte Captura del estado de la base de datos.
El ejemplo siguiente presupone que la propiedad origen de datos del nodo Database se ha configurado, y que la base de datos que identifica tiene una tabla llamada TABLE1 con las columnas A, B y C.
<A> <B>1</B> <C>2</C> <D>3</D> </A>
INSERT INTO Database.TABLE1(A, B, C) VALUES (Body.A.B, Body.A.C, Body.A.D);
-- 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);
Insertar 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);
DECLARE propRef REFERENCE TO InputRoot.Properties; DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot.XMLNS, propRef.Encoding, propRef.CodedCharSetId); INSERT INTO Database.TABLE1(MSGDATA) VALUES (msgBitStream);
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 mensajes 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.
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)
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);
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);
Si desea ver ejemplos de cómo extraer una corriente de bits de mensaje de una base de datos, basados en los dos ejemplos anteriores, consulte Selección de datos de corriente de bits de una base de datos.