A instrução MOVE altera o campo para o qual a variável de referência Destino aponta.
Se você incluir uma cláusula TO, esta cláusula alterará a referência de destino para apontar para a mesma entidade que a apontada pela origem; isto pode ser uma 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.
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 | Nome |
Sim | Não | Espaço de nomes |
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 Visão geral da referência de campo 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.
MOVE cursor FIRSTCHILD TYPE XML.Name 'Field1';
Este exemplo move o cursor da variável de referência para o primeiro campo filho
do campo para o qual o cursor está apontando atualmente, que possui o
tipo XML.Name e o nome Field1.
Consulte Função FIELDTYPE para obter uma lista dos tipos que você
pode utilizar.
A instrução MOVE nunca cria novos campos.
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.