Instrução MOVE

A instrução MOVE altera o campo para o qual uma variável de referência identificada por destino aponta.

SINTAXE

Notas:
  1. A RepeatClause pode ser utilizada apenas com os qualificadores PREVIOUSSIBLING e NEXTSIBLING.

Se uma cláusula TO for incluída, ela altera a referência de destino para apontar na mesma identidade que a apontada por origem. Este pode ser um campo de mensagem ou uma variável declarada.

Se uma cláusula PARENT, PREVIOUSSIBLING, NEXTSIBLING, FIRSTCHILD ou LASTCHILD for incluída, a instrução MOVE tenta mover a variável de referência de destino na direção especificada com relação à sua posição atual. Se existir qualquer campo na direção determinada, a movimentação será bem-sucedida. Se não houver tal campo, ele falhará; ou seja, a variável de referência continuará apontando para o mesmo campo ou variável anterior e a função LASTMOVE retorna false. Você pode utilizar a função LASTMOVE para determinar o êxito ou defeito de um movimento.

Se uma cláusula TYPE, uma cláusula NAME ou ambas estiverem presentes, o destino será novamente movido na direção especificada (PREVIOUSSIBLING ou NEXTSIBLING, ou FIRSTCHILD ou LASTCHILD), exceto para um campo com o tipo, nome especificados, ou ambos. Isto é muito útil quando o nome ou tipo (ou ambos) do campo de destino for conhecido, porque isto reduz o número de instruções MOVE requeridas para navegar para um campo. Isto ocorre porque os campos que não correspondem aos critérios são ignorados e também pode incluir campos da árvore de mensagens não esperados, por exemplo, os que representam espaços em branco.

Se o movimento especificado não puder ser feito (ou seja, se não existir um campo com o tipo ou nome especificado), o destino permanecerá inalterado e a função LASTMOVE retornará false. A cláusula TYPE, a cláusula NAME ou ambas as cláusulas podem conter qualquer expressão que retorne um valor de um tipo de dados adequado (INTEGER para tipo e CHARACTER para nome). Será emitida uma exceção se o valor fornecido for NULL.

Duas cláusulas adicionais, NAMESPACE e IDENTITY, aumentam a funcionalidade da cláusula NAME.

A cláusula NAMESPACE utiliza qualquer expressão que retorna um valor não nulo de tipo character. Também utiliza um * indicando qualquer espaço de nomes. Observe que isto não pode ser confundido com uma expressão, porque * não é um operador unary no ESQL.

O significado depende da presença das cláusulas NAME e NAMESPACE, conforme a seguir:
NAMESPACE NAME Elemento Localizado por...
Não Não Tipo, índice ou ambos
Não Sim Nome no espaço de nomes padrão
* Sim Name
Sim Não Namespace
Sim Sim Nome e espaço de nomes

A cláusula IDENTITY assume um único elemento de caminho no lugar das cláusulas TYPE, NAMESPACE e NAME e segue todas as regras descritas no tópico para referências de campo (consulte Referências de Campos ESQL).

Ao utilizar MOVE com PREVIOUSSIBLING ou NEXTSIBLING, você poderá especificar as palavras-chave REPEAT, TYPE e NAME que movem o destino para o campo anterior ou para o próximo campo com o mesmo tipo e nome que o campo atual. A palavra-chave REPEAT é muito útil ao mover para um irmão de mesmo tipo, porque não é necessário gravar expressões para definir o tipo e nome.

Exemplo

MOVE cursor FIRSTCHILD TYPE 0x01000000 NAME 'Field1';

Este exemplo move a variável de referência cursor para o primeiro campo filho do campo para o qual cursor está apontando atualmente e que tem o tipo 0x01000000 e o nome Field1.

A instrução MOVE nunca cria novos campos.

Um uso comum da instrução MOVE é pular de uma instância em uma estrutura repetida para outra. Os campos dentro da estrutura podem ser acessados através de uma referência de campo relativa. Por exemplo:
WHILE LASTMOVE(sourceCursor) DO
    SET targetCursor.ItemNumber  = sourceCursor.item;
    SET targetCursor.Description = sourceCursor.name;
    SET targetCursor.Price       = sourceCursor.prc;
    SET targetCursor.Tax         = sourceCursor.prc * 0.175;
    SET targetCursor.quantity    = 1;
    CREATE NEXTSIBLING OF targetCursor AS targetCursor REPEAT;
    MOVE sourceCursor NEXTSIBLING REPEAT TYPE NAME;
END WHILE;

Para informações adicionais sobre variáveis de referência e um exemplo de como mover uma variável de referência, consulte Criando Referências de Campos Dinâmicos.

Conceitos relacionados
Visão Geral do ESQL
Tarefas relacionadas
Desenvolvendo ESQL
Criando Referências de Campos Dinâmicos
Referências relacionadas
Diagramas de Sintaxe: Tipos Disponíveis
instruções ESQL
Função LASTMOVE
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ak05090_