powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / одновременная вставка данных в master и detail
45 сообщений из 45, показаны все 2 страниц
одновременная вставка данных в master и detail
    #39326289
fedormoore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Понимаю вопрос фундаментальный, но не могу сам его решит. Необходимо вставить данные в главную таблицу, получить id, и вставить его в подчиненную. Пробовал вот так:

Код: sql
1.
2.
3.
4.
5.
execute block as declare ID1 int; declare ID2 int; begin
EXECUTE PROCEDURE NEW_PROCEDURE('1', '33000', 'be0ad759-ee6a-4a21-b5f9-ed71f1eba54c00', 'Новое оборудование') returning_values :ID2;
EXECUTE PROCEDURE NEW_PROCEDURE2('1', :ID2, '13.10.2016', 'От 13.10.2016 № 1', 'Поступления');
EXECUTE PROCEDURE NEW_PROCEDURE2('1', :ID2, '13.10.2016', 'В составе Новое оборудование, в составе Новое оборудование', 'В составе');
end;



но проблема в том что строк может быть +1000 и тут я естественно попадаю на ограничения, разделить запрос на несколько не могу(если есть ошибка то надо отменять все записи)
как быть?
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326297
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedormooreразделить запрос на несколько не могу(если есть ошибка то надо отменять все записи)
как быть?
Прочитать про транзакции и чем они отличаются от запросов. Ну и savepoints до кучи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326298
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Fedormoore!
You wrote on 13 октября 2016 г. 14:19:04:

Fedormoore> разделить запрос на несколько не могуиз-за?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326304
fedormoore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МимопроходящийHello, Fedormoore!
You wrote on 13 октября 2016 г. 14:19:04:

Fedormoore> разделить запрос на несколько не могуиз-за?



да мне не лень, я повторюсь - если есть ошибка то надо отменять все записи
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326307
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Fedormoore!
You wrote on 13 октября 2016 г. 14:27:35:

Fedormoore> да мне не лень, я повторюсь - если есть ошибка то надо отменять все записиа кто мешает?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326313
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийа кто мешает?
Ну не знает пациент о транзакциях, чего пристал?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326318
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Dimitry Sibiryakov!
You wrote on 13 октября 2016 г. 14:37:45:

Dimitry Sibiryakov> Ну не знает пациент о транзакциях, чего пристал?..а мож у него клиентская библиотека шибко замороченная неестественным интеллектом с автокоммитом
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326320
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийа мож у него клиентская библиотека шибко замороченная неестественным интеллектом с
автокоммитом

Дык проблема-то не в потенциальном наличии неестественного интеллекта у библиотеки, а
кинетическом отсутствии естественного...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326333
fedormoore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я так рад дать вам повод побздеть, а то смотрю парни сидят, скучаю, и работать вроде не охота и поговорить ни о чем..
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326339
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да шо ж за день такой сегодня!
как-то кучно пошли...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326340
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedormooreя так рад дать вам повод побздеть, а то смотрю парни сидят, скучаю, и работать вроде не охота и поговорить ни о чем..
Слово "транзакция" прозвучало уже черте-сколько раз. Ты бы прочитал что это такое для начала. А потом подумал, как оно соотносится с тем, что тебе надо.
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326347
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

календарь сбился наверное. Хотя у меня вроде четверг.
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326350
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, сегодня ж 13-е!
хоть и не пятница
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326351
crazypiggy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
execute block as declare ID1 int; begin
insert into table1 (field1, field2) values ('45345', '33000') returning id into :ID1;
insert into table2 (id) values (:id1);
end;


Это подойдет?
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326355
fedormoore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crazypiggy
Код: sql
1.
2.
3.
4.
execute block as declare ID1 int; begin
insert into table1 (field1, field2) values ('45345', '33000') returning id into :ID1;
insert into table2 (id) values (:id1);
end;


Это подойдет?

спасибо, но нет, это тоже самое что и у меня
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326361
crazypiggy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините не все прочел.
Вам действительно необходимо прочитать о транзакциях. Задача не сложная
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326687
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedormoore, ничего проще? Вставляй в detail таблицу и всё!

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SET TERM ^;
CREATE OR ALTER TRIGGER master__TR_BIU
  FOR master
  ACTIVE BEFORE INSERT OR UPDATE
  POSITION 0
AS
BEGIN
  IF (NOT(NEW.id IS NOT NULL AND NEW.id <= GEN_ID(master__GEN, 0))) THEN
    NEW.id = GEN_ID(master__GEN, 1);
END^
SET TERM ;^

SET TERM ^;
CREATE OR ALTER TRIGGER detail__TR_BIU
  FOR detail
  ACTIVE BEFORE INSERT OR UPDATE
  POSITION 0
AS
BEGIN
  UPDATE OR INSERT INTO master (id) VALUES (NEW.id)
    MATCHING (id)
    RETURNING id INTO NEW.id;
END^
SET TERM ;^
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326735
MikeDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedormoore, вообще-то такое надо решать так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
StartTransaction;
Try
 AddHeader;
 While Condition Do
  AddDetail;
 Commit;
Except
 Rollback;
 Raise;
End;


С помощью какого инструмента ты собираешь выражение и его выполняешь?
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326762
fedormoore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MikeDD, IBExpert (2012.5.19.1), редактор скриптов
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326767
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

это такой "тонкий" троллинг ТС или ты действительно не понимаешь что чепуху написал?
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326776
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисrdb_dev, это такой "тонкий" троллинг ТС или ты действительно не понимаешь что чепуху написал?Ну, маленько накосячил в триггере detail. Думаю, ТС поподробнее изучит триггеры и найдет косячок.
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326780
fedormoore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev, маленько?! а по мне так это луче "троллингом" назвать, твой триггер я понял
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326791
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedormoore,

Ну а теперь пойми, что такое "транзакция", и почему именно ей принимают/откатывают изменения.
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326800
fedormoore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSery, я имею представление что такое транзакция, все так настойчиво мне советуют почитать, что я сам начал сомневаться и перечитал еще раз и про транзакцию и про запросы, но не вижу я связи как мне это может помочь сохранить ссылочную целостность. У меня есть два варианта вставки данных, 1 - когда я знаю id master и могу его вставить в datail 2 - когда я не знаю id master, но мне нужно его узнать для того чтобы вставить в datail.
Вы(users) 15 сообщений в теме написали и полный бред, то про пятницу то про 13, вам если конкретно написать не чего то не пишите, а то как бабки на базаре ничего путнего не сказала зато выговорилась.
ПРОСТИТЕ НАКИПЕЛО...
...
Рейтинг: 0 / 0
одновременная вставка данных в master и detail
    #39326804
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedormoorerdb_dev, маленько?! а по мне так это луче "троллингом" назвать, твой триггер я понял"Маленько" - понятие субъективное. Троллига там нет, а я опять прочел лишь первую половину вопроса. :)
Со второй половиной всё еще проще - стартуешь write транзакцию , накидываешь в БД строки (хоть по одной, хоть по десять) в try блоке и если всё хорошо, делаешь транзакции Commit.
...
Рейтинг: 0 / 0
одновременная вставка данных в 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
45 сообщений из 45, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / одновременная вставка данных в master и detail
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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