READ

Sommaire


Readpermet de faire des lectures sur une table par une clé d'accès ou un index temporaire.

 

Syntaxes

   Read [ classe ] [ clé ] [ mode_lect [ valeur_clé ] ]

 

Paramètres

Elément

Description

Restrictions

clé

Désignation de la clé d'un fichier sous l'une des formes suivantes :
nom_de_variable
nom_de_variable '('
exp_ind ')'

La clé doit être définie dans une clause Order By ou par défaut en
paramétrage.

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é.

 

Exemples

   # 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

 

Description et commentaires

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

spacer.gif (822 octets)

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é.

 

Remarques

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.

Nouveautés de la version 140

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"

 

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).

 

Mots-clés associés

READLOCK - FILE - LINK - FOR - REWRITE - DELETE - LOOK - WRITE - FSTAT - FILTER - UPDATE - CURRIND  -   CURRLEN


SOMMAIRE

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