Instrução DECLARE

A instrução DECLARE define uma variável, o tipo de dados da variável e, opcionalmente, seu valor inicial.

Início da mudançaOs três tipos de variáveis que podem ser definidas com a instrução DECLARE são:
  • Externo
  • Normal
  • Compartilhado
Veja informações adicionais na publicação Variáveis ESQL.Fim da mudança

SINTAXE

Notas:

  1. A palavra-chave SHARED não é válida em uma função ou procedimento.
  2. Não é possível especificar SHARED com um DataType de REFERENCE TO. Para armazenar uma árvore de mensagens em uma variável compartilhada, utilize o tipo de dados ROW.
  3. As variáveis EXTERNAL são implicitamente constantes.
  4. É uma boa prática de programação fornecer a uma variável EXTERNAL um valor inicial.
  5. Se você especificar um DataType de REFERENCE TO, deverá especificar um valor inicial (uma variável ou uma árvore) em InitialValueExpression.
  6. Quando as cláusulas NAMESPACE e NAME são utilizadas, seus valores são implicitamente constantes e do tipo CHARACTER.

CONSTANT

Utilize CONSTANT para definir uma constante. Você pode declarar constantes dentro de esquemas, módulos, rotinas ou instruções compostas (tanto implícitas como explícitas). O comportamento desses casos é mostrado na seguinte lista:

  • Dentro de uma instrução composta, as constantes e as variáveis ocupam o mesmo espaço de nomes.
  • Em expressões, uma constante ou variável declarada em uma instrução composta sobrepõe todas as constantes e variáveis com o mesmo nome que está declarado em instruções compostas, módulos e esquemas de contenção.
  • Em campos de espaço de nomes de referência de campo, uma constante de espaço de nomes declarada em uma instrução composta sobrepõe todos as constantes de espaço de nomes com o mesmo nome que está declarado em instruções compostas de contenção.

Uma constante ou variável declarada em uma rotina sobrepõe qualquer parâmetro com o mesmo nome e todas as constantes e variáveis com o mesmo nome que são declaradas em um módulo ou esquema de contenção.

DataType

Os valores possíveis que você pode especificar para DataType são:
  • BOOL
  • BOOLEAN
  • INT
  • INTEGER
  • FLOAT
  • DEC
  • DECIMAL
  • DATE
  • TIME
  • TIMESTAMP
  • GMTTIME
  • GMTTIMESTAMP
  • INTERVAL. Este valor não se aplica a variáveis externas (palavra-chave EXTERNAL especificada).
  • CHAR
  • CHARACTER
  • BLOB
  • BIT
  • ROW. Este valor não se aplica a variáveis externas (palavra-chave EXTERNAL especificada).
  • REF. Este valor não se aplica a variáveis externas ou compartilhadas (palavra-chave EXTERNAL ou SHARED especificada).
  • REFERENCE TO. Este valor não se aplica a variáveis externas ou compartilhadas (palavra-chave EXTERNAL ou SHARED especificada).

EXTERNAL

Utilize EXTERNAL para indicar uma UDP (User-Defined Property). Um UDP é uma constante definida pelo usuário cujo valor inicial (opcionalmente configurado pela instrução DECLARE) pode ser modificado, no tempo de design, pelo editor do Fluxo de Mensagens( consulte Editor de Fluxo de Mensagens) ou substituído no tempo da implementação, pelo editor Broker Archive (consulte Editor Archive do Intermediário). O valor de um UDP não pode ser modificado pelo ESQL.

Quando um UDP recebe um valor inicial na instrução DECLARE, esse torna-se seu padrão. No entanto, qualquer valor especificado no editor de Fluxo de Mensagens no tempo de design, ou no editor de Broker Archive no tempo de implementação (mesmo uma cadeia de comprimento zero) substitui qualquer valor inicial que foi codificado na instrução DECLARE.

Início da mudançaPor exemplo, se você codificar:
       DECLARE deployEnvironment EXTERNAL CHARACTER 'Dev';
você definiu uma variável UDP de deployEnvironment com um valor inicial Dev.Fim da mudança

Início da mudançaInclua a UDP ao fluxo de mensagens utilizando a guia UDP no editor de fluxo de mensagens. Ao incluir o fluxo ao arquivo BAR, o UDP está lá como um atributo do fluxo; você deve nomear o atributo para ser o mesmo que a variável ESQL na instrução DECLARE (neste caso deployEnvironment) para assegurar que o valor inicial que você definiu não é alterado.Fim da mudança

Todas as UDPs em um fluxo de mensagens devem ter um valor, especificado na instrução DECLARE ou pelo editor do Fluxo de Mensagens ou de Broker Archive; caso contrário, ocorrerá um erro de tempo de implementação. No tempo de execução, depois que a UDP tiver sido declarada, seu valor pode ser consultado por instruções ESQL subseqüentes.

A vantagem de UDPs é que seus valores podem ser alterados no tempo de implementação. Se, por exemplo, você utilizar as UDPs para contêr dados de configuração, significa que você pode configurar um fluxo de mensagens para um computador, tarefa ou ambiente específicos no tempo de implementação, sem ter que alterar o código no nível do nó. Início da mudançaUDPs também podem ser modificados no tempo de execução utilizando o API do CMP (Configuration Manager Proxy).Fim da mudança

É possível declarar UDPs somente em módulos ou esquemas, isso significa que você pode utilizar a instrução DECLARE com a palavra-chave EXTERNAL apenas no nível MODULE ou SCHEMA. Se você utilizar uma instrução DECLARE com a palavra-chave EXTERNAL dentro de um PROCEDURE ou FUNCTION, uma exceção BIP2402E ocorrerá ao implementar o fluxo de mensagens.

Os seguintes tipos de nó do intermediário são capazes de acessar UDPs:
  • Compute
  • Banco de Dados
  • Filter
  • Nós derivados desses tipos de nó

Tome cuidado ao especificar o tipo de dados de uma UDP, porque um CAST é utilizado para alterar o valor para o DataType solicitado.

Para uma visão geral de UDPs, consulte Propriedades Definidas pelo Usuário no ESQL.

Exemplo 1

DECLARE mycolor EXTERNAL CHARACTER 'blue'; 

Exemplo 2

DECLARE TODAYSCOLOR EXTERNAL CHARACTER;
SET COLOR = TODAYSCOLOR;
em que TODAYSCOLOR é uma propriedade definida pelo usuário que tenha um TYPE de CHARACTER e um VALUE configurado pelo Editor de Fluxo de Mensagens.

NAME

Utilize NAME para definir um alias (um nome alternativo) pelo qual uma variável pode ser conhecida.

Exemplo 1

-- A instrução a seguir fornece um alias 'Joe' para o Schema1.
DECLARE Schema1 NAME 'Joe';
-- A instrução a seguir produz um campo chamado 'Joe'.
SET OutputRoot.XMLNS.Data.Schema1 = 42; 
 
-- A instrução a seguir insere um valor em uma tabela chamada Table1
-- no esquema chamado 'Joe'.
INSERT INTO Database.Schema1.Table1 (Answer) VALUES 42; 

Exemplo 2

DECLARE Schema1 EXTERNAL NAME;

CREATE FIRSTCHILD OF OutputRoot.XMLNS.TestCase.Schema1 Domain('XMLNS') 
                     NAME 'Node1' VALUE '1';

-- Se Schema1 tivesse recebido o valor 'red', o resultado seria:
<xml version="1.0"?>
<TestCase>
  <red>
    <Node1>1</Node1>
  </red>

NAMESPACE

Utilize NAMESPACE para definir um alias (um nome alternativo) pelo qual um espaço de nomes pode ser conhecido.

Exemplo

Este exemplo ilustra a declaração de espaços de nomes, seu uso como um SpaceId em um caminho, e seu uso como constante de caracteres em uma expressão:

       DECLARE prefixOne
NAMESPACE 'http://www.example.com/PO1';

       -- No lado direito da designação, uma constante de espaço de nomes
       -- está sendo utilizada como tal, enquanto que do lado esquerdo, uma está 
       -- sendo utilizada como uma constante ordinária (ou seja, em uma expressão).

       SET OutputRoot.XMLNS.{prefixOne}:{'PurchaseOrder'} = 
                      InputRoot.XMLNS.prefixOne:PurchaseOrder;

SHARED

Utilize SHARED para definir uma variável compartilhada. As variáveis compartilhadas são privadas no fluxo (se declaradas em um esquema) ou nó (se declaradas em um módulo), mas são compartilhadas entre as instâncias do fluxo (encadeamentos). Nenhum tipo de variável é visível além do nível do fluxo; por exemplo, não é possível compartilhar variáveis através de grupos de execução.

É possível utilizar variáveis compartilhadas para implementar um cache em memória no fluxo de mensagens; consulte Otimizando Tempos de Resposta do Fluxo de Mensagens. As variáveis compartilhadas têm uma existência longa e são visíveis para várias mensagens transmitidas por um fluxo; consulte Variáveis de Existência Longa.

As variáveis compartilhadas existem pelo tempo de vida do:
  • Processo do grupo de execução
  • Fluxo ou nó, ou
  • SQL do nó declara a variável
(a que for mais curta). Elas são inicializadas quando a primeira mensagem é transmitida pelo fluxo ou nó, após a inicialização de cada intermediário.

Não é possível definir uma variável compartilhada em uma função ou um procedimento.

As vantagens de variáveis compartilhadas, em relação a bancos de dados, são:
  • O acesso de gravação é muito mais rápido.
  • O acesso de leitura a pequenas estruturas de dados é mais rápido.
  • O acesso é direto; ou seja, não é preciso utilizar uma função especial (SELECT) para obter dados ou instruções especiais (INSERT, UPDATE, ou DELETE) para modificar dados. Você pode referir-se aos dados diretamente em expressões.
As vantagens dos bancos de dados, em relação a variáveis compartilhadas, são:
  • Os dados são persistentes.
  • Os dados são alterados de modo transacional.

Essas variáveis de leitura-gravação são ideais para usuários preparados para desconsiderar as vantagens de persistência e transacionais dos bancos de dados a fim de obter um melhor desempenho, pois elas possuem uma existência maior que apenas uma mensagem e desempenham melhor que um banco de dados.

Início da mudançaComo as variáveis compartilhadas podem ser atualizadas por várias instâncias adicionais, é preciso certificar-se de que você não alterará as variáveis compartilhadas que possam causar resultados inesperados, por exemplo, se a variável estiver sendo utilizada como um contador.Fim da mudança

É possível evitar que outras instâncias vejam os estágios intermediários dos dados utilizando uma construção BEGIN ATOMIC; consulte Instrução BEGIN ... END.

Seu programa do usuário pode fazer uma leitura, gravação ou cópia eficiente de uma mensagem do nó de entrada, utilizando variáveis de linha compartilhadas, que simplifica a técnica para manipular mensagens grandes.

Restrição:

As subárvores não podem ser copiadas diretamente de uma variável de linha compartilhada para outra variável de linha compartilhada. As subárvores podem ser copiadas indiretamente utilizado uma variável de linha não compartilhada. Os valores escalares extraídos de uma variável de linha compartilhada (utilizando a função FIELDVALUE) podem ser copiados para outra variável de linha compartilhada.

A amostra a seguir demonstra como utilizar variáveis compartilhadas e externas: Você pode visualizar amostras apenas quando utilizar o centro de informações integrado ao Message Brokers Toolkit.
Conceitos relacionados
Visão Geral do ESQL
Propriedades Definidas pelo Usuário no ESQL
Variáveis de Existência Longa
Tarefas relacionadas
Desenvolvendo ESQL
Criando Referências de Campos Dinâmicos
Configurando um fluxo de mensagens no momento da implementação com propriedades definidas pelo usuário
Otimizando Tempos de Resposta do Fluxo de Mensagens
Referências relacionadas
Diagramas de Sintaxe: Tipos Disponíveis
instruções ESQL
Variáveis ESQL
Tipos de Dados ESQL nos Fluxos de Mensagens
Editor de Fluxo de Mensagens
Função FIELDVALUE
Editor Archive do Intermediário
Instrução BEGIN ... END
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Última atualização : 2009-02-13 16:12:43

ak04980_