FB и работа с генераторами

Хорь
Дата: 23.08.2012 16:25:49
Что имеем: Firebird 2.5.1 SC (WI-V6.3.1.26332)

Задача: По достижении генератором значения N обнулить его.

Вопрос: есть ли возможность силами FB реализовать транзакционно-независимое решение данной задачи?
Dimitry Sibiryakov
Дата: 23.08.2012 16:29:31

Хорь
есть ли возможность

Нету возможности, обломись.

Posted via ActualForum NNTP Server 1.5

Хорь
Дата: 23.08.2012 16:32:04
Dimitry Sibiryakov,

Беда :(
Гаджимурадов Рустам
Дата: 23.08.2012 16:39:31
Хорь
Вопрос: есть ли возможность силами FB реализовать
транзакционно-независимое решение данной задачи?
Любое решение этой задачи будет транзакционно-независимым, ибо генератор.
Другое дело, что силами FB это не решить, т.к. нет триггера типа OnGetGeneratorValue.
WildSery
Дата: 23.08.2012 17:01:05
Гаджимурадов Рустам
нет триггера типа OnGetGeneratorValue.
Иногда, когда становится жаль, бью себя по рукам.
artemana
Дата: 23.08.2012 17:05:08
Хорь
Что имеем: Firebird 2.5.1 SC (WI-V6.3.1.26332)

Задача: По достижении генератором значения N обнулить его.

И что потом?
Хорь
Вопрос: есть ли возможность силами FB реализовать транзакционно-независимое решение данной задачи?

Как вариант, ввести правило - "Получаем значение генератора A только вызывая процедуру A".
create procedure A 
returns (
  RId integer)
as
  declare variable N integer;
begin
  select N from TuneParametrs into N;
  RId=Gen_Id(A,1);
  if (RId=N)
     then RId=Gen_Id(A,-RId); 
  while  (RId>N) do  
     RId=Gen_Id(A,1);
  end
Гаджимурадов Рустам
Дата: 23.08.2012 17:05:25
WildSery
Иногда, когда становится жаль, бью себя по рукам.
В своей системе жаль не бывает. А вот когда получаешь "наследство" - сабж таки бывает нужен/удобен.
Гаджимурадов Рустам
Дата: 23.08.2012 17:07:25
artemana
Как вариант, ввести правило
Ввести правило нетрудно, трудно обеспечить его соблюдение. :)
По сути, это можно сделать только с помощью комплекта трассировка+паяльная лампа.
artemana
Дата: 23.08.2012 17:11:21
Гаджимурадов Рустам
artemana
Как вариант, ввести правило
Ввести правило нетрудно, трудно обеспечить его соблюдение. :)
По сути, это можно сделать только с помощью комплекта трассировка+паяльная лампа.

Появятся в 3 права на генераторы и паяльную лампу в чулан.
Хорь
Дата: 23.08.2012 17:14:30
Гаджимурадов Рустам
Другое дело, что силами FB это не решить, т.к. нет триггера типа OnGetGeneratorValue.


ИМХО, триггер будет не самым лучшим вариантом: большие трудозатраты для частного решения.
Как вариант лучше иметь флаг для ХП или UDF, что-то наподобие условия выполнения используя Synchronize, было бы более универсально вызывать функцию/процедуру откуда угодно. Но это в теории.