récupération d'un sequence.currval ????? [PL/SQL] - SQL/NoSQL - Programmation
Marsh Posté le 25-08-2003 à 10:13:24
liengy a écrit : Voilà j'ai un code pl/sql, et j'aimerais faire un truc de ce genre : |
Tu peux en faisant :
SELECT SEQ_ZONE_GEO.currval
into curr_idZone
from dual;
Marsh Posté le 25-08-2003 à 10:22:53
tomlameche a écrit : |
Merci bcp
Marsh Posté le 26-08-2003 à 14:19:35
Attention, tu ne peux faire appel a la fonction "currval" que si cet appel a été précédé, dans la même session, d'un appel a la focntion "nextval".
Sinon, tu peux en effet utiliser :
select nom_sequence.nextval from dual;
select nom_sequence.currval from dual;
Marsh Posté le 27-08-2003 à 17:40:10
M@rs a écrit : Attention, tu ne peux faire appel a la fonction "currval" que si cet appel a été précédé, dans la même session, d'un appel a la focntion "nextval". |
Oui bien entendu...
Merci...
Marsh Posté le 27-08-2003 à 20:11:01
à ce moment, faire un select sur currval est inutile, puisque nextval à retourné le même résultat
Marsh Posté le 27-08-2003 à 20:12:33
sinon, j'y pense, selon les paramètres d'Oracle, currval n'a pas toujours la valeur actuelle ! (très important !!!)
en effet, si la fonction de cache est activée (pour une séquence très solicitée c'est très utile), il va générer à l'avance plusieurs numéros. et le currval contient le tout dernier, qui n'a pas forcément été encore attribué par un nexval !
Marsh Posté le 28-08-2003 à 09:24:06
Et ???
Y a une solution à ça ?
Marsh Posté le 28-08-2003 à 10:35:05
utiliser nextval et conserver sa valeur dans une variable pour quand tu en a besoin
Marsh Posté le 28-08-2003 à 16:43:39
MagicBuzz a écrit : utiliser nextval et conserver sa valeur dans une variable pour quand tu en a besoin |
Oui mais si le nextval, je l'utlise dans un INSERT...
Je peux pas l'utiliser, et mettre sa valeur dans une variable....
Marsh Posté le 11-09-2003 à 11:23:44
je ne comprend pas ce que tu viens d'écrire...
Par défaut, les séquences ORACLE sont créés avec l'attribut CACHE=20.
C'est une optimisation des perf. ie à l'invocation d'une séquence, 20 numéro sont flushés et utilisable sur SEQ.NextVal jusqu'il n'y en ai plus en mémoire et la rebelotte reflushage de 20 num.
Ce système est donc perf. mais gache des numéro de seq. dans le cas ou ta base est arrêtée et relance courrament car tu perds le cache à chaque fois.
le SEQ.CurrVal te donne la val courante de la SEQ, car il faut d'abord invoquer SEQ.NextVAl qui prend le prend num SEQ dispo
Marsh Posté le 25-08-2003 à 09:28:00
Voilà j'ai un code pl/sql, et j'aimerais faire un truc de ce genre :
(dans le DECLARE)
curr_idZone number(2);
(dans le BEGIN-END)
curr_idZone := SEQ_ZONE_GEO.currVal;
La séquence utilisée existe bien puisqu'elle est déjà utilisée ailleurs....
Je voudrais savoir si ce que je cherche à faire est possible ou non ???