UPDATE sql avec calcul de la valeur à modifier
reglm
-
jee pee Messages postés 41520 Date d'inscription Statut Modérateur Dernière intervention -
jee pee Messages postés 41520 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je souhaite dans une table Oracle, modifier une valeur, en la calculant de la ligne suivante afin d'éviter les ruptures.
Cette table contient une zone DEB qui contient la valeur de début et une zone FIN qui contient la valeur de fin de la série.
Nous ne devons pas avoir de vide dans notre série, de ce fait je dois modifier la valeur fin avec la valeur DEB -1 de la ligne suivante.
J'ai essayé la commande LEAD, mais celle ci fonctionne très bien avec un sélect mais ne fonctionne pas avec un update.
Ma table fait plusieurs milliers de lignes
Table RANG de n colonnes avec 2 colonnes DEB et FIN, il n'y pas de doublon dans ces items.
DEB (CHAR) FIN (CHAR) NVX_FIN (résultat désiré après update)
0000000000000000001 0000000000000000999 0000000000000002000 (0000000000000002001 - 1)
0000000000000002001 0000000000000040999 0000000000000040999 (0000000000000041000 - 1)
0000000000000041000 0000000000000049999 0000000000000069999 (0000000000000070000 - 1)
0000000000000070000 0000000000000999999 0000000000000999999 dernière ligne donc inchangée
j'ai essayé
ERROR ORA-30483: window functions are not allowed here
ERROR ORA-30483: window functions are not allowed here
ERROR ORA-30483: window functions are not allowed here
Avez vous une idée pour réussir mon update avec une autre commande que LEAD ou une meilleure utilisation de cette commande ?
Par avance, merci
Je souhaite dans une table Oracle, modifier une valeur, en la calculant de la ligne suivante afin d'éviter les ruptures.
Cette table contient une zone DEB qui contient la valeur de début et une zone FIN qui contient la valeur de fin de la série.
Nous ne devons pas avoir de vide dans notre série, de ce fait je dois modifier la valeur fin avec la valeur DEB -1 de la ligne suivante.
J'ai essayé la commande LEAD, mais celle ci fonctionne très bien avec un sélect mais ne fonctionne pas avec un update.
Ma table fait plusieurs milliers de lignes
Table RANG de n colonnes avec 2 colonnes DEB et FIN, il n'y pas de doublon dans ces items.
SELECT deb , fin , to_char(to_number(LEAD(deb,1) OVER (ORDER BY deb , fin) - 1 )) NVX_FIN FROM rang ;
DEB (CHAR) FIN (CHAR) NVX_FIN (résultat désiré après update)
0000000000000000001 0000000000000000999 0000000000000002000 (0000000000000002001 - 1)
0000000000000002001 0000000000000040999 0000000000000040999 (0000000000000041000 - 1)
0000000000000041000 0000000000000049999 0000000000000069999 (0000000000000070000 - 1)
0000000000000070000 0000000000000999999 0000000000000999999 dernière ligne donc inchangée
j'ai essayé
UPDATE rang SET fin = to_char(to_number(LEAD(deb,1) OVER (ORDER BY deb , fin) - 1 )) where fin < MAX(fin) ;
ERROR ORA-30483: window functions are not allowed here
UPDATE rang SET fin = cast(lead(deb,1) over (order by deb , fin) as decimal)+1 where rownum < 4 ;
ERROR ORA-30483: window functions are not allowed here
UPDATE rang SET fin = (lead(deb,1) over (order by deb , fin) +1) where rownum < 4 ;
ERROR ORA-30483: window functions are not allowed here
Avez vous une idée pour réussir mon update avec une autre commande que LEAD ou une meilleure utilisation de cette commande ?
Par avance, merci
A voir également:
- UPDATE sql avec calcul de la valeur à modifier
- Modifier dns - Guide
- Modifier liste déroulante excel - Guide
- Windows update bloqué - Guide
- Modifier story facebook - Guide
- Calcul km marche à pied gratuit - Télécharger - Sport
Merci @jee pee
Je viens d'essayer, et par contre, je récupère toujours 'null' dans le select, la fonction LEAD sur un select unique (dans l'ordre UPDATE) ne fonctionne pas.
Avons nous une autre fonction pour récupérer dans un select unique, une valeur de la ligne suivante de la table (non récupéré dans le select) ?