Skip to content

Instantly share code, notes, and snippets.

@martinusso
Created February 11, 2014 13:57
Show Gist options
  • Save martinusso/8935270 to your computer and use it in GitHub Desktop.
Save martinusso/8935270 to your computer and use it in GitHub Desktop.
update generators values ​​according to the primary key field.
execute block
as
declare variable trigger_name varchar(32);
declare variable table_name varchar(32);
declare variable generator_name varchar(32);
declare variable last_id integer;
declare variable sql varchar(100);
declare variable pk_field_name varchar(32);
begin
for
select
t.rdb$trigger_name,
t.rdb$relation_name,
d.rdb$depended_on_name
from
rdb$triggers t
inner join rdb$dependencies d on (d.rdb$dependent_name = t.rdb$trigger_name and d.rdb$depended_on_type = 14)
where
t.rdb$system_flag = 0
order by
t.rdb$trigger_name
into
:trigger_name,
:table_name,
:generator_name
do begin
select distinct
s.rdb$field_name
from
rdb$indices i
left join rdb$index_segments s on i.rdb$index_name = s.rdb$index_name
left join rdb$relation_constraints rc on rc.rdb$index_name = i.rdb$index_name
left join rdb$dependencies d on d.rdb$depended_on_name = rc.rdb$relation_name
where
rc.rdb$constraint_type = 'PRIMARY KEY'
and d.rdb$dependent_name = :trigger_name
into
:pk_field_name;
sql = 'SELECT COALESCE(MAX(' || :pk_field_name || '), 0) FROM ' || :table_name;
execute statement :sql into :last_id;
-- update generator's value
sql = 'ALTER SEQUENCE ' || :generator_name || ' RESTART WITH ' || (:last_id) || ';';
execute statement :sql;
suspend;
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment