Форум: "Базы";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
ВнизПроблемма с тригером в IB. Найти похожие ветки
← →
Asail (2006-07-11 13:26) [0]Есть тестовая таблица NEW_TABLE с двумя полями:
ID INTEGER (PRIMARY KEY);
NAME CHAR(20);
Создал следующий тригер:
CREATE TRIGGER NEW_TABLE_BI0 FOR NEW_TABLE
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable M integer;
begin
if ("id" IS NULL) then
begin
SELECT Max("ID") FROM NEW_TABLE INTO M;
new.ID = M + 1;
end
end
Идея в том, что ID может выставляться как в ручную, так и автомат. с помощью тригера на 1 больше максимального (поэтому генератор ИМХО не поможет).
Но при, например, запросе
INSERT INTO NEW_TABLE (NAME) Values("TEST");
получаю Validation Error на поле ID.
Как сие можно решить?
← →
DrPass © (2006-07-11 13:29) [1]if (new."id" IS NULL) then
← →
DrPass © (2006-07-11 13:31) [2]А вообще, стремный это способ для многопользовательской БД
SELECT Max("ID") FROM NEW_TABLE INTO M;
← →
Desdechado © (2006-07-11 13:37) [3]Не стремный, а неприемлемый в принципе!
Для суррогатного ключа нет совершенно никакой разницы, дырками он или нет. Пользователь его все равно не видит.
← →
Asail (2006-07-11 13:40) [4]Кстати, new."ID" не хочет, хочет new.ID.
Теперь получаю - Invalid modify request. conversion error from string "ID".
А вот так заработало:
AS
declare variable C integer;
begin
if (new.ID IS NULL) then
begin
SELECT Max(T.ID) FROM NEW_TABLE T INTO C;
new.ID = C + 1;
end
end
P.s. А чем стремный? И как лучше?
P.p.s. А ключ этот не суррогатный. Поэтому и введена возможность как ручного (из приложения) так и авт. ввода значения.
← →
Asail (2006-07-11 13:41) [5]Е
> Для суррогатного ключа нет совершенно никакой разницы,
> дырками он или нет. Пользователь его все равно не видит.
>
Так, конечно генератор !!!
← →
Johnmen © (2006-07-11 13:43) [6]Этот способ является всеобщенеприменимым.
Читать http://www.ibase.ru/devinfo/generator.htm
и всё остальное на сайте...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c