Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
plpgsql - не могу найти ошибку в функции
|
|||
|---|---|---|---|
|
#18+
В общем есть такая функция: -- Function: set_last() -- DROP FUNCTION set_last(); CREATE OR REPLACE FUNCTION set_last() RETURNS "trigger" AS $BODY$declare is_true boolean; par_id integer; begin if (NEW.is_last != TRUE) then NEW.is_last= TRUE; end if; if (NEW.parent_id = 0) then RETURN NEW; exit; end if; is_true=(SELECT is_last from categories where cat_id=NEW.parent_id); par_id=NEW.parent_id; if (is_true=TRUE) then UPDATE categories SET is_last = FALSE; --raise notice "не введено"; end if; RETURN NEW; end; $BODY$ LANGUAGE 'plpgsql' VOLATILE; ALTER FUNCTION set_last() OWNER TO postgresql; Вроде бы кое как работает, но только комманда, выделенная жирным не выполняется. Не понятно почему. Ведь из триггерной функции можно же выполнять запросы? Также когда передаю явное значение is_last (будь то true или false) тоже появляется какая то ошибка. В общем - недавно сел за postgres(с Mysql) и не жалею о выпавших волосах.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 00:18 |
|
||
|
plpgsql - не могу найти ошибку в функции
|
|||
|---|---|---|---|
|
#18+
что значит не выполняется? и какая ошибка появляяется? как создаете тригер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 02:15 |
|
||
|
plpgsql - не могу найти ошибку в функции
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. Двоеточия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 12:08 |
|
||
|
plpgsql - не могу найти ошибку в функции
|
|||
|---|---|---|---|
|
#18+
Funny_Falcon Код: plaintext 1. 2. Двоеточия С 8 версии и "=" работает. А не пытается ли уважаемый рекурсивно апдейтить таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 15:11 |
|
||
|
plpgsql - не могу найти ошибку в функции
|
|||
|---|---|---|---|
|
#18+
ZiNTeRВ общем есть такая функция: -- Function: set_last() -- DROP FUNCTION set_last(); CREATE OR REPLACE FUNCTION set_last() RETURNS "trigger" AS $BODY$declare is_true boolean; par_id integer; begin if (NEW.is_last != TRUE) then NEW.is_last= TRUE; end if; if (NEW.parent_id = 0) then RETURN NEW; exit; end if; is_true=(SELECT is_last from categories where cat_id=NEW.parent_id); par_id=NEW.parent_id; if (is_true=TRUE) then UPDATE categories SET is_last = FALSE; --raise notice "не введено"; end if; RETURN NEW; end; $BODY$ LANGUAGE 'plpgsql' VOLATILE; ALTER FUNCTION set_last() OWNER TO postgresql; Вроде бы кое как работает, но только комманда, выделенная жирным не выполняется. Не понятно почему. Ведь из триггерной функции можно же выполнять запросы? Также когда передаю явное значение is_last (будь то true или false) тоже появляется какая то ошибка. В общем - недавно сел за postgres(с Mysql) и не жалею о выпавших волосах..естли я прально понимаю, то Постле строки жирным, идет апдейт другой записи ТОЙ же таблицы (дерево, и я его уже где-то видел ), а при ее апдейте срабатывает этот же триггер, но для уже той записи, но поскольку вы пвтаетесь жирно SET is_last = FALSE, то и отрабатыват его _ПЕРВАЯ_ часть (IF (NEW.is_last != TRUE) , которая делает NEW.is_last = TRUE. Только и всего. Т.е. надо разделять логику вставки и логику апдейта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 18:00 |
|
||
|
plpgsql - не могу найти ошибку в функции
|
|||
|---|---|---|---|
|
#18+
Ок. Спасибо - задача решена. Кстати, интересно, где эту задачу уже видели то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2006, 04:42 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33535215&tid=2006642]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 355ms |

| 0 / 0 |
