Пришел к этому посту, потому что я искал решение, чтобы сделать то же самое, но без жесткого кодирования имен полей, потому что поля могут быть добавлены / удалены и не хотят помнить, чтобы обновить процедуру записи записи.
Пройдя некоторое время по поиску, я нашел решение:
select cast(list(trim(RDB$FIELD_NAME)) as varchar(10000))
from RDB$RELATION_FIELDS
where RDB$RELATION_NAME = 'YOUR_TABLE'
and RDB$FIELD_NAME not in ('ID') -- include other fields to NOT copy
into :FIELD_NAMES;
NEW_ID = next value for YOUR_TABLE_ID_GENERATOR;
execute statement '
insert into YOUR_TABLE (ID,' || FIELD_NAMES || ')
select ' || cast(:NEW_ID as varchar(20)) || ',' ||
FIELD_NAMES || '
from YOUR_TABLE
where ID = ' || cast(:ID_OF_RECORD_TO_COPY as varchar(20));
Надеюсь, это сэкономит время для всех, кто сталкивается с этой проблемой!