Bonjour
voici mon problème simplifié :
j'ai une séquence de code numériques , générés par un trigger 'classique'
CREATE TABLE TEST
( CODE BIGINT NOT NULL, // générateur
....
)
je souhaite retrouvé les trous dans cette séquence pour cela j'utilise
la requête suivante
ce qui me donne (test) le résultat escompté
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT CODE AS C, CAST(rdb$get_context('USER_TRANSACTION', 'row#') AS BIGINT) as r, rdb$set_context('USER_TRANSACTION', 'row#', COALESCE(cast(rdb$get_context('USER_TRANSACTION', 'row#') as integer), 0) + 1) AS X FROM TEST ORDER BY 1
maintenant je souhaiterais Obtenir le premier enregistrement ou C est différent de R ce qui dans mon cas donnerai C=4 R=3 .C R X
--------------
1 1 0
2 2 1
4 3 1
5 4 1
je me suis dit qu'en passant par une CTE cela devrait fonctionner mais , surprise , pas moyen
ou est mon erreur ? y a t-il un autre moyen ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 WITH T1 AS (SELECT CODE AS C, CAST(rdb$get_context('USER_TRANSACTION', 'row#') AS BIGINT) as r, rdb$set_context('USER_TRANSACTION', 'row#', COALESCE(cast(rdb$get_context('USER_TRANSACTION', 'row#') as integer), 0) + 1) AS X FROM TEST ORDER BY 1) SELECT * FROM T1 <---- me donne le m^me résultat : NORMAL ^^ SELECT * FROM T1 WHERE C<>R <------ renvoi rien SELECT * FROM T1 t WHERE t.C<>t.R <------ renvoi rien
Partager