Pl:
create table sequences (
name varchar(50),
value integer
);
create function seq_nextval( p_name varchar(50) )
returns integer
modifies sql data
begin
declare retval integer;
declare lock_flag integer;
select get_lock( concat('USER_SEQ', p_name), 10 )
into lock_flag;
if lock_flag = 1 then
update sequences
set value = value + 1
where name = p_name;
select value
into retval
from sequences
where name = p_name;
else
set retval = null;
end if;
select release_lock( concat('USER_SEQ', p_name) )
into lock_flag;
return retval;
end;