Subject | Re: [firebird-support] Get/set context in derived table context |
---|---|
Author | Walter R. Ojeda Valiente |
Post date | 2015-03-20T01:21:59Z |
If you can read Spanish, this article shows several methods for having row numbers in the SELECT.
Greetings.
Walter.
On Thu, Mar 19, 2015 at 5:28 AM, masberg@... [firebird-support] <firebird-support@yahoogroups.com> wrote:Hi all,
I have the need to implement something like a row number and read the last thread about the autoincrement number which also led me to this FAQ:
http://www.firebirdfaq.org/faq343/I now tried something like this:
select
cast(rdb$get_context('USER_TRANSACTION', 'row#2') as integer) as row_number,
rdb$set_context('USER_TRANSACTION', 'row#2',
coalesce(cast(rdb$get_context('USER_TRANSACTION', 'row#2') as integer), 0) + 1) as SET_CONTEXT,
<other columns>
from mytable
Which works fine. The first thing I now did is to create a derived table to get rid of the SET_CONTEXT part. I now experienced something very strange to me.
When I did this:
select s.* from
(select
cast(rdb$get_context('USER_TRANSACTION', 'row#2') as integer) as row_number,
rdb$set_context('USER_TRANSACTION', 'row#2',
coalesce(cast(rdb$get_context('USER_TRANSACTION', 'row#2') as integer), 0) + 1) as SET_CONTEXT,
<other columns>
from mytable) s
all is fine and row numbers are fine.
But when I explicitely call the individual rows like this;
select
s.row_number,
s.<other columns>
from
(select
cast(rdb$get_context('USER_TRANSACTION', 'row#2') as integer) as row_number,
rdb$set_context('USER_TRANSACTION', 'row#2',
coalesce(cast(rdb$get_context('USER_TRANSACTION', 'row#2') as integer), 0) + 1) as SET_CONTEXT,
<other columns>
from mytable)
then the row numbers have all the same value namely the last counter position (highest last value).
Am I doing something wrong?
Kind regards Christian