Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Триггеры / 15 сообщений из 15, страница 1 из 1
23.06.2004, 09:17:15
    #32572962
Роман Новичек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
Существует таблица title_nakl. В этой таблице есть поля clos и data. Нужно при изменении поля clos с False на True чтобы менялась дата. Получается, что триггер на обновление сработает 2 раза, причем одно обновление вызовет другое (что я думаю не правильно). Подскажите, пожалуйста, как поступить в данной ситуации.
...
Рейтинг: 0 / 0
23.06.2004, 09:26:55
    #32572984
Роман Новичек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
Вопрос получился 2 раза. Это у меня Explorer глючит
...
Рейтинг: 0 / 0
23.06.2004, 09:27:12
    #32572986
Comil
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
Если я правильно понял (вопрос сформулирован туманно), то:

в триггере надо:

if ( (old.clos=false) and (new.clos=true) ) then new."date" = current_date;

Замечание: постарайтесь избегать в названиях таблиц, полей и проч. зарезервированных слов, таких как date. Вообще, конечно, имена могут быть любыми, но тогда не избежать гемора с повсеместным использованием кавычек. Это же замечание относится и к регистру.
...
Рейтинг: 0 / 0
23.06.2004, 09:32:39
    #32573000
Серега
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
Получается, что триггер на обновление сработает 2 раза
Показал бы тригер то. Почему 2 раза?
...
Рейтинг: 0 / 0
23.06.2004, 09:36:25
    #32573017
Роман Новичек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
У меня не получается через new.data=current_date. Ничего не изменяется. Поэтому попробовал через update. И триггер получился с кучей условий. Может что-то не так?
...
Рейтинг: 0 / 0
23.06.2004, 09:50:36
    #32573038
srf2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
е-мае
диалект базы какой? скрипт таблицы? текст самого триггера?
тут же не телепаты все...
...
Рейтинг: 0 / 0
23.06.2004, 10:08:19
    #32573074
Роман Новичек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
Диалект 3.
Скрипт:
CREATE TABLE TITLE_NAKL (
ID_TITLE INTEGER NOT NULL,
OTPR INTEGER NOT NULL,
POL INTEGER NOT NULL,
DATE_NAKL TIMESTAMP,
NUM_ZAK INTEGER,
KOL_NAIM INTEGER DEFAULT 0 NOT NULL,
TYPE_NAKL INTEGER NOT NULL,
ITOG_SUM NUMERIC(12,2) DEFAULT 0.0,
CLOS BOOLEAN DEFAULT false
);


Сам триггер:

SET SQL DIALECT 3;

SET NAMES WIN1251;


SET TERM ^ ;




CREATE TRIGGER UPD_NAKL FOR TITLE_NAKL
ACTIVE BEFORE UPDATE POSITION 0
AS
declare variable izmpart integer;
declare variable izmkol integer;
declare variable izmkod integer;
declare variable is_pol boolean;
begin
if (old.clos=true) then
exception err_del_nakl; */Сообщение, что накладная закрыта
else
begin
*/Проверка по типу накладной, является ли склад отправителем
select skl_pol from nakl_type where type_id=old.type_nakl into :is_pol;
if (is_pol=false) then */ если склад отправитель
begin
*/проверка, закрывается ли накладная
if (old.clos=false and new.clos=true) then */если да
begin
*/ изменяем остаток по каждой позиции накладной
for
select num_part, kodt, kolvo from body_nakl
where id_title=old.id_title
into :izmpart, :izmkod, :izmkol
do
update reg_part set rezerv=rezerv-:izmkol,
kolvo=kolvo-:izmkol
where num_part=:izmpart and kodt=:izmkod;
new.date_nakl=current_timestamp;
end
end
end
end
^


SET TERM ; ^
...
Рейтинг: 0 / 0
23.06.2004, 10:10:06
    #32573078
Роман Новичек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
вот строчка new.data=current_timestamp ничего не изменяет
...
Рейтинг: 0 / 0
23.06.2004, 10:24:15
    #32573106
srf2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
версию Interbase в студию
CLOS BOOLEAN DEFAULT false - текст boolean приведи
...
Рейтинг: 0 / 0
23.06.2004, 10:31:15
    #32573127
srf2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
у тебя поди IB 7.x ?
...
Рейтинг: 0 / 0
23.06.2004, 10:36:37
    #32573139
Роман Новичек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
Да. IB 7 - й версии
...
Рейтинг: 0 / 0
23.06.2004, 10:38:28
    #32573143
Роман Новичек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
Для меня IB новинка. Может быть у меня IB какой-то обрезанный?
...
Рейтинг: 0 / 0
23.06.2004, 10:59:26
    #32573194
VF
VF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
попробуй
Код: plaintext
new."date"=NOW
в 3 диалекте работает, если это конечно поле типа DATE, но всё же... СМЕНИ НАЗВАНИЕ ПОЛЯ!!!
...
Рейтинг: 0 / 0
23.06.2004, 11:03:09
    #32573205
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
Роман Новичеквот строчка new.data=current_timestamp ничего не изменяет

current_timestamp - время начала выполнения request'а, а не текущее

new.data = 'NOW' не пробовал ?
...
Рейтинг: 0 / 0
23.06.2004, 11:04:42
    #32573211
Роман Новичек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггеры
Поле типа TIMESTAMP. А по поводу названия поля я просто не правильно написал. В скрипте правильное имя - data_nakl
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Триггеры / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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