DELETE |
Deletepermet d'effacer un ou plusieurs enregistrements d'une table.
SYNTAXE 1Delete [ classe ] [clé ] [ mode_lect [valeur_clé ] ]
SYNTAXE 2Delete [ classe ] [Where_cl ]
Elément | Description | Restrictions | ||||||
Désignation de la clé d'un fichier sous la forme : nom_de_variable | Aucune. | |||||||
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 :
| |||||||
valeur_clé | Liste d'expressions séparées par | valeur comptatible avec le type de la | ||||||
where_cl | Voirinstruction Where | Aucune |
# 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
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.
0 |
| Oui | Les effacements ont eu lieu correctement. adxdlrec enregistrements ont été effacés. |
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é.
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.
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. |
FILE - WHERE - FOR - FSTAT - ADXDLREC
Adonix X3(r) L4G |