powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / триггер для обновления данных
10 сообщений из 10, страница 1 из 1
триггер для обновления данных
    #33136434
genix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста:

1) возможно ли написать триггер, который обновляет некоторые поля до их внесения в базу или делает это только для тех строк, которые были обновлены/добавлены?
Т.е. например пользователь инсертит или апдейтит строку в таблице, и в этот момент нужно подменять некоторые поля, вне зависимости от того что он ввел.
2) Если ответ на первый пункт положительный, то подтолкните в нужном направлении пожалуйста. Может у кого уже есть примеры использования?

P.$.: я начал было делать, но что-то не выходит каменный цветок:

create trigger trg_upd_subj update on persons
after
(update persons set persons.first_name_upper
= (UPPER(first_name )) ,persons.middle_name_upper
= (UPPER(middle_name )) ,persons.last_name_upper
= (UPPER(last_name )) ,persons.birth_year = NVL(YEAR (birth_date ) ,0 ));

однако при попытке обновить любую запись в таблице, для которой создан триггер, получаю:
747: Table or column matches object referenced in triggering statement.
...
Рейтинг: 0 / 0
триггер для обновления данных
    #33136467
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переименовать таблицу, создать для таблицы вью со старым именем, и на это вью навесить instead of триггер.


-----------------------------------------------------------
Решительный шаг вперед -- результат хорошего пинка сзади
...
Рейтинг: 0 / 0
триггер для обновления данных
    #33136626
Leonid Belov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если правим записи, триггер должен быть FOR EACH ROW, а не AFTER
...
Рейтинг: 0 / 0
триггер для обновления данных
    #33136700
Leonid Belov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Работающий пример:

create table t1 (
id integer,
n char(20)
);

CREATE TRIGGER ins_t1
INSERT ON t1
REFERENCING NEW AS new
FOR EACH ROW (
execute function upper(new.n) into t1.n
);

CREATE TRIGGER upd_t1
UPDATE OF n ON t1
REFERENCING NEW AS new
FOR EACH ROW (
execute function upper(new.n) into t1.n)
;

Если подходящей функции или процедуры нет - никто не мешает сделать
...
Рейтинг: 0 / 0
триггер для обновления данных
    #33136784
genix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
преогромнейшое спасибо всем и особенно за работающий пример!!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
триггер для обновления данных
    #38047742
ga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно как нибудь это ограничение (747: Table or column matches object referenced in triggering statement.) обойти? При апдейте одной записи надо в той же таблице, тоже поле для другой записи менять.
...
Рейтинг: 0 / 0
триггер для обновления данных
    #38047902
Leonid Belov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gaА можно как нибудь это ограничение (747: Table or column matches object referenced in triggering statement.) обойти? При апдейте одной записи надо в той же таблице, тоже поле для другой записи менять.

Если поле то же самое - точно получите рекурсию. Так что нельзя - и это правильно...
...
Рейтинг: 0 / 0
триггер для обновления данных
    #38047915
Leonid Belov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ga,

Если хотите делать связанные изменения одного и того же поля в разных записях таблицы - триггеры не помогут по причине
возникающей при этом рекурсии. Придется просто написать хранимую процедуру, которая делает то, что нужно.
Далее - запретить прямой UPDATE поля на уровне прав доступа и после этого дать право вызова вашей процедуры тому,
кому следует.
...
Рейтинг: 0 / 0
триггер для обновления данных
    #38050767
ga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Belov, так а как запись менять? Процедуру вызывать вместо запроса? Это не всегда ведь возможно. Есть какие нибудь ещё альтернативы?
...
Рейтинг: 0 / 0
триггер для обновления данных
    #38051211
Фотография Daugava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заведите себе еще одну таблицу и меняйте записи в своей таблицы с помощью процедуры, которая вызывается из триггера новой таблицы. Либо если таблица слишком жирно, то добавьте в свою таблицу поле и триггер на него.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / триггер для обновления данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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