DELETE

Sommaire


Deletepermet d'effacer un ou plusieurs enregistrements d'une table.

 

Syntaxes

   SYNTAXE 1  Delete [classe ] [clé ] [mode_lect [valeur_clé ] ]
   SYNTAXE 2  Delete [classe ] [Where_cl ]

 

Paramètres

Elément

Description

Restrictions

clé

Désignation de la clé d'un fichier sous la forme : nom_de_variable
nom_de_variable '(' exp_ind ')'

Aucune.

exp_ind

Expression entière du nombre de parties de clés utilisées. Par défaut, toute la clé est utilisée.

0 <=exp_ind<= nombre de composantes de la clé (au plus 8).

mode_lect

L'un des mots-clés suivants, ou l'un des opérateurs suivants :

mot-clé

opérateur

Mode de lecture utilisé

First
Last
Curr
Prev
Next






>=
>
=
<
<=

1er enregistrement
Dernier enregistrement
Enregistrement courant
Enregistrement précédent
Enregistrement suivant
Clé >= valeur_clé
Clé > valeur_clé
Clé = valeur_clé
Clé < valeur_clé
Clé <= valeur_clé

valeur_clé

Liste d'expressions séparées par
';' correspondant aux valeurs des
sous-clés.

valeur comptatible avec le type de la
sous-clé

where_cl

Voirinstruction Where

Aucune

 

Exemples

# Lecture d'un enregistrement et effacement
Read [FICH]CLE = 3.14 : If fstat = 0 :Delete : Endif
# Effacement de tous les enregistrements dont le numéro de facture est "00001001"# le numéro de facture est le 1er élément de la clé CLEFAC
Delete [LIG] Where [LIG]NUMFAC ="00001001"
# syntaxe équivalente
Delete [LIG]CLEFAC(1) ="00001001"
# autre syntaxe donnant le même résultat mais moins performante
For [LIG]CLEFAC(1) Where [LIG]NUMFAC ="00001001" :Delete curr : Next
 
# Effacement de tous les enregistrements dont un champ alpha-numérique
#  est supérieur ou égal à "" (tous les enrgistrements !)
Lock [BOUM]
If [S]fstat
Delete [BOUM] Where ALPHA >= ""
Unlock
Endif

 

Description et commentaires

Deletepermet de faire des effacements sur une table selon les divers modes énumérés dans le tableau ci-dessus. Trois cas peuvent se présenter :

Si on ne donne pas de valeur de clé pour les modes qui en demandent une ( '<', '>', '<=', '>=', '=' ), la valeur courante des variables de la classe [F] correspondant au fichier est utilisée.

On peut omettre dans la syntaxe de Delete l'abréviation du fichier ou le nom de la clé. Dans le premier cas, le fichier utilisé est le premier dans la liste des tables par défaut. Dans le deuxième cas, la clé utilisée est la clé courante (pour la syntaxe 1) , c'est-à-dire :

Pour le syntaxe 2, la base de données identifie elle-même la clé à utiliser en fonction de la clause Where.

Les clés utilisables dans Delete sont :

Deletene modifie pas l'enregistrement courant (le contenu des variables de la classe [F] correspondante).
Deletepositionne la variable système Adonix adxdlrec qui contient le nombre d'enregistrements effacés.
Deletemet à jour la variable fstat pour indiquer comment se sont déroulés les effacements.

fstat

Code

Eff.

Explication

0

 

Oui

Les effacements ont eu lieu correctement. adxdlrec enregistrements ont été effacés. 
ou aucun enregistrement n'a été sélectionné. 

1

ERLOCK

Non

inter-blocagesur un enregistrement.

2

ERECIND

Oui

En mode de lecture <= ou >= , signale que  la lecture a eu lieu, mais que la clé  trouvée est < ou > à la valeur recherchée.

Attention !
pour la syntaxe 1 : La suppression s'arrête dès qu'un enregistrement est déjà verrouillé.
pour la syntaxe 2 : La suppression reste bloquée dès qu'un enregistrement est déjà verrouillé.

Remarque

Cette instruction doit être employée à l'intérieur d'une transaction. 

Les enregistrements supprimés seront encore visibles par les autres utilisateurs en attendant la fin de la transaction.

En attendant la fin de la transaction, les enregistrements supprimés seront encore visibles par les autres utilisateurs, sous Oracle, alors qu'elles le seront sous Sql-serveur. En effet, Adonix utilise pour Sql-serveur la technique du "dirty read"( ou read uncommited) c'est à dire que les écritures non encore commitées sont vues par les utilisateurs. 
En fait, SQL-serveur offre la possibilité de faire des read "commited", mais dans ce cas, la lecture bloque sur les enregistrements modifiés ( contrairement à Oracle qui va lire dans les rollbacks-segments) ce qui risque d'engendrer des ralentissements tout particulièrement sur les listes gauches. 

Tentative de suppression d'enregistrements verrouillés :

Dans les deux cas, le  Delete reste en attente et poursuit sa suppression lorsque l'enregistrement se libère. Par contre, en inter-blocage,  le  Delete arrête sa suppression et envoie un fstat=1.

Les enregistrements à supprimer sont d'abord verrouillés. Les verrous resteront posés jusqu'à la fin de la transaction. Sous toute base de données, la limitation de cette ressource est un des paramètres de la base. Dans le cas où cette ressource serait épuisée, on ne pourra plus supprimer de nouvel enregistrement et un erreur Adonix n 43 (FISLOCK) sera générée. Il faudra, soit faire augmenter le nombre de verrous, soit adapter le programme, soit gérer cette erreur.

Il n'est pas possible d'utiliser une abréviation de lien pour supprimer un enregistrement d'une table.

 

Erreurs associées

Erreur

Description

MODIN(22)

Modede lecture incorrect.

ERINDI( 8)

Le nombre de valeurs données, ou l'indice indiqué, dépasse le nombre d'éléments de la clé.

PACLE(21)

La clé est inexistante sur ce fichier.

ERCLAS( 7)

Laclasse fichier n'existe pas (fichier non ouvert).

ERACCE(27)

Fichierouvert 'en lecture seulement' dans le dictionnaire des tables.

FISLOCK(43)

Plusde verrous disponibles.

 

Mots-clés associés

FILE - WHERE - FOR - FSTAT - ADXDLREC


SOMMAIRE

Adonix X3(r) L4G
Copyright (c) Adonix 1999 - All rights reserved