Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];

Вниз

Вставка данных в две таблицы   Найти похожие ветки 

 
TL   (2009-01-15 09:39) [0]

Добрый день!

Суть вопроса такова:
Имеются две связанные таблицы:

Таблица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).

Буду рад проведеному ликбезу...


 
Sergey13 ©   (2009-01-15 09:58) [1]

> [0] TL   (15.01.09 09:39)
> IB5.x
А похуже ничего нет? Судя по отзывам - самая левая версия сервера.

> Буду рад проведеному ликбезу...
Суть идеи в том, что генерировать новое значение ключа можно прямо в тригере при вставке, а можно заранее, перед вставкой. И после этого оперировать этим значением при инсертах в дочерние таблицы.


 
TL   (2009-01-15 10:10) [2]

в тригере, для Таблица1, генерируется новое значение ключа ИД_Таблица1 перед вставкой, но, несовсем понимаю, как написать тригер, чтобы в нем, сразу же после сгенерированого ИД_Таблица1, делалась вставка данных в Таблица2 с этим NEW.ИД_Таблица1...


 
Sergey13 ©   (2009-01-15 10:14) [3]

> [2] TL   (15.01.09 10:10)
> в тригере, для Таблица1, генерируется новое значение ключа
> ИД_Таблица1 перед вставкой

В этом случае не надо для Т1 генерировать в тригере. Надо заранее. Т.е. в тригере должна стоять проверка
if :new.id is null then :new.id=GenId(tr1,1)


 
TL   (2009-01-15 10:29) [4]

ага...так оно и есть...
меня больше всего волнует, как сразу после того, как сгенерировали ключ в Т1, сделать вставку данных в Т2 ...

if  New.ИД_Таблица1 is null then New.ИД_Таблица1 = gen(ГенераторТ1,1);
/*хочу вставить значения в Т2*/
 ??????????
insert into Таблица2 (Ид_Таблица2, Ид_Таблица1, поле3, поле4...полеN) ?????


 
Медвежонок Пятачок ©   (2009-01-15 10:32) [5]

сказали же, сначала получаешь значение генератора, потом делаешь два инсерта с явным ключем.


 
Sergey13 ©   (2009-01-15 10:35) [6]

> [4] TL   (15.01.09 10:29)
> меня больше всего волнует, как сразу после того, как сгенерировали
> ключ в Т1, сделать вставку данных в Т2 ...

Cразу после того, как сгенерировали ключ в Т1 надо вставить запись в Т1. А вот потом вставлять уже в подчиненную Т2. Отдельным запросом.


 
TL   (2009-01-15 10:40) [7]

сгенерировали ключ,
сделали вставку данных в Т1,
как "запомнить" значение ИД_Таблица1, что бы его же вставить и в Таблица2 вторым запросом?


 
Медвежонок Пятачок ©   (2009-01-15 10:45) [8]

ид_таблица1 у тебя уже есть перед инсертом в обе таблицы


 
Sergey13 ©   (2009-01-15 10:48) [9]

> [7] TL   (15.01.09 10:40)
> сгенерировали ключ,
> сделали вставку данных в Т1
> как "запомнить" значение ИД_Таблица1, что бы его же вставить и в Таблица2 вторым запросом?

Т.е. до вставки в Т1 ты его помнил, а потом забыл?


 
TL   (2009-01-15 13:05) [10]

можно пример?


 
Sergey13 ©   (2009-01-15 13:18) [11]

> [10] TL   (15.01.09 13:05)

Пример чего? Ты сам пишешь только русско-язычную отсебятину вместо кода. Что конкретно и как конкретно не получается.


 
TL   (2009-01-15 13:37) [12]

Делаю первый 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?


 
Sergey13 ©   (2009-01-15 14:03) [13]

> [12] TL   (15.01.09 13:37)
> перед вставкой получаем id_table1

Как?


 
TL   (2009-01-15 14:15) [14]

if ( NEW.id_table1 is null ) then NEW.id_table1 = gen_id(gentable1,1);


 
Sergey13 ©   (2009-01-15 14:22) [15]

> [14] TL   (15.01.09 14:15)

В тригере? А надо ДО ВСТАВКИ в ОТДЕЛЬНОМ ЗАПРОСЕ из клиента.
В тригере идет ПРОВЕРКА на нул. Если тебе не нужен вставляемый ид-шник, то можно переложить его генерение на тригер. В твоем случае это не нужно. Нужно вставлять в запрос на вставку в Т1 заранее сгенеренное значение.


 
TL   (2009-01-15 15:00) [16]

будет ли корректным запрос с "клиента" , для получения ID:

select first 1 id_table1+1
from table_1
order by id_table1 desc

?


 
Sergey13 ©   (2009-01-15 15:02) [17]

> [16] TL   (15.01.09 15:00)
> будет ли корректным

С точки зрения синтаксиса будер корректно.
С точки зрения логики работы нет.
Если мне не изменяет память нужно спрашивать
select GenId(triger,1) from rdb$database


 
Виталий Панасенко(дом)   (2009-01-16 22:19) [18]


> Sergey13 ©   (15.01.09 15:02) [17]

Не обязательно..Просто в этой системной таблицы всегда(пока?) одна запись


 
Труп Васи Доброго ©   (2009-01-22 16:39) [19]

БЛин, ты хоть напиши где ты это пишешь...
Если это в ХП, то введи переменные и присвой им значения генераторов, а потом вставляй их куда угодно.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.005 c
2-1257950877
Alexey
2009-11-11 17:47
2010.01.03
Поток, передача параметра в onTerminated


15-1256910250
koha!
2009-10-30 16:44
2010.01.03
как избавится от этой заразы?


15-1257181639
Badevlad
2009-11-02 20:07
2010.01.03
Обсудить BDV DataHider 3.1


15-1257003526
stas
2009-10-31 18:38
2010.01.03
пустой exe определяется как троян


2-1258126527
zlo
2009-11-13 18:35
2010.01.03
Методы в record





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский