UPDATE

Sommaire


Updatepermet de réécrire des enregistrements d'une table avec les valeurs passées enparamètre.

 

Syntaxes

   Update [ classe ] [Where_exp ]   Withchamp = exp_chp [ , champ = exp_chp ]

 

Paramètres

Elément

Description

Restrictions

classe

Abréviation d'un fichier ouvert

Aucune

Where_exp

Expression_de_sélection Voir Where

Aucune

champ

nom d'un champ de la table

Aucune

exp_chp

expression donnant la valeur que doitprendre le champ

de type comptatible avec celui du champ - voir Where -

 

Exemples

   # Mise à jour du champ FLGACTIF dufichier CLIENT pour tous les
   # enregistrements dont les zones DEBIT etCREDIT sont à 0.
   
FileCLIENT [CLI]
   Update [CLI] WhereDEBIT = 0 and CREDIT = 0 and FLGACTIF <> 1
    & With FLGACTIF = 1
    #affichage du nombre d'enregistrements modifiés
    Infbox "enregistrements modifiés"-[S]adxuprec

   # Incrémentation du nombre d'éditions
   Update [DIV] WhereFLAGEDIT & CLE >= [M]DEB1 With NBEDIT += 1

 

Description et commentaires

Updatepermet d'affecter certains champs des enregistrements d'une table avec les valeurs passées en paramètres en faisant automatiquement les opérations de lecture, verrouillage, réécriture et déverrouillage. Cette instruction permet de simplifier l'écriture du traitement et d'accélérer ces opérations dès que plusieurs enregistrements sont en cause.

Cette instruction exploite la possibilité de faire sur les bases de données Oracle une requête de même type. Adonix ne fait que traduire les expressions passées dans un langage compréhensible à la base de données, ce qui limite le choix des fonctions possibles. On se reportera à la documentation de la clause Where pour en avoir la liste.

Updatemet à jour la variable fstat pour indiquer comment s'est déroulée l'opération.

fstat

Code

MàJ

Explication

0

 

Oui

La mise à jour a eu lieu correctement. adxuprec enregistrements ont été modifiés. ou aucun enregistrement n'a été sélectionné. 

1

ERLOCK

Oui et Non

En inter-blocage, dans ce cas, la transaction est abandonnée.

3

ERDUPCL

Non

Tentative de créer une clé non duplicable

Adxuprec permet de connaître le nombre d'enregistrements mis à jour par une instruction Update.

On peut utiliser comme valeur une expression calculée à partir de la valeur d'un champ de la table. Cette valeur sera celle lue dans la table par l'opération de lecture faite par Update et non pas la valeur de la classe [F] telle qu'elle était avant l'instruction.
Exemple :[F:FIC1]NUMERO = 0
Update[FIC1] With NUMERO = NUMERO +1
Les différentes valeurs de NUMERO seront incrémentées et non pas passées à 1.

ATTENTION : on ne peut pas prédire le comportement d'une instruction Update qui affecterait un champ avec la valeur d'un champ lui-même affecté par Update.
Exemple :
Update[FIC] With CHAMP1 = VALEUR, CHAMP2 = CHAMPA.

Tentative de mise à jour d'enregistrements verrouillés :

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

Updatene modifie pas les variables de la classe [F] correspondant au fichier.

 

Remarque

On ne peut pas utiliser une abréviation de lien pour mettre à jour un fichier.

La mise à jour par Update doit se faire à l'intérieur d'une transaction.

En cours de transaction, les modifications ne seront pas visibles par lesautres utilisateurs.

Chaque verrouillage d'enregistrement "réussi" implique l'attribution d'un verrou, mais le verrou n'est libéré qu'à la fin de la transaction. Toute base utilise ses propres verrous et leur nombre est limité par un des paramètres de la base. Dans le cas où cette ressource serait épuisée, Adonix générera un erreur n 43 (FISLOCK). Il faudra alors, soit faire augmenter le nombre de verrous, soit modifier le programme, soit gérer cette erreur.

Le verrouillage dépend de la base de données. Il est indépendant de la valeur de [S]lockwait. Sous Oracle, Sql-serveur, Db2 la tentative de verrouillage se fera sans limitation de durée et sans possibilité de l'interrompre. Verrouiller la table dans son ensemble par Lock [abvf] est un moyen brutal, mais sûr d'éviter tout problème.

 

Erreurs associées

Erreur

Description

ERMODE(10)

Type de paramètres incompatibles avec les zones du fichier à modifier.

ERCLAS( 7)

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

 

Mots-clés associés

 WHERE- READLOCK - FILE - REWRITE - TRBEGIN - FSTAT - FILTER - ADXUPREC


SOMMAIRE

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