[PL/SQL] récupération d'un sequence.currval ?????

récupération d'un sequence.currval ????? [PL/SQL] - SQL/NoSQL - Programmation

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 ???

Reply

Marsh Posté le 25-08-2003 à 09:28:00   

Reply

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 :
 
(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 ???


Tu peux en faisant :
SELECT SEQ_ZONE_GEO.currval
into curr_idZone
from dual;


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
Reply

Marsh Posté le 25-08-2003 à 10:22:53    

tomlameche a écrit :


Tu peux en faisant :
SELECT SEQ_ZONE_GEO.currval
into curr_idZone
from dual;
 

Merci bcp :jap:

Reply

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;
 
 

Reply

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".
 
Sinon, tu peux en effet utiliser :
select nom_sequence.nextval from dual;
select nom_sequence.currval from dual;
 
 
 

Oui bien entendu... ;)  
Merci...

Reply

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

Reply

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 !

Reply

Marsh Posté le 28-08-2003 à 09:24:06    

Et ???
 
Y a une solution à ça ?


Message édité par liengy le 28-08-2003 à 09:24:25
Reply

Marsh Posté le 28-08-2003 à 10:35:05    

utiliser nextval et conserver sa valeur dans une variable pour quand tu en a besoin

Reply

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

Reply

Marsh Posté le 28-08-2003 à 16:43:39   

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed