Istruzione UPDATE

L'istruzione UPDATE modifica i valori delle colonne specificate, nelle righe selezionate, in una tabella in un database esterno.

SINTASSI

Tutte le righe per cui l'espressione della clausola WHERE è TRUE vengono aggiornate nella tabella identificata da TableReference. Ciascuna riga viene esaminata a turno e viene impostata una variabile per puntare alla riga corrente. Generalmente, l'espressione della clausola WHERE utilizza questa variabile per accedere ai valori della colonna e così determina le righe da aggiornare o lasciare non modificate, in base al relativo contenuto. La variabile è indicata da CorrelationName oppure, in assenza di una clausola AS, da TableName. Quando una riga è stata selezionata per l'aggiornamento, a ciascuna colonna indicata nella clausola SET viene assegnato un nuovo valore come determinato dall'espressione corrispondente. Tali espressioni possono fare riferimento alla variabile della riga corrente.

Riferimento di tabella

Un riferimento di tabella è un caso particolare dei riferimenti di campo utilizzati per fare riferimento alle strutture ad albero del messaggio. Inizia sempre con la parola "Database" e può contenere quanto riportato di seguito:
  • Solo il nome della tabella
  • Il nome dello schema ed il nome della tabella
  • Il nome dell'origine dati (il nome di un'istanza del database), il nome dello schema ed il nome della tabella
In ciascun caso, il nome può essere specificato direttamente oppure mediante un'espressione racchiusa tra parentesi ({...}). Un nome di origine dati, di schema o di tabella specificato direttamente è soggetto alla sostituzione del nome. Ossia, se il nome utilizzato è stato dichiarato per essere un nome riconosciuto, viene utilizzato il valore del nome dichiarato invece del nome stesso (consultare Istruzione DECLARE).

Se non viene specificato il nome dello schema, viene utilizzato lo schema predefinito per l'utente del database del broker.

Se non viene specificato il nome dell'origine dati, viene utilizzato il database indicato dall'attributo data source del nodo.

Clausola WHERE

L'espressione della clausola WHERE può utilizzare tutte le funzioni e tutti gli operatori del broker in qualsiasi combinazione. Può fare riferimento a colonne di tabella, campi di messaggi e a costanti o variabili dichiarate.

Tuttavia, tenere presente che il broker considera l'espressione della clausola WHERE esaminando l'espressione e decidendo se l'intera espressione può essere valutata dal database. Se l'operazione è possibile, essa viene fornita al database. Per essere valutata dal database, devono essere utilizzati solo gli operatori e le funzioni supportati dal database.

La clausola WHERE, tuttavia, può fare riferimento a campi di messaggi, a nomi di correlazione dichiarati dalle istruzioni SELECT e ad altre costanti o variabili dichiarate all'interno dell'ambito.

Se l'intera espressione non può essere valutata dal database, il broker ricerca gli operatori AND di livello principale ed esamina separatamente ciascuna espressione secondaria. Quindi, prova a fornire al database le espressioni secondarie che possono essere valutate, lasciando al broker il compito di valutare le altre. E' necessario tenere presente tali informazioni per due motivi:
  1. Le modifiche apparentemente insignificanti alle espressioni della clausola WHERE possono avere effetti rilevanti sulle prestazioni. E' possibile determinare la quantità di espressione fornita al database esaminando una traccia utente.
  2. Alcune funzioni del database operano in modo leggermente diverso rispetto a quelle del broker.

Gestione degli errori

E' possibile che durante le operazioni di aggiornamento si verifichino degli errori. Ad esempio, il database potrebbe non essere operativo oppure per la tabella potrebbero essere definiti dei vincoli che verrebbero violati dai nuovi valori. In tali casi, viene generata un'eccezione (a meno che la proprietà Genera eccezione in caso di errore database del nodo non sia impostata su FALSE). Tali eccezioni impostano valori di testo dell'errore, dell'errore nativo, dello stato e del codice SQL e possono essere gestite mediante i programmi di gestione degli errori (consultare l'istruzione DECLARE HANDLER).

Per ulteriori informazioni relative alla gestione degli errori del database, consultare Cattura dello stato del database.

Esempi

Nell'esempio seguente si presuppone che la proprietà dataSource del nodo Database sia stata configurata e che il database identificato contenga una tabella denominata STOCKPRICES, con colonne denominate COMPANY e PRICES. Viene aggiornata la colonna PRICE delle righe nella tabella STOCKPRICES la cui colonna COMPANY corrisponde al valore fornito nel campo Company nel messaggio.
UPDATE Database.StockPrices AS SP
 SET PRICE = InputBody.Message.StockPrice
 WHERE SP.COMPANY = InputBody.Message.Company
Nel seguente esempio (che utilizza ipotesi simili), l'espressione della clausola SET fa riferimento al valore esistente di una colonna e diminuisce il valore di un'unità nel messaggio:
UPDATE Database.INVENTORY AS INV
 SET QUANTITY = INV.QUANTITY - InputBody.Message.QuantitySold
 WHERE INV.ITEMNUMBER = InputBody.Message.ItemNumber
Il seguente esempio aggiorna più colonne:
UPDATE Database.table AS T
 SET column1 = T.column1+1,
     column2 = T.column2+2;

Notare che i nomi di colonna (a sinistra del simbolo "=") sono identificativi singoli. Non devono essere qualificati con un nome di tabella o di correlazione. Inoltre, i riferimenti alle colonne del database nelle espressioni (a destra del simbolo "=") devono essere qualificati con il nome di correlazione.

L'esempio successivo illustra l'utilizzo dei nomi della tabella, dello schema e dell'origine dati calcolati:
-- Declare variables to hold the data source, schema and table names 
-- and set their default values
DECLARE Source CHARACTER 'Production';
DECLARE Schema CHARACTER 'db2admin';
DECLARE Table  CHARACTER 'DynamicTable1';
-- Code which calculates their actual values comes here

-- Update rows in the table
UPDATE Database.{Source}.{Schema}.{Table} AS R SET Value = 0;
Concetti correlati
Panoramica di ESQL
Attività correlate
Sviluppo di ESQL
Cattura dello stato del database
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
ak05160_