Istruzione DELETE FROM

L'istruzione DELETE FROM elimina le righe da una tabella in un database esterno, in base ad una condizione di ricerca.

SINTASSI

Tutte le righe per cui l'espressione della clausola WHERE è TRUE vengono eliminate dalla 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 tale variabile per accedere ai valori della colonna e così determina le righe da conservare o eliminare in base al relativo contenuto. La variabile è indicata da CorrelationName oppure, in assenza di una clausola AS, da TableName.

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 eliminazione si verifichino alcuni errori. Ad esempio, il database potrebbe non essere operativo. 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

Negli esempi riportati di seguito si suppone che la proprietà dataSource sia stata configurata e che il database identificato da tale proprietà contenga una tabella denominata SHAREHOLDINGS, con una colonna denominata ACCOUNTNO.
DELETE FROM Database.SHAREHOLDINGS AS S
       WHERE S.ACCOUNTNO = InputBody.AccountNumber;

Questo comando rimuove tutte le righe dalla tabella SHAREHOLDINGS in cui il valore nella colonna ACCOUNTNO (nella tabella) è uguale a quello nel campo AccountNumber nel messaggio. E' possibile che vengano eliminate zero, una o più righe dalla tabella.

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

-- Delete rows from the table
DELETE FROM Database.{Source}.{Schema}.{Table} As R WHERE R.Name = 'Joe';
Concetti correlati
Panoramica di ESQL
Attività correlate
Sviluppo di ESQL
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
ak04990_