bonjour,
je souhaite savoir s'il existe un moyen de recuperer la valeur d'une sequence courante mais dans toutes les sessions (la valeur au niveau du serveur), pas celle en cours dans la session ?
le currval ne convient pas .
cordialement
Version imprimable
bonjour,
je souhaite savoir s'il existe un moyen de recuperer la valeur d'une sequence courante mais dans toutes les sessions (la valeur au niveau du serveur), pas celle en cours dans la session ?
le currval ne convient pas .
cordialement
Oui, Non, peut être.
Mais, la question est pour quoi faire ?
je veux recuperer la valeur de la sequence quelque soit la session
Ça je l’ai déjà compris.
Mais la question demeure : à quoi ça sert, pour quoi faire. Vous avez conscience que ce que vous demandez n’est pas habituel.
Bonjour,
Le but des sequences est de fournir un numéro unique à chaque fois qu'on l’interroge.
Cordialement,
Franck.
je veux savoir si une autre session a utilisé la sequence apres mon utilisation, qui peut durer un certain temps, et jusqu' à quelle valeur .
Vous ne répondez toujours pas à la question, quelle est la finalité de votre besoin ?
pour moi c'est clair ce que je demande.
la finalité en gros, c'est pour detecter une utilisation de la sequence par d'autres sessions clientes afin de declencher des synchronisations par la suite s'il y a decalage entre ma valeur courante et celle de la sequence (global)
C'est déjà un bon début ! Mais malgré vos efforts, c'est comme les collègues, je ne vois pas non plus à quoi une telle mécanique peut bien réellement servir. Je pense que vous êtes sur une fausse piste.
Sur le plan purement technique, il existe la vue SYS.V_$SEQUENCES, qui présente les séquences ayant été appelées au moins une fois depuis le démarrage de l'instance.
Sa colonne NEXTVALUE correspond presque directement à ce que vous cherchez : c'est la prochaine valeur qui serait générée si quelqu'un faisait un NEXTVAL. Vous n'avez plus qu'à soustraire l'incrément pour connaître la dernière valeur réellement générée.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 connect / as sysdba drop sequence scott.seq; create sequence scott.seq start with 2 increment by 5; select sequence_owner, sequence_name, nextvalue, highwater from v$_sequences where sequence_name='SEQ'; --> Notre séquence n'apparaît pas : elle n'a pas encore été appelée select scott.seq.nextval from dual; --> 2 select sequence_owner, sequence_name, nextvalue, highwater from v$_sequences where sequence_name='SEQ'; SEQUENCE_OWNER SEQUENCE_NAME NEXTVALUE HIGHWATER ----------------------------------- ------------------------------ ---------- ---------- SCOTT SEQ 7 102
Attention, dès qu'un cache de séquence est mis en place, ça ne fonctionne plus (test en 11gR2 => v$sequences n'existe plus)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 SQL> create sequence seq_toto increment by 12 minvalue 0 start with 0 cache 100 nocycle; SÚquence crÚÚe. SQL> select seq_toto.nextval from dual; NEXTVAL ---------- 0 SQL> select * from DBA_SEQUENCES where SEQUENCE_NAME='SEQ_TOTO'; SEQUENCE_OWNER SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER ------------------------------ ------------------------------ ---------- ---------- ------------ - - ---------- ----------- SYS SEQ_TOTO 0 1,0000E+28 12 N N 100 1200
La table qui décrit les séquences est sys.seq$ v$sequences est une vue sur cette table (jointe avec d'autres).
Code:
1
2
3
4
5
6 SQL> select * from sys.seq$ where OBJ#=(select object_id from dba_objects where object_name='SEQ_TOTO') 2 / OBJ# INCREMENT$ MINVALUE MAXVALUE CYCLE# ORDER$ CACHE HIGHWATER AUDIT$ FLAGS ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -------------------------------------- ---------- 30036 12 0 1,0000E+28 0 0 100 1200 -------------------------------- 0
Mais, elle ne contient pas la valeur nextval mais seulement le HighWater :D
Et ça repose la question de départ, à quoi ça doit servir et dans quelle conditions ?
Par ailleurs, la vue dynamique (attention ce n'est pas une vue "normale") v$_sequences n'est pas documentée :aie:
La vue existe toujours en 11gR2
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 sys@DIANA> select banner from v$version 2 ; BANNER --------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production PL/SQL Release 11.2.0.1.0 - Production CORE 11.2.0.1.0 Production TNS for 32-bit Windows: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production sys@DIANA> SELECT sequence_owner, sequence_name, nextvalue, highwater 2 FROM v$_sequences 3 WHERE sequence_name='SEQ'; aucune ligne sélectionnée