Istruzione SET

L'istruzione SET assegna un valore ad una variabile.

SINTASSI

Introduzione

TargetFieldReference identifica la destinazione dell'assegnazione. La destinazione può essere:
  • Una variabile scalare dichiarata
  • Una variabile row dichiarata
  • Una delle variabili row predefinite (ad esempio, InputRoot)
  • Un campo all'interno di qualsiasi tipo di variabile row (ad esempio, una riga concettuale o di struttura ad albero secondaria)
  • Un elenco di campi all'interno di qualsiasi tipo di variabile row (ad esempio, un elenco concettuale)
  • Una variabile di riferimento dichiarata che punta ad uno degli elementi sopra indicati
La destinazione non può essere alcun tipo di entità del database.

SourceExpression è un'espressione che fornisce il valore da assegnare. Può essere qualsiasi tipo di espressione e può restituire un valore scalare, row o list.

Assegnazione alle variabili scalari

Se la destinazione è una variabile scalare dichiarata, SourceExpression viene valutata ed assegnata alla variabile. Se necessario, il relativo valore viene convertito nel tipo di dati della variabile. Se tale conversione non è possibile, viene rilevato un errore al momento della distribuzione o viene generata un'eccezione al runtime.

I valori null sono gestiti allo stesso modo di qualsiasi altro valore. Se il valore dell'espressione è null, alla variabile viene assegnato il valore "null".

Per le variabili scalari, le clausole TYPE, NAME, NAMESPACE e VALUE non hanno significato e non sono consentite.

Assegnazione a righe, elenchi e campi

Se la destinazione è una variabile row dichiarata, una delle variabili row predefinite, un campo all'interno di qualsiasi tipo di variabile row, un elenco di campi all'interno di qualsiasi tipo di variabile row oppure una variabile di riferimento dichiarata che punta ad uno di tali elementi, l'ultima destinazione è un campo. In tali casi, viene eseguita la navigazione al campo di destinazione (creando i campi, se necessario).

Se vengono utilizzati gli indici di array in TargetFieldReference, la navigazione al campo di destinazione può creare campi solo sul percorso diretto dalla root al campo di destinazione. Ad esempio, l'istruzione SET riportata di seguito richiede l'esistenza nel messaggio di almeno una istanza di Structure:

SET OutputRoot.XML.Message.Structure[2].Field = ... 
IL valore del campo di destinazione viene impostato in base ad una serie di regole, basate su:
  1. La presenza o l'assenza delle clausole TYPE, NAME, NAMESPACE o VALUE
  2. Il tipo di dati restituito dall'espressione di origine
  1. Se non è presente una clausola TYPE, NAME, NAMESPACE o VALUE (caso più comune), il risultato dipende dal fatto che SourceExpression viene valutata scalare, row o list:
    • Se SourceExpression viene valutata uno scalare, il valore del capo di destinazione viene impostato sul valore restituito da SourceExpression, ad eccezione del fatto che, se il risultato è null, il campo di destinazione viene eliminato. Notare che il nuovo valore del campo può non essere dello stesso tipo di dati del valore precedente.
    • Se SourceExpression viene valutata una row:
      1. Viene identificato il campo di destinazione.
      2. Viene impostato il valore del campo di destinazione.
      3. I campi child del campo di destinazione vengono sostituiti da una nuova serie, determinata in base alla struttura e al contenuto dell'elenco.
    • Se SourceExpression viene valutata list:
      1. Viene identificata la serie dei campi di destinazione nella struttura ad albero di destinazione.
      2. Se il numero di campi di destinazione non è sufficiente, ne vengono creati altri; se il numero è troppo elevato, i campi in eccesso vengono rimossi.
      3. Vengono impostati i valori dei campi di destinazione.
      4. I campi child dei campi di destinazione vengono sostituiti da una nuova serie, indicata dalla struttura e dal contenuto dell'elenco.

      Per ulteriori informazioni relative all'utilizzo degli elementi di tipo list, consultare Utilizzo degli elementi di tipo xsd:: list

  2. Se è presente una clausola TYPE, il tipo del campo di destinazione è impostato sul valore restituito da SourceExpression. Viene generata un'eccezione se il valore restituito non è scalare, non è di tipo INTEGER oppure è NULL.
  3. Se è presente una clausola NAMESPACE, lo spazio dei nomi del campo di destinazione viene impostato sul valore restituito da SourceExpression. Viene generata un'eccezione se il valore restituito non è scalare, non è di tipo CHARACTER oppure è NULL.
  4. Se è presente una clausola NAME, il nome del campo di destinazione è impostato sul valore restituito da SourceExpression. Viene generata un'eccezione se il valore restituito non è scalare, non è di tipo CHARACTER oppure è NULL.
  5. Se è presente una clausola VALUE, il valore del campo di destinazione viene modificato nel valore restituito da SourceExpression. Viene generata un'eccezione se il valore restituito non è scalare.

Note

Le istruzioni SET sono particolarmente utili nei nodi Compute che modificano un messaggio, modificando un campo oppure aggiungendo un nuovo campo al messaggio originario. Le istruzioni SET sono utili anche nei nodi Filter e Database, per impostare le variabili dichiarate o i campi nella struttura ad albero Ambiente o nelle strutture ad albero Ambiente locale. E' possibile utilizzare istruzioni come quella riportata di seguito in un nodo Compute che modifica un messaggio:
SET OutputRoot = InputRoot; 
SET OutputRoot.XML.Order.Name = UPPER(InputRoot.XML.Order.Name);

Questo esempio converte in maiuscolo un campo nel messaggio. La prima istruzione crea un messaggio di output che è una copia completa del messaggio di input. La seconda istruzione imposta il valore del campo Order.Name su un nuovo valore, come definito dall'espressione a destra.

Se il campo Order.Name non esiste nel messaggio di input originario, non esiste nel messaggio di output generato dalla prima istruzione. L'espressione a destra della seconda istruzione restituisce NULL (perché il campo indicato all'interno della chiamata alla funzione UPPER non esiste). L'assegnazione di un valore NULL ad un campo elimina il campo se il campo esiste, per cui la seconda istruzione non ha alcune effetto.

Se si desidera assegnare un valore NULL ad un campo senza eliminare il campo, utilizzare un'espressione come quella riportata di seguito:
 SET OutputRoot.XML.Order.Name VALUE = NULL;
Concetti correlati
Panoramica di ESQL
Attività correlate
Sviluppo di ESQL
Accesso agli elementi nel contenuto del messaggio
Riferimenti correlati
Diagrammi di sintassi: tipi disponibili
Istruzioni ESQL
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ak05140_