Bonjour,
Comment faire pour utiliser un numéro de séquence directement (currval) dans un update sans passer par une variable intermédiaire (et donc sans écrire de pl/sql).
D'après la doc oracle c'est impossible. Connaissez-vous un astuce?
Merci
Version imprimable
Bonjour,
Comment faire pour utiliser un numéro de séquence directement (currval) dans un update sans passer par une variable intermédiaire (et donc sans écrire de pl/sql).
D'après la doc oracle c'est impossible. Connaissez-vous un astuce?
Merci
Bonjour,
Quelle est ta version oracle ?
de quelle doc oracle s'agit -il ?
parce qu'on peut bien faire
Code:update table1 set column1=ma_sequence.currval
tu peux n'utiliser ke du code sql avec les sequence.
ces dexu requetes sont tout a fait tolerées en langage sql
ouCode:
1
2 update toto set col1= seq_test.nextval;
Code:
1
2 update toto set col1= seq_test.currval;
Sauf que pour obtenir le currval il faut avoir appeler nextval avant :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 SQL> select s.currval from dual; select s.currval from dual * ERREUR Ó la ligne 1 : ORA-08002: sÚquence S.CURRVAL pas encore dÚfinie dans cette session SQL> select s.nextval from dual; NEXTVAL ---------- 2 SQL> select s.currval from dual; CURRVAL ---------- 2
Bonjour,
J'utilise oracle enterprise 9.2.0.7. le message d'erreur est:
"ORA-02287: sequence number not allowed here"
quand j'execute le requête suivante:
La référence de la doc estCode:
1
2
3 update table set col1 = seq1.curval where col2 = seq2.curval
Oracle® Database SQL Reference
10g Release 2 (10.2)
Part Number B14200-02
Code:
1
2
3
4
5
6
7
8
9
10 Restrictions on Sequence Values You cannot use CURRVAL and NEXTVAL in the following constructs: * A subquery in a DELETE, SELECT, or UPDATE statement * A query of a view or of a materialized view * A SELECT statement with the DISTINCT operator * A SELECT statement with a GROUP BY clause or ORDER BY clause * A SELECT statement that is combined with another SELECT statement with the UNION, INTERSECT, or MINUS set operator * The WHERE clause of a SELECT statement * The DEFAULT value of a column in a CREATE TABLE or ALTER TABLE statement * The condition of a CHECK constraint
Peut être comme ça :
Edit : ne marche que si le CACHE est à 1 ou 0 (CREATE SEQUENCE MYSEQ NOCACHE), alors le last_number correspond à CURRVAL + 1. Mais bon, c'est un peu barbare de faire ça. En même temps on ne devrait jamais avoir à faire ta requête, sinon ça doit être un problème de conception...Code:
1
2
3
4 UPDATE TABLE SET col1 = seq1.curval WHERE col2 = (select last_number - 1 from ALL_SEQUENCES where sequence_name = 'seq2')
Quelques infos par ici : http://www.dbforums.com/oracle/10082...st_number.html