Istruzione MOVE

L'istruzione MOVE modifica il campo a cui punta una variabile di riferimento identificata dalla destinazione.

SINTASSI

Note:
  1. La clausola RepeatClause può essere utilizzata solo con i qualificatori PREVIOUSSIBLING e NEXTSIBLING.

Se si include una clausola TO, il riferimento della destinazione punta alla stessa entità puntata dall'origine. Questa può essere un campo di messaggi oppure una variabile dichiarata.

Se si include una clausola PARENT, PREVIOUSSIBLING, NEXTSIBLING, FIRSTCHILD o LASTCHILD, l'istruzione MOVE prova a spostare la variabile di riferimento della destinazione nella direzione specificata in relazione alla propria posizione corrente. Se esistono campi nella direzione indicata, lo spostamento viene eseguito correttamente. Se non esistono campi, lo spostamento ha esito negativo; la variabile di riferimento continua a puntare allo stesso campo o alla stessa variabile e la funzione LASTMOVE restituisce false. E' possibile utilizzare la funzione LASTMOVE per determinare l'esito positivo o negativo di uno spostamento.

Se sono presenti una clausola TYPE, una clausola NAME o entrambe, la destinazione viene spostata nuovamente nella direzione specificata (PREVIOUSSIBLING, NEXTSIBLING, FIRSTCHILD o LASTCHILD) ma in un campo con il tipo o il nome indicato o con entrambi. Ciò è particolarmente utile quando sono conosciuti il nome o il tipo (o entrambi) del campo di destinazione, perché ciò riduce il numero di istruzioni MOVE necessarie per passare ad un campo. Ciò perché i campi che non corrispondono ai criteri vengono ignorati; tali campi possono includere anche campi della struttura ad albero del messaggio non previsti, come, ad esempio, quelli che rappresentano spazi vuoti.

Se non è possibile eseguire lo spostamento indicato (non esiste un campo con il tipo o il nome fornito), la destinazione non viene modificata e la funzione LASTMOVE restituisce false. La clausola TYPE, la clausola NAME o entrambe possono contenere qualsiasi espressione che restituisce un valore del tipo di dati adatto (INTEGER per il tipo e CHARACTER per il nome). Viene generata un'eccezione se il valore fornito è NULL.

Due ulteriori clausole, NAMESPACE ed IDENTITY, potenziano la funzionalità della clausola NAME.

La clausola NAMESPACE utilizza qualsiasi espressione che restituisce un valore non null di tipo character. Inoltre, utilizza un asterisco (*) che indica qualsiasi spazio dei nomi. Notare che questa non può essere confusa con un'espressione perché * non è un operatore unario in ESQL.

Il significato dipende dalla presenza delle clausole NAME e NAMESPACE, come riportato di seguito:
NAMESPACE NAME Elemento individuato da...
No No Tipo, indice o entrambi
No Nome nello spazio dei nomi predefinito
* Nome
No Spazio dei nomi
Nome e spazio dei nomi

La clausola IDENTITY utilizza un elemento del percorso singolo al posto delle clausole TYPE, NAMESPACE e NAME e segue tutte le regole descritte nell'argomento relativo ai riferimenti di campo (consultare Riferimenti di campo ESQL).

Quando si utilizza MOVE con PREVIOUSSIBLING o NEXTSIBLING, è possibile specificare le parole chiave REPEAT, TYPE e NAME che spostano la destinazione sul campo precedente o successivo con lo stesso tipo e nome del campo corrente. La parola chiave REPEAT è particolarmente utile quando si esegue lo spostamento su un sibling dello stesso tipo, perché non è necessario scrivere espressioni per definire il tipo ed il nome.

Esempio

MOVE cursor FIRSTCHILD TYPE 0x01000000 NAME 'Field1';

Questo esempio sposta il cursore della variabile di riferimento sul primo campo child del campo a cui il cursore punta attualmente e che ha tipo 0x01000000 e nome Field1.

L'istruzione MOVE non crea mai nuovi campi.

Un utilizzo comune dell'istruzione MOVE è quello di passare da un'istanza di una struttura ripetuta all'istanza successiva. E' possibile accedere ai campi all'interno della struttura utilizzando un riferimento di campo relativo. Ad esempio:
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;

Per ulteriori informazioni relative alle variabili di riferimento e per un esempio di spostamento di una variabile di riferimento, consultare Creazione di riferimenti di campo dinamici.

Concetti correlati
Panoramica di ESQL
Attività correlate
Sviluppo di ESQL
Creazione di riferimenti di campo dinamici
Riferimenti correlati
Diagrammi di sintassi: tipi disponibili
Istruzioni ESQL
Funzione LASTMOVE
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ak05090_