La sentencia MOVE cambia el campo al que apunta una variable de referencia identificada por el destino.
Si incluye una cláusula TO, cambia la referencia del destino de modo que apunte a la misma entidad a la que apunta el origen. Esta puede ser un campo de mensaje o una variable declarada.
Si incluye una cláusula PARENT, PREVIOUSSIBLING, NEXTSIBLING, FIRSTCHILD o LASTCHILD, la sentencia MOVE intenta mover la variable de referencia de destino en la dirección especificada relativa a su posición actual. Si existe cualquier campo en la dirección proporcionada, MOVE se ejecuta correctamente. Si no existe un campo de este tipo, MOVE no se ejecuta correctamente. Esto es, la variable continúa apuntando al mismo campo o variable que antes y la función LASTMOVE devuelve FALSE. Puede utilizar la función LASTMOVE para determinar si MOVE se ha ejecutado correctamente o no.
Si existe una cláusula TYPE, una cláusula NAME o si las dos están presentes, se vuelve a mover el destino en la dirección especificada (PREVIOUSSIBLING, NEXTSIBLING, FIRSTCHILD o LASTCHILD) pero a un campo con el tipo o nombre proporcionados. Esto resulta especialmente útil cuando se conocen el nombre o el tipo (o ambos) del campo de destino) debido a que esto disminuye el número de sentencias MOVE necesarias para navegar hasta un campo. Esto es debido a que se ignoran los campos que no coinciden con el criterio, entre los que también se incluyen los campos de árbol de mensaje, por ejemplo, los que representan espacios en blanco.
Si no se puede ejecutar la acción MOVE especificada (esto es, no existe un campo con el tipo o nombre proporcionados), el destino no se modifica y la función LASTMOVE devuelve FALSE. La cláusula TYPE, la cláusula NAME o ambas cláusulas pueden contener cualquier expresión que devuelva un valor de un tipo de datos adecuado (INTEGER para tipo y CHARACTER para nombre). Se genera una excepción si el valor proporcionado es NULL.
Dos cláusulas adicionales, NAMESPACE e IDENTITY mejoran las funciones de la cláusula NAME.
La cláusula NAMESPACE toma cualquier expresión que devuelve un valor no nulo de tipo carácter. También acepta un asterisco, *, para indicar cualquier espacio de nombres. Tenga en cuenta que esto puede confundirse con una expresión, debido a que * no es un operador unario en ESQL.
NAMESPACE | NAME | Elemento localizado mediante... |
---|---|---|
No | No | Tipo, índice o ambos |
No | Sí | Nombre en el espacio de nombres por omisión |
* | Sí | Nombre |
Sí | No | Espacio de nombres |
Sí | Sí | Nombre y espacio de nombres |
La cláusula IDENTITY toma un elemento de vía de acceso individual en lugar de las cláusulas TYPE, NAMESPACE, y NAME, y sigue todas las normas descritas en el tema sobre referencias de campo (consulte Referencias de campo ESQL).
Cuando se utiliza MOVE con PREVIOUSSIBLING o NEXTSIBLING, puede especificar las palabras clave REPEAT, TYPE y NAME que mueven el destino al campo anterior o siguiente con el mismo tipo y nombre que el campo actual. La palabra clave REPEAT es especialmente útil al trasladarse a un elemento hermano del mismo tipo, ya que no es necesario que escriba expresiones que definan el tipo y el nombre.
MOVE cursor FIRSTCHILD TYPE 0x01000000 NAME 'Field1';
Este ejemplo mueve el cursor de variable de referencia al primer campo hijo del campo al que apunta actualmente el cursor y tiene el tipo 0x01000000 y el nombre Field1.
La sentencia MOVE nunca crea nuevos 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 obtener más información acerca de las variables de referencia y un ejemplo de cómo mover una variable de referencia, consulte Creación de referencias de campo dinámicas.