Istruzione DECLARE

L'istruzione DECLARE definisce una variabile, il tipo di dati della variabile e, come opzione, il relativo valore iniziale.

SINTASSI

  1. La parola chiave SHARED non è consentita all'interno di una funzione o di una procedura.
  2. Non è possibile specificare SHARED con un DataType uguale a REFERENCE. Per memorizzare una struttura ad albero del messaggio in una variabile condivisa, utilizzare il tipo di dati ROW.
  3. Le variabili EXTERNAL sono implicitamente costanti.
  4. Si consiglia di assegnare un valore iniziale ad una variabile EXTERNAL.
  5. Se si specifica un DataType uguale a REFERENCE, è necessario specificare un valore iniziale (di una variabile o di una struttura ad albero) in InitialValueExpression.
  6. Quando vengono utilizzate le clausole NAMESPACE e NAME, i valori sono implicitamente costanti e di tipo CHARACTER.

Tipi di variabile

E' possibile utilizzare l'Istruzione DECLARE per definire tre tipi di variabile:
Esterna
Le variabili esterne (definite con la parola chiave EXTERNAL) sono dette anche UPD (user-defined properties): consultare UDP (User-defined property) in ESQL. Esistono per l'intera durata di un flusso di messaggi e sono visibili per tutti i messaggi che attraversano il flusso. Il valore iniziale (facoltativamente impostato dall'istruzione DECLARE) può essere modificato, al momento della progettazione, mediante l'editor Flusso di messaggi oppure, al momento della distribuzione, dall'editor di BAR. I valori delle variabili non possono essere modificati da ESQL.
Normale
Le variabili "normali" hanno la durata di un messaggio che attraversa un nodo. Sono visibili solo per quel messaggio. Per definire una variabile "normale", omettere le parole chiave EXTERNAL e SHARED.
Condivisa
Le variabili condivise possono essere utilizzate per implementare una cache in memoria nel flusso di messaggi. Consultare Ottimizzazione dei tempi di riposta del flusso di messaggi. Le variabili condivise hanno una durata elevata e sono visibili per più messaggi che attraversano un flusso; consultare Variabili a lunga durata. Esse esistono per la durata del processo del gruppo di esecuzione, la durata del flusso o del nodo o la durata del codice SQL del nodo che dichiara la variabile (qualunque sia la più breve). Sono inizializzate quando il primo messaggio passa attraverso il flusso o il nodo dopo l'avvio di ciascun broker.

Consultare anche l'opzione ATOMIC in Istruzione BEGIN ... END. La struttura BEGIN ATOMIC è utile quando è necessario apportare un numero di modifiche ad una variabile condivisa ed è importante per evitare che altre istanze vedano gli stati intermedi dei dati.

CONSTANT

Utilizzare CONSTANT per definire una costante. E' possibile dichiarare le costanti all'interno di schemi, moduli, routine o istruzioni composte (implicite ed esplicite). Di seguito è riportato il funzionamento di tali casi:

Una costante o una variabile dichiarata all'interno di una routine sostituisce tutti i parametri con lo stesso nome e tutte le costanti e le variabili con lo stesso nome dichiarate in un modulo o in uno schema.

DataType

I possibili valori che è possibile specificare per DataType sono:
  • BOOL
  • BOOLEAN
  • INT
  • INTEGER
  • FLOAT
  • DEC
  • DECIMAL
  • DATE
  • TIME
  • TIMESTAMP
  • GMTTIME
  • GMTTIMESTAMP
  • INTERVAL: non è valido per le variabili esterne (opzione EXTERNAL specificata)
  • CHAR
  • CHARACTER
  • BLOB
  • BIT
  • ROW: non è valido per le variabili esterne (opzione EXTERNAL specificata)
  • REF: non è valido per le variabili esterne o condivise (opzione EXTERNAL o SHARED specificata)
  • REFERENCE-TO: non è valido per le variabili esterne o condivise (opzione EXTERNAL o SHARED specificata)
Nota: Se si specifica il DataType REFERENCE, è necessario anche specificare InitialValueExpression.

EXTERNAL

Utilizzare EXTERNAL per indicare una UDP (user-defined property). Una UDP è una costante definita dall'utente il cui valore iniziale (facoltativamente impostato dall'istruzione DECLARE) può essere modificato, al momento della progettazione, dall'Editor Flusso di messaggi oppure sostituito, al momento della distribuzione, dall'Editor Archivio del broker. Il suo valore non può essere modificato da ESQL.

Per una panoramica sulle UDP, consultare UDP (User-defined property) in ESQL.

Quando all'UDP viene assegnato un valore iniziale nell'istruzione DECLARE, tale valore diventa il valore predefinito. Tuttavia, qualsiasi valore specificato dall'editor Flusso di messaggi al momento della progettazione oppure dall'editor BAR al momento della distribuzione (anche una stringa di lunghezza zero) sostituisce il valore iniziale indicato nell'istruzione DECLARE.

Tutte le UDP in un flusso di messaggi devono disporre di un valore, assegnato nell'istruzione DECLARE oppure dall'editor di BAR o del flusso di messaggi; in caso contrario, si verifica un errore relativo all'ora di distribuzione. Al runtime, dopo che l'UDP è stata dichiarata, le istruzioni ESQL successive possono interrogare ma non modificare il relativo valore.

Il vantaggio delle UDP è che il relativo valore può essere modificato al momento della distribuzione. Se, ad esempio, si utilizzano le UDP per conservare i dati di configurazione, è possibile configurare un flusso di messaggi per una particolare macchina, attività o ambiente al momento della distribuzione, senza dover modificare il codice al livello del nodo.

E' possibile dichiarare le UDP solo nei moduli o negli schemi.

I seguenti tipi di nodi del broker possono accedere alle UDP:
  • Compute
  • Database
  • Filter
  • Nodi derivati da tali tipi di nodi

Prestare attenzione quando si specifica il tipo di dati di una UDP, perché viene eseguita un'istruzione CAST per assegnare il DataType richiesto.

Esempio 1

DECLARE mycolour EXTERNAL CHARACTER ‘blue'; 

Esempio 2

DECLARE TODAYSCOLOR EXTERNAL CHARACTER;
SET COLOR = TODAYSCOLOR;
dove TODAYSCOLOR è una UDP che ha un TYPE uguale a CHARACTER e VALUE impostato dall'editor Flusso di messaggi.

NAME

Utilizzare NAME per definire un alias (un altro nome) mediante il quale è possibile riconoscere una variabile.

Esempio 1

-- The following statement gives Schema1 an alias of 'Joe'.
DECLARE Schema1 NAME 'Joe';  
-- The following statement produces a field called 'Joe'.
SET OutputRoot.XML.Data.Schema1 = 42; 
 
-- The following statement inserts a value into a table called Table1 
-- in the schema called 'Joe'.
INSERT INTO Database.Schema1.Table1 (Answer) VALUES 42; 

Esempio 2

DECLARE Schema1 EXTERNAL NAME;

CREATE FIRSTCHILD OF OutputRoot.XML.TestCase.Schema1 Domain('XML') 
                     NAME 'Node1' VALUE '1';

-- If Schema1 has been given the value 'red', the result would be:
<xml version="1.0"?>
<TestCase>
  <red>
    <Node1>1</Node1>
  </red>

NAMESPACE

Utilizzare NAMESPACE per definire un alias (un altro nome) mediante il quale è possibile riconoscere uno spazio dei nomi.

Esempio

Questo esempio illustra una dichiarazione di spazio dei nomi, il relativo utilizzo come SpaceId in un percorso ed il relativo utilizzo come costante character in un'espressione namespace:

       DECLARE prefixOne NAMESPACE 'http://www.example.com/PO1';

       -- On the right hand side of the assignment a namespace constant
       -- is being used as such while, on the left hand side, one is 
       -- being used as an ordinary constant (that is, in an expression).

       SET OutputRoot.XML.{prefixOne}:{'PurchaseOrder'} = 
                      InputRoot.XML.prefixOne:PurchaseOrder;

SHARED

Utilizzare SHARED per definire una variabile condivisa. Le variabili condivise sono private per il flusso (se dichiarate all'interno di uno schema) o per il nodo (se dichiarate all'interno di un modulo) ma sono condivise tra le istanze del flusso (thread). Nessun tipo di variabile è più visibile di una variabile a livello del flusso. Ad esempio, non è possibile condividere le variabili tra i gruppi di esecuzione.

Le variabili condivise possono essere utilizzate per implementare una cache in memoria nel flusso di messaggi. Consultare Ottimizzazione dei tempi di riposta del flusso di messaggi. Le variabili condivise hanno una durata elevata e sono visibili per più messaggi che attraversano un flusso; consultare Variabili a lunga durata. Queste variabili esistono per l'intera durata del processo del gruppo di esecuzione, l'intera durata del flusso o del nodo o l'intera durata del codice SQL del nodo che dichiara la variabile (qualunque sia la più breve). Sono inizializzate quando il primo messaggio passa attraverso il flusso o il nodo dopo l'avvio di ciascun broker.

Non è possibile definire una variabile condivisa all'interno di una funzione o di una procedura.

I vantaggi delle variabili condivise, in relazione ai database, sono:
  • L'accesso in scrittura è molto più rapido.
  • L'accesso in lettura alle strutture di dati di piccole dimensioni è più rapido.
  • L'accesso è diretto. Ciò significa che non è necessario utilizzare una funzione speciale (SELECT) per ottenere i dati oppure istruzioni speciali (INSERT, UPDATE o DELETE) per modificare i dati. Al contrario, è possibile fare riferimento ai dati direttamente nelle espressioni.
I vantaggi dei database, in relazione alle variabili condivise, sono:
  • I dati sono permanenti.
  • I dati vengono modificati in modo transazionale.

Tali variabili di lettura-scrittura, con una durata superiore a quella di un messaggio me che funzionano meglio di un database, sono ideali per gli utenti pronti a sacrificare i vantaggi transazionali e di permanenza dei database per migliorare le prestazioni.

Con le variabili condivise del flusso (definite al livello dello schema), prestare attenzione quando più flussi possono aggiornare le variabili, specialmente se la variabile viene utilizzata come contatore. Allo stesso modo, con le variabili condivise del nodo (definite al livello del modulo), prestare attenzione quando più istanze possono aggiornare le variabili.

Le variabili row condivise consentono a un programma utente di eseguire un'efficace copia in lettura/scrittura di un messaggio del nodo di input. Ciò è generalmente utile e, in particolare, semplifica la tecnica per la gestione di messaggi di grandi dimensioni.

Esiste una limitazione relativa alle strutture ad albero secondarie che non possono essere copiate direttamente da una variabile row condivisa ad un'altra variabile row condivisa. Le strutture ad albero secondarie possono essere copiate indirettamente utilizzando una variabile row non condivisa. I valori scalari estratti da una variabile row condivisa (utilizzando la funzione FIELDVALUE) possono essere copiati ad un'altra variabile row condivisa.

Esempio

Per un esempio di utilizzo delle variabili condivise, consultare il programma di esempio "Instradamento messaggio" che illustra come utilizzare le variabili condivise ed esterne. L'esempio "Instradamento messaggio" è disponibile nella Galleria degli esempi in Message Brokers Toolkit.

Concetti correlati
Panoramica di ESQL
UDP (User-defined property) in ESQL
Attività correlate
Sviluppo di ESQL
Creazione di riferimenti di campo dinamici
Configurazione di un flusso di messaggi durante la distribuzione utilizzando UDP
Riferimenti correlati
Diagrammi di sintassi: tipi disponibili
Istruzioni ESQL
Tipi di dati ESQL nei flussi di messaggi
Editor Flusso di messaggi
Funzione FIELDVALUE
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ak04980_