Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Не работает триггер
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Помогите победить триггер! У меня Postgresql 8.3 на ХР SP2. Недавно решил перейти с Access-а. После двух недель изучения док-ции и нескольких ночных бдений родил триггер, который, по идее, должен при добавлении или изменении записи, добавлять или изменять поле в той же таблице, основанное на данных других полей этой-же таблицы. Вот что получилось: Таблица: CREATE TABLE "public"."t_f000u" ( "IdUridObz" BIGINT DEFAULT nextval('"F000u_IdUridObz_seq"'::regclass) NOT NULL, "DATER" TIMESTAMP(0) WITHOUT TIME ZONE, "RRAX" VARCHAR(14), "KEKV" DOUBLE PRECISION, "DATEDOC" TIMESTAMP(0) WITHOUT TIME ZONE, "NDOC" VARCHAR(16), "DATETERM" TIMESTAMP(0) WITHOUT TIME ZONE, "S" DOUBLE PRECISION, "EDRPOUK" VARCHAR(14), "ID_FU" VARCHAR(60), "NOTE" VARCHAR(50), "STMOU" INTEGER ) WITH OIDS; CREATE UNIQUE INDEX "t_f000u_idx" ON "public"."t_f000u" USING btree ("IdUridObz"); CREATE TRIGGER "t_f000u_tr" BEFORE INSERT OR UPDATE ON "public"."t_f000u" FOR EACH ROW EXECUTE PROCEDURE "public"."fun_fu"(); CREATE OR REPLACE FUNCTION "public"."fun_fu" () RETURNS trigger AS $body$ DECLARE id_ur BIGINT; BEGIN IF (TG_OP = 'UPDATE') THEN SELECT INTO id_ur t_f000u."IdUridObz" FROM t_f000u WHERE t_f000u."IdUridObz" = NEW."IdUridObz"; IF NOT FOUND THEN RAISE EXCEPTION 'xrenovo c id_ur'; END IF; END IF; NEW."ID_FU" = t_f000u."DATEDOC" || t_f000u."NDOC" || t_f000u."EDRPOUK" FROM t_f000u WHERE t_f000u."ID_FU" = id_ur; RETURN NEW; END; $body$ LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY DEFINER COST 100; Но, зараза почему-то не работает при вставке и работает хреново при обновлении, т.е. обновляет, но при следующим обновлением, но с предыдущими значениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2008, 16:15 |
|
||
|
Не работает триггер
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. А что мы хотим увидеть id_ur? :-) Сдаеться мне что это можно заменить на Код: plaintext Можно, но не нужно. Потому как нужно просто этот запрос удалить и оставить Код: plaintext 1. Хотя, это не факт, учитывая, что выходит что вы делаеть по сути дела следущее Код: plaintext 1. 2. 3. З.Ы. У вас проблеммы со словарным запасом? Нет? Тогда от чего же не давать более осмысленные названия? ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2008, 16:32 |
|
||
|
Не работает триггер
|
|||
|---|---|---|---|
|
#18+
Большое спасибо! 1. Увидел собственную тупость : WHERE t_f000u."ID_FU" = NEW."IdUridObz"; -- тут два разнах поля? - два одинаковых - IdUridObz. 2. Как оказалось все просто - а я лез, блин, в какие-то дебри. Все заработало! 3. З запасами все ОК! Это просто когда-то под казначейскую программу делал свое на Access-e. А от них никаких описаний не добьешься. Вот и взял из их транспортных файлов. Еще раз спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2008, 16:58 |
|
||
|
|

start [/forum/topic.php?fid=53&tid=2004022]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
32ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 372ms |

| 0 / 0 |
