WebSphere Message Broker, Versão 8.0.0.5 Sistemas operacionais: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte as informações sobre a versão mais recente do produto em IBM Integration Bus, Versão 9.0

Instrução INSERT

A instrução INSERT insere uma linha em uma tabela de banco de dados.

Sintaxe

Ler diagrama de sintaxeManter visual do diagrama de sintaxe
>>-INSERT--INTO--TableReference--+----------------------+------->
                                 |    .-,----------.    |   
                                 |    V            |    |   
                                 '-(----ColumnName-+--)-'   

              .-,----------.      
              V            |      
>--VALUES--(----Expression-+--)--------------------------------><

WHERE

|--TableReference =  --Database--------------------------------->

>--+------------------------------------------+----------------->
   '-+---------------------+--.--SchemaClause-'   
     '-.--DataSourceClause-'                      

>--.--TableClause-----------------------------------------------|

|--DataSourceClause =  --+-DataSourceName-------------+---------|
                         '-{--DataSourceExpression--}-'   

|--SchemaClause =  --+-SchemaName-------------+-----------------|
                     '-{--SchemaExpression--}-'   

|--TableClause =  --+-TableName-------------+-------------------|
                    '-{--TableExpression--}-'   

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.

Referência de Tabela

Uma referência de tabela é um caso especial das referências de campos utilizadas para referir-se às árvores de mensagens. Ela sempre inicia com a palavra "Database" e pode conter qualquer um dos elementos a seguir:
  • Apenas um nome de tabela.
  • Um nome de esquema e um nome de tabela.
  • Um nome de origem de dados (ou seja, o nome de uma instância de banco de dados), um nome de esquema e um nome de tabela.
Em cada caso, o nome pode ser especificado diretamente ou por uma expressão colocada entre chaves ({...}). Um nome de origem de dados, esquema ou tabela especificado diretamente está sujeito à substituição de nome. Ou seja, se o nome utilizado tiver sido declarado como um nome conhecido, o valor do nome declarado será utilizado no lugar do próprio nome (consulte Instrução DECLARE).

Se um nome de esquema não for especificado, será utilizado o esquema padrão para o usuário do banco de dados do broker.

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ó.

Tratamento de erros

Podem Ocorrer Erros durante as Operações de Inserção. Por exemplo, o banco de dados pode não estar operacional ou a tabela pode ter restrições definidas que a nova linha violaria. Nesses casos, é emitida uma exceção, a menos que você tenha limpado a propriedade do nó Emitir Exceção no Erro do Banco de dados. Essas exceções configuram valores adequados para os seguintes itens e podem ser tratadas pelos manipuladores de erros (consulte a instrução DECLARE HANDLER):
  • código SQL
  • Estado
  • Erro nativo
  • Texto de erro

Para obter informações adicionais sobre como manipular erros do banco de dados, consulte Capturando o Estado do Banco de Dados.

Exemplos

O exemplo seguinte assume que a propriedade Origem de Dados do nóBanco de Dados tenha sido configurada e que o banco de dados que ela identifica tenha uma tabela chamada TABLE1 com colunas A, B e C.

Em uma determinada mensagem com o seguinte corpo XML genérico:
<A>
 <B>1</B>
 <C>2</C>
 <D>3</D>
</A>
A instrução INSERT a seguir insere uma nova linha na tabela com os valores 1, 2 e 3 para as colunas A, B e C:
INSERT INTO Database.TABLE1(A, B, C) VALUES (Body.A.B,
Body.A.C, Body.A.D);
O próximo exemplo mostra a utilização de nomes de origem de dados, esquema e tabela:
-- 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);

Como alternativa, se a mensagem de entrada estiver em um domínio XML, tal como XMLNS, a árvore de mensagens deverá ser serializada antes da instrução INSERT. Para serializar a árvore de mensagens e inserir o conteúdo no banco de dados, utilize o seguinte código ESQL:
DECLARE propRef REFERENCE TO InputRoot.Properties;
DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot.XMLNS, propRef.Encoding, propRef.CodedCharSetId);
INSERT INTO Database.TABLE1(MSGDATA) VALUES (msgBitStream);
Se as mensagens de entrada recebidas por seu fluxo de mensagens vierem de páginas de códigos diferentes, as informações CodedCharSetID e Encoding serão perdidas se você utilizar o exemplo anterior. Para capturar as informações CodedCharSetID e Encoding, a tabela pode ser estendida com duas colunas numéricas para armazenar os dados CodedCharSetID e Encoding. Para estender a tabela, modifique o ESQL do exemplo anterior para inserir os dados CodedCharSetID e Encoding em colunas separadas do banco de dados:
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 do exemplo anterior, se você precisar que uma mensagem inteira seja armazenada juntamente com seu cabeçalho MQMD e usá-la posteriormente para reconstruir a mensagem inteira em outro fluxo de mensagens em uma plataforma diferente usando uma página de código e codificação diferentes, a tabela de banco de dados pode 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 o recupera e tenta reconstruir a mensagem junto com o cabeçalho MQMD armazenado.

O seguinte conjunto de campos numéricos estão contidos no cabeçalho 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) 
O exemplo a seguir usa CodedCharSetID, Codificação, Prioridade e 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);
Se você desejar inserir uma mensagem XML em uma coluna de banco de dados que tenha um tipo de dados CHAR ou VARCHAR, o ESQL deverá ser modificado para converter a mensagem de entrada para o tipo de dados CHAR antes da instrução INSERT. No exemplo a seguir, um CAST é usado para transformar a mensagem serializada para o tipo de dados CHAR. Os dados CodedCharSetID e Encoding são inseridos em colunas de banco de dados 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 obter exemplos sobre 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.

Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback

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

        
        Última atualização:
        
        Última atualização: 2015-02-28 18:29:54


Tópico de ReferênciaTópico de Referência | Versão 8.0.0.5 | ak05050_