Este tópico descreve as referências de campos ESQL.
[<] e [>] são legítimos. Um exemplo da utilização de < e > é mostrado na figura a seguir.
Para fins de compatibilidade reversa, a palavra-chave LAST ainda é suportada, mas seu uso é desaconselhado. LAST não pode ser utilizada como parte de uma expressão de índice: [LAST] é válido e é equivalente a [<], mas [LAST3] não é válido.
Field [ > ] -- O primeiro elemento, equivalente a [ 1 ] Field [ > (a + b) * 2 ] Field [ < ] -- O último elemento, equivalente a [ LAST ] Field [ < 1 ] -- O último elemento, equivalente a [ LAST ] Field [ < 2 ] -- O último, mas único elemento Field [ < (a + b) / 3 ]
Uma referência de campo consiste em um nome de correlação, seguido de zero ou mais elementos de caminho, separados por pontos (.). O nome de correlação identifica um ponto de início bem conhecido em uma árvore de mensagem. O ponto de início deve ser, portanto, uma variável de referência declarada ou um dos pontos de início predefinidos, por exemplo, InputRoot. Os elementos de caminho definem um caminho do ponto de início para o campo desejado.
InputRoot.XML.Data.Invoiceinicia o intermediário no local InputRoot (isto é, a raiz da mensagem de entrada de um nó Compute) e, em seguida, realiza uma seqüência de navegações. Inicialmente, ele navega da raiz até o primeiro campo filho XML; em seguida, para o primeiro campo filho do campo XML Data. Finalmente, o intermediário navega até o primeiro campo filho do campo Data, Invoice. Toda vez que essa referência de campo ocorre em um programa ESQL, o campo Invoice é acessado.
InputRoot.XML."Customer Data".InvoiceSe precisar fazer referência a campos que contêm aspas, utilize dois pares de aspas em torno da referência. Por exemplo:
Body.Message."""hello"""
Alguns identificadores são reservados como palavras-chave, mas você pode utilizar aspas duplas para esses identificadores para indicar que eles não devem ser interpretados como palavras-chave. Por exemplo, SET é uma palavra-chave. Se você tiver uma mensagem que contenha um campo chamado SET ao qual deseja fazer referência, escreva Body."SET".As palavras-chave não fazem distinção entre maiúsculas e minúsculas, portanto SET, Set e todas as outras combinações são reconhecidos como palavras-chave.
O elemento Item na mensagem Invoice é um exemplo disso. Item é uma palavra-chave reservada; portanto, ao fazer referência a esse elemento, é necessário delimitá-lo com aspas duplas. Por exemplo:
InputBody.Invoice.Purchases."Item"[1].Author
InputRoot.XML."Customer Data".{'Customer-' || CurrentCustomer}.Invoiceem que as faturas (invoices) estão contidas em uma pasta com um nome formado pela concatenação do literal caractere Customer- com o valor de CurrentCustomer (que deve ser uma variável declarada de tipo caractere).
Colocar algo entre aspas duplas no ESQL torna-o um identificador; colocar algo entre aspas simples torna-o um literal caractere. Você deve colocar todas as cadeias de caracteres (CHARACTER, BLOB ou BIT) entre aspas simples.
O espaço de nomes é tomado para ser o único espaço de nomes no caminho do espaço de nomes que contém esse nome. O único espaço de nomes no caminho é o espaço de nomes notarget.
Todas essas formas existiam antes desta alteração. Embora o seu comportamento tenha alterado o sentido de que agora elas comparam tanto o nome como o espaço de nomes, as transformações existentes não devem perceber nenhuma alteração no seu comportamento, pois todas as transformações existentes criam os seus elementos no espaço de nomes notarget.
Em todos os casos anteriores, um nome, ou espaço de nomes, fornecido por uma expressão contida entre chaves ({}) é equivalente a um nome fornecido como um identificador.
Por definição, o nome do espaço de nomes notarget é a cadeia vazia. A cadeia vazia pode ser selecionada por expressões que se resolvem como a cadeia vazia, o identificador vazio "" ou por referência a uma constante de espaço de nomes definida como a cadeia vazia.
A utilização de referências de campo geralmente implica na procura por um elemento existente. Isso é verdadeiro para referências de campo que são os destinos de instruções SET e para as que estão nas cláusulas AS de instruções SELECT. Se o elemento requerido não existir, ele será criado.
Na ausência de especificação de um tipo, o tipo de elemento não é Name nem NameValue, o que indica efetivamente que o novo elemento não tem nome
.Estes padrões podem ser derivados de nomes de elementos, nomes de colunas ou podem ser simplesmente nomes de seqüência fabricados. Se o nome for o nome de um elemento, trata-se efetivamente de uma cópia de árvore e o nome do espaço de nomes será copiado como acima.
Se não, o espaço de nomes do elemento recém-criado será derivado da procura do caminho, isto é, o nome será tratado como a sintaxe NameId de uma referência de campo.
InputRoot.XML.Data[1].Invoice InputRoot.XML.Data.Invoice[1]Esta construção é a mais utilizada com uma variável de índice, portanto, se um loop percorre todos estes campos em seqüência. Por exemplo:
WHILE count < 32 DO SET TOTAL = TOTAL + InputRoot.XML.Data.Invoice[count].Amount; END WHILE;Utilize este tipo de construção com cuidado, pois ele implica em que o intermediário deve contar os campos desde o começo cada vez ao longo do loop. Se a contagem repetida for grande, o desempenho é fraco. Nesses casos, uma alternativa melhor é utilizar uma variável de referência de campo.
InputRoot.XML.Data.Invoice -- Seleciona o primeiro InputRoot.XML.Data.Invoice[1] -- Seleciona o primeiro InputRoot.XML.Data.Invoice[>] -- Seleciona o primeiro InputRoot.XML.Data.Invoice[>1] -- Seleciona o primeiro InputRoot.XML.Data.Invoice[>2] -- Seleciona o segundo InputRoot.XML.Data.Invoice[<] -- Seleciona o quarto InputRoot.XML.Data.Invoice[<1] -- Seleciona o quarto InputRoot.XML.Data.Invoice[<2] -- Seleciona o terceiro InputRoot.XML.Data.Invoice[<3] -- Seleciona o segundoUma cláusula de índice também pode consistir em um par de colchetes vazio ( [] ). Isso seleciona todos os campos com nomes correspondentes. Utilize essa construção com funções que esperam listas (por exemplo, SELECT ou CARDINALITY).
Cada elemento de uma referência de campo pode conter uma cláusula type. Elas são denotadas por parênteses ( ( ) ) e aceitam qualquer expressão que retorna um valor não-nulo de tipo inteiro. A presença de uma expressão de tipo restringe os campos que são selecionados aos do tipo correspondente. Essa construção é utilizada mais freqüentemente com o XML genérico, em que há muitos tipos de elementos e é possível que um elemento XML contenha ambos os atributos e outros elementos XML com o mesmo nome.
<Item Value = '1234' > <Value>5678</Value> </Item>Aqui, o elemento XML Item tem dois elementos filhos, ambos chamados Value". Os elementos filhos podem ser distinguidos utilizando-se as cláusulas de tipo: Item.(XML.Attribute)Value para selecionar o atributo e Item.(XML.Element)Value para selecionar o elemento.
Conceitos relacionados
ESQL
Tarefas relacionadas
Desenvolvendo ESQL
Acessando Várias Ocorrências Conhecidas de um Elemento
Avisos |
Marcas |
Downloads |
Biblioteca |
Suporte |
Feedback
![]() ![]() |
ak04861_ |