powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / одновременная вставка данных в master и detail
20 сообщений из 45, страница 2 из 2
одновременная вставка данных в master и detail
    #39326805
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedormooreУ меня есть два варианта вставки данных, 1 - когда я знаю id master и могу его вставить в datail 2 - когда я не знаю id master, но мне нужно его узнать для того чтобы вставить в datail.И в чем именно затруднение? В получении id, которого не знаешь?
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326806
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedormoore,

вот это будет работать только если коннект всего один. Если в базе кто-то ещё делает вставки записей помимо вашего единственного скрипта, то способ не годится.

Код: sql
1.
2.
3.
4.
5.
EXECUTE PROCEDURE NEW_PROCEDURE1('1', '33000', 'be0ad759-ee6a-4a21-b5f9-ed71f1eba54c00', 'Новое оборудование');
EXECUTE PROCEDURE NEW_PROCEDURE2('1', GEN_ID(SEQ_1, 0), '13.10.2016', 'От 13.10.2016 № 1', 'Поступления');
EXECUTE PROCEDURE NEW_PROCEDURE2('1', GEN_ID(SEQ_1, 0), '13.10.2016', 'В составе Новое оборудование, в составе Новое оборудование', 'В составе');
....
COMMIT WORK;
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326809
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedormooreПРОСТИТЕ НАКИПЕЛО...Это не мы такие... Как говорится - "Правильно поставленный вопрос - половина ответа".
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326822
fedormoore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev, да, не знаю как получить. Пробовал использовать execute block (есть возможность объявить переменную далее после вставки данных вернуть id master, присвоит переменной, использовать значение переменной для вставки в datail) но столкнулся с ограничениями
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326826
fedormoore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, спасибо за совет, но про это я тоже читал, что при многопользовательском режиме будет косяк
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326827
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedormooreне вижу я связи как мне это может помочь сохранить ссылочную целостность.Транзакция - это вообще единственная вещь, которая может сохранить ссылочную целостность.

Подсказка - в скрипте IBExpert выключи автокоммит после каждого statement, выключи продолжение выполнения скрипта после ошибки.
И "не бзди".
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326830
fedormoore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSery, выключил, как теперь получить id master?
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326835
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedormoore,

вот тебе ещё рецепт

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
INSERT INTO gtt(...) VALUES (<данные подчинённой таблицы>);
...
INSERT INTO gtt(...) VALUES (<данные подчинённой таблицы>);

EXECUTE BLOCK
AS
DECLARE ID BIGINT;
BEGIN
  INSERT INTO master (...) VALUES (<данные главной таблицы>) RETURNING ID INTO :ID;
  INSERT INTO detail(...) SELECT :ID, ... FROM gtt;
END

COMMIT WORK;



gtt должна быть по структуре аналогична detail и иметь тип ON COMMIT DELETE ROWS.
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326849
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Применить GUID для ID или выделить непересекающиеся диапазоны? Коль уж хочется всенепременнейше скриптом, а не куском программы, где можно передать параметром вновь сгенерированный id.

Честно я пока не вижу никаких затруднений, "нафтыкать" в базу в одной транзакции тыщонку-другую записей, да тьфу, размазать и забыть. Видимо поэтому и "накипело".
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326852
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedormoorerdb_dev, да, не знаю как получить.Я, конечно, не экстрасенс, но могу предположить, что ты пытаешься сделать нечто вроде импорта/экспорта данных из одной базы в другую с определением соответствия по UID. Нет ничего проще! Создаешь две временные таблицы с временем жизни строк в пределах транзакции (к примеру master_import и detail_import), в которые ты будешь накидывать строки импорта без изменений. В двух вложенных циклах FOR SELECT INTO DO хранимой процедуры крутишь эти данные временных таблиц. Во внешнем цикле делаешь добавление в таблицу master с получением нового ID, во вложенном цикле делаешь добавление в detail с полученным из master идентификатором.
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326883
MikeDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedormoore, ну тогда пишешь скрипт что типа такого:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
execute block as begin
 insert into master(..) values(..) returning id into :id;
 rdb$set_context('USER_TRANSACTION','MASTER_ID':id);
end

insert into detail(master_id,..) values(rdb$get_context('USER_TRANSACTION','MASTER_ID'),..);
...
commit;
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326884
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikeDD,

кстати нормальный вариант
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326931
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedormooreстолкнулся с ограничениями
А тебе так критично эту операцию оформлять именно как скрипт?.. Используй контекстные
переменные.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326952
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Контекстные, они какбе, и в скрипте никуда не деваются.
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326968
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryКонтекстные, они какбе, и в скрипте никуда не деваются.
Они как бэ только в скрипте и имеют смысл. В остальных случаях - руки отрывать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39327005
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Многие расстроятся. Таблоид, например.
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39327010
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryТаблоид, например.

Почему? Он же как раз исключительно скриптами всё и делает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39327012
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Wildsery!
You wrote on 14 октября 2016 г. 13:03:07:

Wildsery> Многие расстроятся. Таблоид, например.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39327196
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПочему? Он же как раз исключительно скриптами всё и делает.Я не знаю, как он на самом деле делает, но сюда выложено множество советов и решений, использующих контекстные переменные
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39327199
dedRasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovОни как бэ только в скрипте и имеют смысл. В остальных случаях - руки отрывать.


А почему только в скриптах? Почему не стоит, например, в процедурах?

Вроде здорово - такая видимая всем объектам глобальная переменная.
...
Рейтинг: 0 / 0
20 сообщений из 45, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / одновременная вставка данных в master и detail
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]