A instrução DECLARE define uma variável, o tipo de dados da variável e, opcionalmente, seu valor inicial.
Notas:
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:
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.
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.
DECLARE deployEnvironment EXTERNAL CHARACTER 'Dev';você definiu uma variável UDP de deployEnvironment com um valor inicial Dev.
Inclua 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.
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ó. UDPs também podem ser modificados no tempo de execução
utilizando o API do CMP (Configuration Manager Proxy).
É 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.
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.
DECLARE mycolor EXTERNAL CHARACTER 'blue';
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.
Utilize NAME para definir um alias (um nome alternativo) pelo qual uma variável pode ser conhecida.
-- 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;
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>
Utilize NAMESPACE para definir um alias (um nome alternativo) pelo qual um espaço de nomes pode ser conhecido.
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;
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.
Não é possível definir uma variável compartilhada em uma função ou um procedimento.
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.
Como 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.
É 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.
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.