( hal | 2010. 03. 25., cs – 08:55 )

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;