Форум: "Базы";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
ВнизКак вставить данные одновременно в главную и подчиненную таблицы Найти похожие ветки
← →
Gennadiy (2003-10-01 16:14) [0]Уважаемые мастера!!!!
Подскажите пожалуйста?
У меня есть две таблицы:
1. Таблица Employees с полями (таблица хранит данные о сотрудниках)
EMPL_ID - ключевое поле
EMPL_FIO -ФИО сотрудника
EMPL_SALARY - заработная плата сотрудника
2. Таблица STORY c полями (таблица хранит данные о истории зарплат сотрудников).
STORY_ID - ключевое поле
STORY_EMPL_IDE - ссылка на таблицу EMPLOYEES
STORYDATE-дата с новой з.п.
STORYSUMM-новая з.п.
Данные таблицы созданы на сервере INTERBASE. Так вот я не знаю
как одновременно (для пользователя) вставить данные в таблицу Story при создании новой записи в таблицe EMPLOYEES в пределах одной транзакции если значение ключевого поля в таблице EMPLOYEES (для вставки его значения в поле STORYEMPL_IDE таблицы STORY) появиттся только после Transaction.Commit????
← →
Андрей_ (2003-10-01 17:26) [1]Каким образом Вы создаете ключевое поле?
Если с помощью генератора то его приращение происходит вне транзакции.
← →
Sergey_Masloff (2003-10-01 17:31) [2]Все нормальные пацаны ;-) получают значения ключей ДО вставки записей а не в триггере во время вставки. Делай и ты также.
← →
Gennadiy (2003-10-01 18:23) [3]Я поле создаю с помощью триггера перед вставкой
← →
Vasya_Buterbrodov (2003-10-01 18:57) [4]А почему, собственно, "нормальные пацаны получают значения ключей ДО вставки, а не в триггере..." ???
Чем плох вариант new.ID= gen_id(...) в триггере before_insert?
← →
Sergey_Masloff (2003-10-01 18:58) [5]Vasya_Buterbrodov [4]
читай тему обсуждения и поймешь ;-)
← →
MaxDDinc (2003-10-01 21:54) [6]Создай такую процедуру:
CREATE PROCEDURE PRC_INS_EMPLOYEES_STORY (
EMPL_FIO VARCHAR(16),
EMPL_SALARY VARCHAR(16),
STORYDATE VARCHAR(8),
STORYSUM VARCHAR(16)
) AS
DECLARE VARIABLE ID_NEW INTEGER;
BEGIN
ID_NEW = GEN_ID(GEN_EMPLOYEES, 1);
insert into EMPLOYEES
(EMPL_ID, EMPL_FIO, EMPL_SALARY)
values
(:ID_NEW, :EMPL_FIO, :EMPL_SALARY);
insert into STORY
(STORY_ID, STORY_EMPL_ID, STORYDATE, STORYSUMM)
values
(1, :ID_NEW, :STORYDATE, :STORYSUMM);
END
Здесь генеришь ID_NEW только для EMPLOYEES, а в STORY создай свой тригер BEFORE_INSERT
Что непонятно, спрашивай
:)
← →
Deniz (2003-10-02 08:40) [7]>Vasya_Buterbrodov (01.10.03 18:57) [4]
>А почему, собственно, "нормальные пацаны получают значения ключей ДО вставки, а не в триггере..." ???
Чем плох вариант new.ID= gen_id(...) в триггере before_insert?
Плох только тем, что надо поменять на
if (new.id is null) then gen_id(...);
Во вторых, при добавлении записи на клиенте невозможно сделать Refresh только что вставленной записи, для возможного получения значений полей измененных тригером, например если в триггере есть запись типа:
new.update_date = Current_Date;
new.update_user = Current_User;
и т.д.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c