IDE: For-Each scrivibili e blocco CONTINUE
copia linkDescrizione del difetto
Se si utilizzava l'istruzione continue dentro ad un ciclo for-each-row scrivibile si potevano ottenere comportamenti non corretti in alcuni casi.
Il malfunzionamento si manifestava solo in tecnologia Java ed era dovuto al fatto che l'istruzione CONTINUE, chiamata all'interno di un ciclo for-each-row scrivibile, non salvava le modifiche sul database.
Il malfunzionamento si manifestava, per esempio, nel seguente blocco di codice:
public void People.Scramble()
{
// Change even IDs to upper case, odd IDs to lower case
for each row (readwrite)
{
select
PersonID = ID
PersonName = Name
from
People // master table
//
// If it's even, change to upper case
if (PersonID % 2 == 0)
{
PersonName = upper(PersonName)
continue
}
//
// Change to lower case
PersonName = lower(PersonName)
}
}
{
// Change even IDs to upper case, odd IDs to lower case
for each row (readwrite)
{
select
PersonID = ID
PersonName = Name
from
People // master table
//
// If it's even, change to upper case
if (PersonID % 2 == 0)
{
PersonName = upper(PersonName)
continue
}
//
// Change to lower case
PersonName = lower(PersonName)
}
}
Come è possibile osservare il metodo Scramble cambia in maiuscolo il nome delle persone il cui ID è pari mentre cambia in minuscolo il nome delle persone il cui ID è dispari. A causa del malfunzionamento il blocco CONTINUE saltava al prossimo ciclo del blocco for-each ma non salvava le eventuali modifiche eseguite per quel ciclo. Pertanto, al termine del ciclo, tutte le righe con ID dispari erano effettivamente minuscole ma le righe con ID pari non erano maiuscole.
Effetti del malfunzionamento
- Se si usava un blocco CONTINUE in un ciclo for-each-row scrivibile le righe modificate in quel ciclo non venivano scritte su database.
Soluzioni
Non sono disponibili workaround per le versioni precedenti.
Funzionalità interessate
L'utilizzo di cicli for-each-row in tecnologia Java.
Note
- Malfunzionamento relativo alla richiesta di assistenza 001591-2017.
Ultima modifica: 04/04/2018 / Validità: da 18.0.7000