READ |
Readpermet de faire des lectures sur une table par une clé d'accès ou un index temporaire.
Read [ classe ] [ clé ] [ mode_lect [ valeur_clé ] ]
Elément | Description | Restrictions | ||||||||
Désignation de la clé d'un fichier sous l'une des formes suivantes : | La clé doit être définie dans une clause Order By ou par défaut en | |||||||||
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). | |||||||||
| ||||||||||
Liste d'expressions séparées par ';' correspondant aux valeurs des sous-clés. | valeur comptatible avec le type de la sous-clé. |
# Série de lectures dans un fichier [TEST] dont les clés sont
# - une clé CLE1 (un élément alphanumérique),
# - une clé CLE2 (un élément date, un élément alpha, un élément
# entier).
# Dans ces exemples, on est supposé ne pas gérer les codes de retour.
# Lecture du 1er enregistrement pour lequel le 1er élément de CLE2 est
# la date du jour, puis du précédent dans l'ordre de la clé CLE1
Read [TEST]CLE2(1)= date$
Read [TEST]CLE1Prev
# Lecture d'un enregistrement dont la clé CLE1 est >= "ABCD"
Read [TEST]CLE1>= "ABCD"
# Lecture du 1er enregistrement du fichier dans l'ordre de la clé
# CLE1; le fichier [TEST] est supposé être le fichier par défaut
Read CLE1 First
# Lire le dernier enregistrement dans l'ordre de la clé précédement
# utilisée. Le fichier [TEST] est supposé être le fichier par défaut
Read Last
Readpermet de faire des lectures sur un fichier séquentiel indexé selon les divers modes énumérés dans le tableau ci-dessus. 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.
Les clés utilisables dans Read sont :
Lorsqu'on utilise l'abréviation de lien (définie lors d'un Link précédent) dans un Read, Adonix essaie de lire un enregistrement du fichier principal selon la clé donnée puis un enregistrement dans chaque fichier lié selon la clé et le mode de lecture donnés dans Link.
On peut omettre dans la syntaxe de Read l'abréviation du fichier ou le nom de la clé :
La lecture d'un enregistrement, avec la précision d'une partie de clé, positionne automatiquement la variable [G]currlen ; Cette variable contient en effet, le nombre de partie de clé utilisée ; Attention, toute lecture suivante, sans précision de clé, s'effectuera sur la même partie de clé. Pour lire sur une clé entière, préciser la clé ou bien positionner la variable [G]currlen à la valeur 0. La valeur 0 est la valeur par défaut.
La variable fstat indique comment s'est déroulée la lecture.
fstat | Code | Lu | Explication |
0 | Oui | La lecture a eu lieu correctement. | |
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. |
4 | ERDEBF | Non | En mode Prev ou Next, indique la fin du fichier. En mode First ou Last, indique que le fichier (ou la sélection) est vide. |
5 | ERPALEC | Non | En mode >=, >, =, <=, < ou Curr, indique qu'aucun enregistrement ne correspond aux valeurs demandées. |
Readpermet de lire un enregistrement verrouillé mais ne permet pas de savoir s'il est verrouillé. Pour faire cela il faut utiliser l'instruction Readlock.
Lorsque la lecture a réussi (c'est-à-dire si fstat est nul ou vaut éventuellement ERECIND), les variables de la classe [F] correspondant au fichier contiennent les valeurs de l'enregistrement lu. Cet enregistrement devient l'enregistrement courant du fichier. Dans le cas contraire, rien n'est modifié.
Dès qu'on a plusieurs enregistrements à lire dans une table, on utilisera de préférence à Read l'instruction For qui apporte une simplification d'écriture, réalisant, entre autres, de façon interne les Read Next nécessaires et accélérant les accès quand on travaille sur une base de données sous Oracle, car chaque instruction Read génère une requête au serveur.
Certains ordres Read obligent à parcourir presque toute la table, générant des temps d'exécution excessifs, surtout sous Oracle. C'est le cas avec les modes de lecture ">=" et "<=" sur des clés à plusieurs parties. En effet :
ReadCLE >= valeur1;valeur2 permet de lire 2 types d'enregistrement :
Or, très souvent, seule le premier type d'enregistrement intéresse le programmeur, mais pour satisfaire la deuxième, beaucoup d'autres enregistrements peuvent être parcourus.
Dans ce cas, il est beaucoup plus rapide de faire :
Filter [ABV] Where partie1 = valeur1 & partie2 >= valeur2 Order byCLE
Read[ABV]CLE First.
Cet ordre Read devra être remplacé par une boucle For dès qu'on envisage de faire plusieurs lectures. Plus il y a de parties de clés, plus ce phénomène est important.
Pour la version DB2, il existe une limite sur le nombre de champs restitués par une requête. La lecture d'un fichier dépassant 255 colonnes provoque une erreur, y compris la lecture d'un fichier lié. Nous n'avons pas de problème sur la définition de la table, puisque lors de la saisie des champs, il existe déjà ce contrôle. Par contre, le problème se pose sur la lecture basée sur une abréviation issue de l'instruction Link.
Lorsque l'on fait un Read direct en utilisant une clé avec homonyme, la requête Sql est générée avec un tri systématique sur le rowid. Ce fonctionnement est très bien, si on veut ensuite lire d'autres enregistrements par le read next, sinon il s'avère peu performant pour une seule lecture. Le tri sur le rowid ne sera pas généré dans le requête si on précise le nombre total de parties de clé. Exemple :
# table ACCES avec la clé avec homonyme CODACC ( USR, CODACC )
# tri sur USR, CODACC et rowid
Local File ACCES[ABR]
Read [ABC] CODACC First
Read [ABC] CODACC="XY","ZZZ"
# tri sur USR, CODACC
Local File ACCES[ABR]
Read [ABC] CODACC(2) First
Read [ABC] CODACC(2)="XY","ZZZ"
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). |
READLOCK - FILE - LINK - FOR - REWRITE - DELETE - LOOK - WRITE - FSTAT - FILTER - UPDATE - CURRIND - CURRLEN
Adonix X3(r) L4G |