all,
I have need to simulate the somewhat unique behavior/properties of an Oracle
sequence object in MySQL (obviously for porting legacy code).
I have come up w/the following solution which seems to work but wanted to
run it by the collective to see if I failed to consider anything:
create table sequence_name (
currval bigint unsigned
)
engine=myisam
;
insert into sequence_name values(0);
#add insert/delete triggers to prevent insert/delete additional rows - not
worried about that for testing
delimiter //
create function sequence_name (i_pseudo char(7))
returns bigint unsigned
modifies sql data
deterministic
begin
declare o_return bigint unsigned;
declare v_lock tinyint unsigned;
select get_lock('sequence_name', 10) into v_lock;
if i_pseudo='nextval' then
update sequence_name set currval=currval+1;
end if;
select currval into o_return from sequence_name limit 1;
select release_lock('sequence_name') into v_lock;
return o_return;
end;
//
delimiter ;
select sequence_name('nextval');
#returns sequence_name.currval++ - tested/works
select sequence_name('currval');
#returns sequence_name.currval - tested/works
can see any potential bugs w/this approach?
thanks!