A instrução DECLARE define uma variável, o tipo de dados da variável e, opcionalmente, seu valor inicial.
Consulte também a opção ATOMIC do Instrução BEGIN ... END. A construção BEGIN ATOMIC é útil quando várias alterações precisam ser feitas em uma variável compartilhada e é importante evitar que outras instâncias vejam os estados intermediários dos dados.
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 destes casos é o seguinte:
Uma constante ou variável declarada dentro de uma rotina sobrepõe todos os parâmetros, constantes e variáveis de mesmo nome declarados em um módulo ou esquema que os contém.
Utilize EXTERNAL para indicar uma UDP (User-Defined Property). Uma 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 de Fluxo de Mensagens, ou substituído, no tempo de implementação, pelo Editor Archive do Intermediário. Seu valor não pode ser modificado pelo ESQL.
Para uma visão geral de UDPs, consulte Propriedades Definidas pelo Usuário no ESQL.
Quando um UDP recebe um valor inicial na instrução DECLARE, esse torna-se seu padrão. Entretanto, qualquer valor especificado pelo editor de Fluxo de Mensagens no tempo de design ou pelo editor de BAR no tempo de implementação (mesmo uma cadeia de comprimento zero) substitui qualquer valor inicial codificado na instrução DECLARE.
Todas as UDPs em um fluxo de mensagens devem ter um valor, especificado na instrução DECLARE ou pelo editor de Fluxo de Mensagens ou de BAR; caso contrário, ocorre 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 mas não modificado.
A vantagem de UDPs é que seus valores podem ser alterados pela equipe operacional no tempo de implementação. Por exemplo, se você utilizar as UDPs para conter dados de configuração, isso significa que é possível configurar um fluxo de mensagens para uma máquina, tarefa ou ambiente específico no tempo de implementação, sem precisar alterar o código no nível do nó.
É possível declarar UDPs somente em módulos ou esquemas.
Tome cuidado ao especificar o tipo de dados de uma UDP, porque ocorre um CAST para a coerção para o DataType solicitado.
DECLARE mycolour 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 outro nome) 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.XML.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.XML.TestCase.Schema1 Domain('XML') 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 outro nome) 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.XML.{prefixOne}:{'PurchaseOrder'} = InputRoot.XML.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). Não há nenhum tipo de variável que é mais amplamente visível do que no nível do fluxo. Por exemplo, não é possível compartilhar variáveis por grupos de execução.
As variáveis compartilhadas podem ser utilizadas 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. Elas ocorrem durante a existência do processo do grupo de execução, a existência do fluxo ou nó ou a existência do SQL do nó que declara a variável (aquele que for o mais curto). 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.
Essas variáveis de leitura-gravação, com uma existência maior que aquela de uma mensagem, mas com desempenho melhor que um banco de dados, são ideais para usuários preparados para desconsiderar as vantagens de persistência e transacionais dos bancos de dados para obter um melhor desempenho.
Com variáveis compartilhadas pelo fluxo (ou seja, aquelas definidas no nível do esquema), tome cuidado quando vários fluxos puderem atualizar as variáveis, especialmente se a variável estiver sendo utilizada como um contador. Do mesmo modo, com variáveis compartilhadas pelo nó (ou seja, aquelas definidas no nível do módulo), tome cuidado quando várias instâncias puderem atualizar as variáveis.
As variáveis de linha compartilhadas permitem que um programa de usuário faça uma cópia de leitura/gravação eficiente da mensagem de um nó input. Isso geralmente é útil e, em particular, simplifica a técnica para manipular mensagens grandes.
"Há uma restrição que subárvores não podem ser diretamente copiadas de uma variável de linha compartilhada para outra variável de linha compartilhada. Subárvores podem ser copiadas indiretamente utilizando-se 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.
Para obter um exemplo da utilização de variáveis compartilhadas, consulte o programa de amostra "Roteamento de Mensagens", que mostra como utilizar variáveis compartilhadas e externas. A amostra "Roteamento de Mensagens" está no Galeria de Exemplos no Message Brokers Toolkit.