Вот - на коленке нашёл :

s = "";
for select """" || rdb$field_name || """"
 from rdb$relation_fields
where rdb$relation_name = :rel_name
  and :def_flds like "," || rdb$field_name || ","
 into :fld
do if (s = "")
  then s = fld
  else s = s || ", " || fld;

s_from = s;
s_to   = s;

// добавляем остальные поля с транформациями, этот список постоянен,
// или передаётся "сверху"

s = "INSERT INTO " || :rel_name || " (" || :s_to || ") " || :s_from ||
    " FROM " || :rel_name || " WHERE " || s_where;

execute statement :s;


Кстати пятничные мысли :
Вот если б в триггере можно было б получить rdb$relation_name и назначать один триггер нескольким табличкам, то таким образом можно было-бы формировать лог изменений в виде SQL скрипта для того-же isql. Вот и элементарная репликация, однонаправленная, как нефиг делать на коленке. Ну и другие виды реплигации - дело техники...

With b/r. Gleb.

Ответить