powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Избавиться от холостого срабатывания генератора в insert into
7 сообщений из 32, страница 2 из 2
Избавиться от холостого срабатывания генератора в insert into
    #40059166
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antoxТак задача в первом посте

Нет, в первом посте как раз попытка кривого решения.

Настоящим решением настоящей задачи скорее всего будет выкинуть вообще tab1_id из таблицы
и построить первичный ключ по (tab2_id, typ2).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избавиться от холостого срабатывания генератора в insert into
    #40059168
Dimbuch®
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antox
При нахождении строки по tab2_id, typ2 происходит обновление, но срабатывает генератор gen_tab1_id и первичный ключ tab1_id меняется на новое значение, чего не надо при update , это необходимо только в случае, если по tab2_id, typ2 строка не найдена и сработал insert into , не могу сообразить, как для этого изменить запрос :)

Код: sql
1.
2.
UPDATE OR INSERT INTO tab1 (tab1_id, tab2_id, typ2, num2) VALUES (GEN_ID(gen_tab1_id, 1), :tab2_id, :typ2, :num2)
matching (tab2_id, typ2)



В триггере таблицы написать
Код: sql
1.
2.
IF (INSERTING AND NEW.tab1_id IS NULL) THEN
   NEW.tab1_id = NEXT VALUE FOR gen_tab1_id;
...
Рейтинг: 0 / 0
Избавиться от холостого срабатывания генератора в insert into
    #40059239
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
antoxИногда хочется получать значение ключа перед вставкой

ну что за ересь - где в приведенном примере update or insert получение значения генератора ПЕРЕД
вставкой??? Ладно бы как параметр передавалось. Но там же явно gen_id написан. Поэтому "перед" его никак не получить.

Слово "Иногда" мы не читаем??? В приведенном примере оно не получается перед, в другом песте можно получить и перед. В случает использования триггера не знаю, как можно получить перед
...
Рейтинг: 0 / 0
Избавиться от холостого срабатывания генератора в insert into
    #40059240
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimbuch®
antox
При нахождении строки по tab2_id, typ2 происходит обновление, но срабатывает генератор gen_tab1_id и первичный ключ tab1_id меняется на новое значение, чего не надо при update , это необходимо только в случае, если по tab2_id, typ2 строка не найдена и сработал insert into , не могу сообразить, как для этого изменить запрос :)

Код: sql
1.
2.
UPDATE OR INSERT INTO tab1 (tab1_id, tab2_id, typ2, num2) VALUES (GEN_ID(gen_tab1_id, 1), :tab2_id, :typ2, :num2)
matching (tab2_id, typ2)



В триггере таблицы написать
Код: sql
1.
2.
IF (INSERTING AND NEW.tab1_id IS NULL) THEN
   NEW.tab1_id = NEXT VALUE FOR gen_tab1_id;



Классно! Спасибо, попробую так
...
Рейтинг: 0 / 0
Избавиться от холостого срабатывания генератора в insert into
    #40059243
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox

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


А не будет ли так любезен многоуважаемый джинн поделиться сакральным знанием по получению "перед" в одном клиентском запросе со вставкой в каком угодно "песте"?
...
Рейтинг: 0 / 0
Избавиться от холостого срабатывания генератора в insert into
    #40059269
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка
antox

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


А не будет ли так любезен многоуважаемый джинн поделиться сакральным знанием по получению "перед" в одном клиентском запросе со вставкой в каком угодно "песте"?


:) Когда мне надо Перед, я получаю в другое запросе от генератора, а в запрос insert into передаю в параметр готовое значение

А триггер при таком раскладе "а в запрос insert into передаю в параметр готовое значение" все равно генератор перезапросит?

По идее не должен, ведь id не null, а в триггере написано:

Код: sql
1.
2.
3.
4.
5.
as
begin
  if (new.id is null) then
    new.id = gen_id(gen_id,1);
end
...
Рейтинг: 0 / 0
Избавиться от холостого срабатывания генератора в insert into
    #40059275
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox

А триггер при таком раскладе "а в запрос insert into передаю в параметр готовое значение" все равно генератор перезапросит?


А взять и проверить, если терзают смутные сомнения?
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Избавиться от холостого срабатывания генератора в insert into
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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