Доброе время суток, форумчане.
Есть таблица устройств (
DEVICE) в БД на
FireBird (с полями «
Наименование», «
Тип», «
Зав.номер» и т.д.) в которую из
Excel экспортируются данные (устройства).
В БД добавилась вторая таблица «
Человеко/часы» (
NORM_HOURS), в которой нужно
содержать только поля «
Наименование» и «
Тип» этих устройств ну и еще некоторые поля отличные от полей в DEVICE.
Т.е. в
NORM_HOURS должны содержаться только
уникальные устройства по оговоренным двум полям.
После экспорта устройств из файла в
DEVICE, я делаю операцию «
MERGE», для таблицы
NORM_HOURS, чтоб эти устройства появились в
NORM_HOURS.
Код:
merge into NORM_HOURS nh using DEVICES d on ((nh.NAME_DEVICE=d.NAME_DEVICE and nh.TYPE_DEVICE=d.TYPE_DEVICE))
when matched then
update set nh.NAME_DEVICE=d.NAME_DEVICE, nh.TYPE_DEVICE=d.TYPE_DEVICE
when not matched then
insert (nh.ID, nh.NAME_DEVICE, nh.TYPE_DEVICE, nh.USER_ID, nh.DEPARTMENT_ID, nh.TYPE_INPUT)
values (GEN_ID(GEN_ID_NORM_HOURS, 1), d.NAME_DEVICE, d.TYPE_DEVICE, 1, 2, 3)
Вопросы по данной теме:
1. можно ли провести операцию «MERGE» делать не для всей таблицы DEVICE, а только для некоторых ее строк, скажем в которых d.PROPOSAL_ID=7 например?
2. если вдруг у меня d.TYPE_DEVICE пусто, а d.NAME_DEVICE заполнено, то такие строки продолжают вставляться, при повторном проведении скрипта (не смотря на то, что они в NORM_HOURS уже есть), можно ли как-нибудь избавиться от повторной вставки?
3. и правильно ли будет если я из скрипта уберу строки:
Код:
...when matched then update set nh.NAME_DEVICE=d.NAME_DEVICE, nh.TYPE_DEVICE=d.TYPE_DEVICE
? Просто я НЕ хочу обновлять те строки в NORM_HOURS, которые уже в ней есть