-
Добрый день!
Суть вопроса такова: Имеются две связанные таблицы:
Таблица1 (Ид_Таблица1, поле1, поле2, ...полеN) Таблица2 (Ид_Таблица2, Ид_Таблица1, поле3, поле4...полеN)
Связь между ними : Таблица1.Ид_Таблица1 = Таблица2.Ид_Таблица1
Для каждой таблицы имеются триггеры и генераторы.
Необходимо, что бы при вставке данных(Ид_Таблица1, поле1, поле2, ...полеN) в "Таблица1", в "Таблица2" тоже вносились данные(Ид_Таблица2, Ид_Таблица1, поле3, поле4...полеN).
Буду рад проведеному ликбезу...
-
> [0] TL (15.01.09 09:39) > IB5.x А похуже ничего нет? Судя по отзывам - самая левая версия сервера.
> Буду рад проведеному ликбезу... Суть идеи в том, что генерировать новое значение ключа можно прямо в тригере при вставке, а можно заранее, перед вставкой. И после этого оперировать этим значением при инсертах в дочерние таблицы.
-
в тригере, для Таблица1, генерируется новое значение ключа ИД_Таблица1 перед вставкой, но, несовсем понимаю, как написать тригер, чтобы в нем, сразу же после сгенерированого ИД_Таблица1, делалась вставка данных в Таблица2 с этим NEW.ИД_Таблица1...
-
> [2] TL (15.01.09 10:10) > в тригере, для Таблица1, генерируется новое значение ключа > ИД_Таблица1 перед вставкой
В этом случае не надо для Т1 генерировать в тригере. Надо заранее. Т.е. в тригере должна стоять проверка if :new.id is null then :new.id=GenId(tr1,1)
-
ага...так оно и есть... меня больше всего волнует, как сразу после того, как сгенерировали ключ в Т1, сделать вставку данных в Т2 ...
if New.ИД_Таблица1 is null then New.ИД_Таблица1 = gen(ГенераторТ1,1); /*хочу вставить значения в Т2*/ ?????????? insert into Таблица2 (Ид_Таблица2, Ид_Таблица1, поле3, поле4...полеN) ?????
-
сказали же, сначала получаешь значение генератора, потом делаешь два инсерта с явным ключем.
-
> [4] TL (15.01.09 10:29) > меня больше всего волнует, как сразу после того, как сгенерировали > ключ в Т1, сделать вставку данных в Т2 ...
Cразу после того, как сгенерировали ключ в Т1 надо вставить запись в Т1. А вот потом вставлять уже в подчиненную Т2. Отдельным запросом.
-
сгенерировали ключ, сделали вставку данных в Т1, как "запомнить" значение ИД_Таблица1, что бы его же вставить и в Таблица2 вторым запросом?
-
ид_таблица1 у тебя уже есть перед инсертом в обе таблицы
-
> [7] TL (15.01.09 10:40) > сгенерировали ключ, > сделали вставку данных в Т1 > как "запомнить" значение ИД_Таблица1, что бы его же вставить и в Таблица2 вторым запросом?
Т.е. до вставки в Т1 ты его помнил, а потом забыл?
-
можно пример?
-
> [10] TL (15.01.09 13:05)
Пример чего? Ты сам пишешь только русско-язычную отсебятину вместо кода. Что конкретно и как конкретно не получается.
-
Делаю первый Insert: Insert into table_1 (ident, field_date, field_number, field_date1, field_number1) values (:ident, :date, :number, :date1, :number1)
перед вставкой получаем id_table1
Делаю второй Insert: Insert into Table_2 (id_table1, field_naim, field_count, field_price ) values (:id, :naim, :fc, :fp)
как в id присвоить полученное значение из триггера, т .е id_table1?
-
> [12] TL (15.01.09 13:37) > перед вставкой получаем id_table1
Как?
-
if ( NEW.id_table1 is null ) then NEW.id_table1 = gen_id(gentable1,1);
-
> [14] TL (15.01.09 14:15)
В тригере? А надо ДО ВСТАВКИ в ОТДЕЛЬНОМ ЗАПРОСЕ из клиента. В тригере идет ПРОВЕРКА на нул. Если тебе не нужен вставляемый ид-шник, то можно переложить его генерение на тригер. В твоем случае это не нужно. Нужно вставлять в запрос на вставку в Т1 заранее сгенеренное значение.
-
будет ли корректным запрос с "клиента" , для получения ID:
select first 1 id_table1+1 from table_1 order by id_table1 desc
?
-
> [16] TL (15.01.09 15:00) > будет ли корректным
С точки зрения синтаксиса будер корректно. С точки зрения логики работы нет. Если мне не изменяет память нужно спрашивать select GenId(triger,1) from rdb$database
-
> Sergey13 © (15.01.09 15:02) [17]
Не обязательно..Просто в этой системной таблицы всегда(пока?) одна запись
|