Потребовалось сделать импорт-экспорт связки мастер-деталь от т.н. УБД в т.н. 
ЦБД. Решил, чтоб не делать самописный импорт, воспользоваться isql. Поскольку 
при добавлении мастера его ID еще не известен (он генерируется триггером BI), 
то неизвестно, на какой ID вешать детали. Воспользовался EXECUTE BLOCK. Образец 
выгружаемого скрипта (сильно упрощен):
---------------------------------------------------------------------------------------------------------------------------------------
SET BAIL ON;
SET SQL DIALECT 3;
SET TERM ^ ;

EXECUTE BLOCK
AS
DECLARE IDCL BIGINT;
BEGIN

-- это мастер
INSERT INTO ANKETA (F, I, O, SEX) VALUES ('ИВАНОВ', 'ИВАН', 'ИВАНОВИЧ', 'м') 
RETURNING ID INTO :IDCL;

-- это детали (всего около 20)
INSERT INTO ACTIVECAR (id_client, ID_CAR, MARK, YEAROUT, IS_PRIVATE) VALUES 
(:idcl, 'ч 888 зс', 'Мерседес', '2001-01-01', 't');
INSERT INTO CONTACTS (id_client, CONTACT_TYPE, VALUE_CONTACT) VALUES (:idcl, 3, 
'89236138516');
INSERT INTO DOCUMENTS (id_client, DOC_TYPE, SER, NUM, DATE_DELIVERY, GIVE) 
VALUES (:idcl, 1, '3200', '962174', '2001-07-19', 'РОВД Энска');

END^
COMMIT WORK^

-- и таких блоков столько, сколько встретится мастеров

SET TERM ; ^

---------------------------------------------------------------------------------------------------------------------------------------
Это уже готово и работает. Числа и даты выгружаются в скрипт в универсальном 
формате, так что проблем с региональными настройками не будет.
Что скажете? Нормальный вариант или можно сделать лучше и проще? Если можно, то 
в каком направлении смотреть?

Ответить