Bonjour,

le titre n'est pas très explicite, alors voila ma problématique :
j'ai une table : Matable
dans cette table je dois mettre à jour un champs : poids
dans cette table il y a un champs valeur.

pour une ligne n, poid(n) = valeur(n)-valeur(n-1).

exemple
VALEUR POIDS
----------------
4 null
1 -3 (1-4)
0 -1 (0-1)
-2 -2 (-2-0)

etc...

Voici mon code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DECLARE
	CURSOR CCur IS
	SELECT a.valeur FROM MaTable a
	FOR UPDATE MaTable.Poid;
	valeur_courrant MaTable.valeur%TYPE;
	valeur_precedent MaTable.valeur%TYPE;
BEGIN
	OPEN CCur;
	LOOP
		FETCH CCur INTO valeur_courrant;
		EXIT WHEN CCur%NOTFOUND;
			UPDATE MaTable
			SET poids=valeur_courrant-valeur_precedent
			WHERE CURRENT OF CCur;
			valeur_precedent:=valeur_courrant;
	END LOOP;
	CLOSE CCur;
END;
1 - mon code ne fonctionne pas (mais ça à la limite c'st pas le plus grave)
2 - Estce que la methode que j'emploi est "la meilleur"
3 - j'avais pensé a utiliser des collections, mais je n'y suis pas arrivé

Donner moi votr avis svp

Merci