PLAN
L’instruction `PLAN' vous permet de spécifier manuellement un plan pour l’optimiseur.
PLAN
dans l’instruction DELETE
.DELETE FROM Submissions
WHERE date_entered < '1-Jan-2002'
PLAN (Submissions INDEX ix_subm_date)
PLAN
L’instruction `PLAN' vous permet de spécifier manuellement un plan pour l’optimiseur.
PLAN
dans l’instruction DELETE
.DELETE FROM Submissions
WHERE date_entered < '1-Jan-2002'
PLAN (Submissions INDEX ix_subm_date)
ORDER BY
et ROWS
La clause "ORDER BY" organise l’ensemble avant de le supprimer, ce qui peut être important dans certains cas.
La clause ROWS
vous permet de limiter le nombre de lignes à supprimer.Elle n’a de sens qu’en combinaison avec la clause ORDER BY
, mais est valable sans elle.
Les valeurs m et n peuvent être des expressions entières quelconques.
Avec un seul argument m, les m premiers enregistrements sont supprimés.L’ordre des enregistrements sans ORDER BY
est indéfini (aléatoire).
Notes :
Si m est supérieur au nombre total d’entrées dans l’ensemble, l’ensemble entier est supprimé ;
Si m = 0, aucune suppression n’a lieu ;
Si m < 0, un message d’erreur est émis.
Si les arguments m et n sont spécifiés, la suppression est limitée au nombre d’entrées comprises entre m et n, inclusivement.La numérotation des enregistrements commence à partir de 1.
Note sur l’utilisation de deux arguments :
Si m est supérieur au nombre total de lignes de l’ensemble, aucune ligne n’est supprimée ;
Si m > 0 et ⇐ le nombre de lignes dans l’ensemble, et que n est en dehors de ces valeurs, les lignes de m à la fin de l’ensemble sont supprimées ;
Si m < 1 ou n < 1, un message d’erreur est émis ;
Si n = m - 1, aucune entrée n’est supprimée ;
Si n < m - 1, un message d’erreur est émis.
Suppression de l’achat le plus ancien
DELETE FROM Purchases ORDER BY ByDate ROWS 1
Suppression des commandes pour les 10 clients ayant les numéros les plus élevés
DELETE FROM Sales ORDER BY custno DESC ROWS 1 TO 10
Supprime tous les enregistrements des ventes, car aucun ROWS n’est spécifié.
DELETE FROM Sales ORDER BY custno DESC
Supprime une entrée "depuis la fin", c’est-à-dire depuis Z…
DELETE FROM popgroups ORDER BY name DESC ROWS 1
Supprime les cinq groupes les plus anciens
DELETE FROM popgroups ORDER BY formed ROWS 5
Aucun tri (ORDER BY) n’est spécifié, donc 8 enregistrements détectés seront supprimés, en commençant par le cinquième.
DELETE FROM popgroups ROWS 5 TO 12
SKIP LOCKED
Ne pas tenir compte du blocage.
La proposition SKIP LOCKED
fait en sorte que le moteur saute les enregistrements verrouillés par d’autres transactions, à la place,d’attendre ou de provoquer des erreurs lorsqu’un conflit se produit.
Cette fonctionnalité est utile pour mettre en œuvre des files d’attente de travail, dans lesquelles un ou plusieurs processus envoient des données à une table et génèrent un événement, tandis que les processus de travail écoutent ces événements et lisent/suppriment des éléments de la table.En utilisant SKIP LOCKED
, plusieurs threads de travail peuvent obtenir des éléments de travail exclusifs de la table sans conflit.
Note
|
Si la phrase |
Voir aussi: SELECT … SKIP LOCKED
,UPDATE … SKIP LOCKED
.
SKIP LOCKED
pour organiser une file d’attentePréparation des métadonnées.
create table emails_queue (
subject varchar(60) not null,
text blob sub_type text not null
);
set term !;
create trigger emails_queue_ins after insert on emails_queue
as
begin
post_event('EMAILS_QUEUE');
end!
set term ;!
Envoi de données par une application ou un sous-programme
insert into emails_queue (subject, text)
values ('E-mail subject', 'E-mail text...');
commit;
L’application cliente peut écouter l’événement EMAILS_QUEUE
pour envoyer des courriels à l’aide de cette requête :
delete from emails_queue
rows 10
skip locked
returning subject, text;
Plus d’une instance d’une application peut fonctionner, par exemple pour l’équilibrage de la charge.
RETURNING
L’opérateur DELETE
peut contenir une construction RETURNING
pour retourner les valeurs des enregistrements en cours de suppression.Toutes les colonnes et expressions peuvent être spécifiées dans RETURNING
.Un astérisque (*) peut être spécifié à la place d’une liste de colonnes, auquel cas toutes les colonnes de l’enregistrement supprimé seront retournées.
Note
|
|
RETOURNER
dans l’instruction DELETE
.DELETE FROM Scholars
WHERE first_name = 'Henry' AND last_name = 'Higgins'
RETURNING last_name, fullname, id
DELETE FROM Dumbbells
ORDER BY iq DESC
ROWS 1
RETURNING last_name, iq
INTO :lname, :iq;
DELETE FRMO TempSales ts
WHERE ts.id = tempid
RETURNING ts.qty
INTO new.qty;