Visita il nuovo sito https://www.markonetools.it/move-e-campi-varchar/
Quando si muove un campo carattere a lunghezza variabile, il campo di lavoro viene creato esattamente come un campo a lunghezza fissa, dove la lunghezza fissa assunta è la lunghezza corrente in base al contenuto del campo variabile.
Una operazione MOVEL non cambia la lunghezza del campo varchar del risultato.
Per esempio:
DName++++++++++ETDsFrom+++To/L+++IDc.Functions+++++++++++++++++++
*
* Example of MOVEL from fixed to variable length
* for character fields
*
D var5 S 5A INZ('ABCDE') VARYING
D var10 S 10A INZ('0123456789') VARYING
D var15a S 15A INZ('FGHIJKLMNOPQR') VARYING
D var15b S 15A INZ('WXYZ') VARYING
D fix10 S 10A INZ('PQRSTUVWXY')
*
*
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiL
*
C MOVEL fix10 var5
* var5 = 'PQRST' (length=5)
C MOVEL fix10 var10
* var10 = 'PQRSTUVWXY' (length=10)
C MOVEL fix10 var15a
* var15a = 'PQRSTUVWXYPQR' (length=13)
C MOVEL fix10 var15b
* var15b = 'PQRS' (length=4)
Quindi significa che la movel non allunga o accorcia la lunghezza del contenuto a campo carattere a lunghezza variabile. Quindi se il campo varchar è pieno con 5 caratteri e ci muovo un campo con 10 caratteri, in realtà verranno spostati solo i primi 5. Idem al contrario se il campo varchar è pieno con 10 caratteri e ci faccio la movel di un campo da 6 caratteri, i restanti 4 rimarranno scritti con il valore precedente.
Si deduce che se il campo varchar è vuoto (quindi ha lunghezza 0) in pratica con la movel non riesco a scriverci.
Con codice operativo eval o in rpg free con operatore di assegnazione = non ci sono queste limitazioni.