Funzione FOR

La funzione di campo FOR valuta un'espressione ed assegna un valore risultante TRUE, FALSE o UNKNOWN

SINTASSI

FOR consente di scrivere un'espressione che esegue un'iterazione su tutte le istanze di un campo ripetuto. Per ciascuna istanza, elabora un'espressione booleana e raccoglie i risultati.

Ad esempio:
FOR ALL Body.Invoice.Purchases."Item"[] AS I (I.Quantity <= 50)
Nota:
  1. Con il predicato quantificato, la prima cosa da notare è la presenza di [] alla fine del riferimento di campo dopo FOR ALL. Le parentesi quadre definiscono l'iterazione su tutte le istanze del campo Item.

    In alcuni casi, questa sintassi non sembra necessaria, perché è possibile ottenere tali informazioni dal contesto, ma viene utilizzata per congruenza con altri blocchi di sintassi.

  2. La clausola AS associa il nome I nel riferimento di campo con l'istanza corrente del campo ripetuto. Questo concetto è simile al concetto di classi iterator utilizzato in alcuni linguaggi object oriented, come C++. L'espressione tra parentesi è un predicato che viene valutato per ciascuna istanza del campo Item.

Se si specifica la parola chiave ALL, la funzione esegue l'iterazione su tutte le istanze del campo Item all'interno di Body.Invoice.Purchases e valuta il predicato I.Quantity <= 50. Se il predicato è:
  • TRUE (se il campo è vuoto oppure per tutte le istanze di Item) restituisce TRUE.
  • FALSE (per tutte le istanze di Item) restituisce FALSE.
  • Qualsiasi altro valore, restituisce UNKNOWN.
Le parole chiave ANY e SOME sono equivalenti. Se vengono utilizzate, la funzione esegue un'iterazione su tutte le istanze del campo Item all'interno di Body.Invoice.Purchases e valuta il predicato I.Quantity <= 50. Se il predicato è:
  • FALSE (se il campo è vuoto oppure per tutte le istanze di Item) restituisce FALSE.
  • TRUE (per tutte le istanze di Item) restituisce TRUE.
  • Qualsiasi altro valore, restituisce UNKNOWN.
Per illustrare ulteriormente questo concetto, gli esempi riportati di seguito sono basati sul messaggio descritto in Messaggio di esempio. Nella seguente espressione di filtro:
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Title = 'The XML Companion')
il predicato secondario è TRUE. Tuttavia, l'espressione successiva restituisce FALSE:
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Title = 'C Primer')
perché C Primer non è incluso in questa fattura. Se in questa istanza alcuni degli elementi nella fattura non includono un campo relativo al titolo del libro, il predicato secondario restituisce UNKNOWN ed il predicato quantificato restituisce il valore UNKNOWN.
Prestare attenzione a gestire la possibilità di valori null. Scrivere questo filtro con un controllo esplicito sull'esistenza del campo, come riportato di seguito:
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Book IS NOT NULL AND
I.Book.Title = 'C Primer')
Il predicato IS NOT NULL assicura che se il campo Item non contiene un Book, viene restituito un valore FALSE dal predicato secondario.
Concetti correlati
Panoramica di ESQL
Attività correlate
Sviluppo di ESQL
Accesso a più ricorrenze sconosciute di un elemento
Riferimenti correlati
Diagrammi di sintassi: tipi disponibili
Messaggio di esempio
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ak18490_