Форум: "Базы";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
ВнизКак внести данные сразу в главную и дочернюю таблицы. В сетевой Б Найти похожие ветки
← →
Sanya_BBB (2006-10-04 19:41) [0]Есть две таблицы, первичная и дочерняя. Дочерняя связана с первичной по внешнему ключу. Первичные ключи обоих таблиц это числовые значения которые формируются и добавляются тригерами так:
Create generator g_MAIN_ID;
Set generator g_MAIN_ID to 1;
create trigger t_MAIN_ID for MAIN
Active
Before Insert
As
begin
new.id = gen_id(g_MAIN_ID, 1);;
end;
Create generator g_SLAVE_ID;
Set generator g_SLAVE_ID to 1;
create trigger t_SLAVE_ID for SLAVE
Active
Before Insert
As
begin
new.id = gen_id(g_SLAVE_ID, 1);;
end;
Как ввести данные сначала в главную таблицу а затем в дочернюю.Данные вводятся в одной форме. То есть проблема как узнать первичный ключ первой таблицы и сразу же ввести данные во вторую таблицу(дочернюю). База сетевая!!!
← →
Petr V. Abramov © (2006-10-04 21:09) [1]я б через stored процедуру сделал и убрал бы триггеры
← →
Виталий Панасенко (2006-10-04 21:27) [2]Обычно ID узнают на клиенте... Потом подставляют в дочернюю.
← →
Desdechado © (2006-10-04 22:02) [3]Petr V. Abramov © (04.10.06 21:09) [1]
> я б через stored процедуру сделал и убрал бы триггеры
Без триггеров червато. Хотя бы тем, что минуя процедуры кто-то шибко шустрый можеттуда что-то вписать. после чего значенияиз генератора и в таблице фактические могут вступить в конфликт.
Я обычно делаю так:
1. стартую транзакцию
2. записываю данные в главную таблицу
3. узнаю ID путем перезапроса по ключевым полям
4. вставляю в подчиненную таблицу данные
5. подтверждаю транзакцию
← →
Petr V. Abramov © (2006-10-04 22:24) [4]> Без триггеров червато. Хотя бы тем, что минуя процедуры кто-то шибко
> шустрый можеттуда что-то вписать.
так грантами шибко шустрые отстреливаются
P.S. еснно, при чуть автоматизированной системе раздаче этих самых грантОв. Иначе - согласен
← →
Desdechado © (2006-10-04 22:26) [5]шибко шустрый может и иметь права, на то он и шустрый
при этом думать, что он еще и умный, и лезть в БД напрямую, минуя процедуры и UI
← →
Petr V. Abramov © (2006-10-04 22:56) [6]> шибко шустрый может и иметь права, на то он и шустрый
> при этом думать, что он еще и умный,
не давать прав никому, кроме как после третьего прошения :)
а на самом деле, просто двать права только на процедуры
← →
Johnmen © (2006-10-04 23:33) [7]Самое нетрудозатратное и нересурсоёмкое во всех смыслах Виталий Панасенко (04.10.06 21:27) [2].
← →
Petr V. Abramov © (2006-10-05 00:00) [8]> Самое нетрудозатратное и нересурсоёмкое во всех смыслах
> Обычно ID узнают на клиенте...
и дальше-то? два вызова insert (с их, вызовов, написанием)? не от нефиг же делать всякие рлскули с их младшими братьями придуманы-то
← →
Johnmen © (2006-10-05 09:22) [9]
> и дальше-то?
Что дальше?
> два вызова insert (с их, вызовов, написанием)?
Ну, наверное... А что?
> не от нефиг же делать всякие рлскули с их младшими братьями
> придуманы-то
О чём это, я не понял...
← →
Petr V. Abramov © (2006-10-05 10:06) [10]> Ну, наверное... А что?
так букв меньше один раз процедуру написать и вызвать, чем 2 триггера и да инсерта
> О чём это, я не понял...
pl/sql лениво было раскладку переключать :)
← →
Sergey13 © (2006-10-05 10:18) [11]> [10] Petr V. Abramov © (05.10.06 10:06)
А как в процедуру передать шапочную часть документа и табличную (позиций на несколько)? Массивом (просто я так никогда не делал, потому и интересуюсь)? Кроме того на добавление в деталь к уже существующей шапке - отдельную процу писать?
← →
Сало (2006-10-05 13:34) [12]1. Процедура
2. Execute block
3. Клиент
4. Триггер на updatable view
5. returning c любым из вышеприведенных вариантов.
Вопрос чисто факовый, зачем вы тут разглагольствуете?
← →
Johnmen © (2006-10-05 13:38) [13]Действительно. Разглагольствовать о каких-то неуместных updatable view и Оракле, право, не стОит...
← →
Сало (2006-10-05 13:51) [14]
> Действительно. Разглагольствовать о каких-то неуместных
> updatable view и Оракле, право, не стОит...
>
Эй, дядя. Релизноты читай, перед вынесением очередного бреда. Все в рамках firebird.
← →
Johnmen © (2006-10-05 13:58) [15]А ты, мой таинственный друг, читай вопрос. Целиком.
← →
Desdechado © (2006-10-06 11:23) [16]Petr V. Abramov © (04.10.06 22:56) [6]
Под слишком шустрым и "типа умным" я имел ввиду, например, админа заказчика, который имея все права, но не имея глубокого понимания модели данных, заложенных в конкретную БД, шаловливыми ручками может много чего сделать...
Прецеденты в моей практике не единичные.
← →
ЮЮ © (2006-10-06 11:33) [17]Данные вводятся в одной форме.
В DBGrid-е или не DB ?
Если не в DB, то все в твоих руках.
Какого типа DataSet?
Кстати gen_id(g_SLAVE_ID, 1) можно вызвоть и на клинте, до вставки, а в триггере прописывать только в случае, если он не установлен
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c