A instrução INSERT insere uma linha em uma tabela de banco de dados.
Uma única linha é inserida na tabela identificada por TableReference. A lista ColumnName identifica as colunas na tabela de destino que devem receber valores específicos. Esses valores são determinados pelas expressões na cláusula VALUES (a primeira expressão fornece o valor da primeira coluna nomeada e assim por diante). O número de expressões na cláusula VALUES deve ser igual ao número de colunas nomeadas. Quaisquer colunas presentes na tabela, mas não mencionadas na lista, recebem valores padrão.
Se um nome de esquema não for especificado, será utilizado o esquema padrão para o usuário do banco de dados do intermediário.
Se um nome de origem de dados não for especificado, será utilizado o banco de dados apontado pelo atributo origem de dados do nó.
Para obter informações adicionais sobre como manipular erros do banco de dados, consulte Capturando o Estado do Banco de Dados.
O exemplo a seguir supõe que a propriedade data source (origem de dados) do nó Database foi configurada e o banco de dados identificado por ela possui uma tabela chamada TABLE1 com colunas A, B e 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 variáveis para conter os nomes de origem de dados, esquema e tabela -- e configurar seus valores padrão DECLARE Source CHARACTER 'Production'; DECLARE Schema CHARACTER 'db2admin'; DECLARE Table CHARACTER 'DynamicTable1'; -- O código que calcula seus valores reais fica aqui -- Inserir os dados na tabela INSERT INTO Database.{Source}.{Schema}.{Table} (Name, Value) values ('Joe', 12.34);
Inserindo um Fluxo de Bits em um Banco de Dados
Se a coluna de banco de dados na qual você deseja inserir dados estiver configurada para um tipo de dados binários, tal como BLOB, a mensagem de entrada deverá ser representada em um formato de fluxo de bits. Se a mensagem de entrada estiver no domínio BLOB, utilize o seguinte código ESQL: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 uma extensão
para o exemplo acima, se for necessário que toda a mensagem seja armazenada junto
com seu cabeçalho MQMD e seja utilizada posteriormente para reconstruir toda a mensagem
em outro fluxo de mensagens em uma plataforma diferente utilizando uma página de códigos e
codificação diferentes, a tabela de banco de dados poderá ser estendida para conter todos os
campos numéricos do cabeçalho MQMD.
Por exemplo, um fluxo de mensagens em execução
no AIX insere um fluxo de bits da mensagem na
tabela de banco de dados e outro fluxo de mensagens em execução no Windows
recupera-o e tenta reconstruir a mensagem junto com o cabeçalho MQMD armazenado.
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);
Para obter exemplos de como extrair um fluxo de bits de mensagem de um banco de dados, com base nos dois exemplos anteriores, consulte Selecionando Dados de Fluxo de Dados de um Banco de Dados.