|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
Есть тригер стоит на таблице как "СREATE TRIGGER before_finace BEFORE INSERT ON pay FOR EACH ROW EXECUTE PROCEDURE "pay to finace before v2"();" Сам тригер "DECLARE INSERT_SQL text; OPTYPE text; SUM bigint; SYSTEM_DATE text; TYPE_PAY text; DESCR text; _id bigint; BEGIN IF NEW.typepay_id != 2423331 THEN IF NEW.paysum > 0 THEN OPTYPE := 2; ELSIF NEW.paysum < 0 and (NEW.typepay_id = 3181810 or NEW.typepay_id = 472295 or NEW.typepay_id = 57586)THEN OPTYPE := 1; ELSE RAISE EXCEPTION 'Нельзя ставить отрицательный баланс киленту если это не перерасчет не повторка и не списание'; END IF; NEW.execute := 1; NEW.datecreate := (SELECT CURRENT_TIMESTAMP(0)); select now()::timestamp into SYSTEM_DATE; SELECT id_pay INTO _id from client where login = NEW.numdoc; IF _id IS NULL THEN RAISE EXCEPTION 'Нельзя зачислить платеж без регестрации %', NEW.numdoc; END IF; Select CAST(NEW.paysum::numeric AS bigint)* 10000000000 into SUM; select description into TYPE_PAY from typepay where id = NEW.typepay_id; DESCR := '' || TYPE_PAY || ' ' || '' || NEW.datepay || '' || ' ' || NEW.nazn ||' №' || NEW.term || ''; INSERT_SQL := 'insert into finace_operations (user_id,op_type,op_date,op_summa,system_date,descr,finance_real) VALUES (''' || _id || ''',''' || OPTYPE || ''',''' || SYSTEM_DATE || ''',' || SUM || ',''' || SYSTEM_DATE || ''',''' || DESCR ||''',''' || NEW.paysum ||''')'; --SELECT 1, CURRENT_TIMESTAMP(0) INTO NEW.executeinideco, NEW.datecreate; --NEW.executeinideco := 1; --NEW.datecreate := (SELECT CURRENT_TIMESTAMP(0)); PERFORM dblink_exec('dbname=*** user=*** password=***',INSERT_SQL); ELSE SELECT CURRENT_TIMESTAMP(0) INTO NEW.datecreate; END IF; RETURN NEW; END;" На некоторых записях не устанавливает-"NEW.execute := 1; NEW.datecreate := (SELECT CURRENT_TIMESTAMP(0));" ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 12:31 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
2107tsm, видимо exception срабатывает, текущая транзакция прерывается ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 15:00 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
grgdvo2107tsm, видимо exception срабатывает, текущая транзакция прерывается По идеии если срабатывает exception на тригере BEFORE, то запись не должна заносится в таблицу, однако запись существует без New значение которые были указаны в тригере ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 15:08 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
2107tsmЕсть тригер стоит на таблице как "СREATE TRIGGER before_finace BEFORE INSERT ON pay FOR EACH ROW EXECUTE PROCEDURE "pay to finace before v2"();" Сам тригер " Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
" На некоторых записях не устанавливает-"NEW.execute := 1; NEW.datecreate := (SELECT CURRENT_TIMESTAMP(0));" -- теперь видно ? а вот с этим : Код: sql 1. 2.
-- будет "без окон без дверцов полна джоппа огурцов" -- как только клиентская таймзона разойдется серверной. "Д,Б." чел, не форматирующий код структурно -- ССЗБ ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2017, 18:07 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
qwwq2107tsmЕсть тригер стоит на таблице как "СREATE TRIGGER before_finace BEFORE INSERT ON pay FOR EACH ROW EXECUTE PROCEDURE "pay to finace before v2"();" Сам тригер " Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
" На некоторых записях не устанавливает-"NEW.execute := 1; NEW.datecreate := (SELECT CURRENT_TIMESTAMP(0));" -- теперь видно ? а вот с этим : Код: sql 1. 2.
-- будет "без окон без дверцов полна джоппа огурцов" -- как только клиентская таймзона разойдется серверной. "Д,Б." чел, не форматирующий код структурно -- ССЗБ На таблице стоит typepay_id not null записи с этим параметром не проходят ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2017, 15:09 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
а вот с этим : Код: sql 1. 2.
-- будет "без окон без дверцов полна джоппа огурцов" -- как только клиентская таймзона разойдется серверной. "Д,Б." чел, не форматирующий код структурно -- ССЗБ[/quot] Не спасиб я лучше буду на платформе держать правильное время буду, это лучше чем клиентское которое хз знает откуда)) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2017, 15:19 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
2107tsmйаа вот с этим : Код: sql 1. 2.
-- будет "без окон без дверцов полна джоппа огурцов" -- как только клиентская таймзона разойдется серверной. "Д,Б." чел, не форматирующий код структурно -- ССЗБ Не спасиб я лучше буду на платформе держать правильное время буду, это лучше чем клиентское которое хз знает откуда)) а сеанс пользователя выставит (жабка скажем) свою таймзону -- и плевать он (сеанс) хотел на то, что вы там "держать" будете. т.е. пйонт в том, что так систайм оперделять нельзя. просто проверьте один раз руками-- и помедитируйте, как организовать ф--ю систайм (с возвратом таймстамп) , если не готовы к таймстамптз, который сделает это за вас. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2017, 16:48 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
2107tsmНа таблице стоит typepay_id not null записи с этим параметром не проходят а typepay_id != 2423331 стоит ? что буит при NEW.typepay_id = 2423331 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2017, 17:02 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
qwwq2107tsmНа таблице стоит typepay_id not null записи с этим параметром не проходят а typepay_id != 2423331 стоит ? что буит при NEW.typepay_id = 2423331 ? Я думаю логика должна работать так if typepay_id != 242333 'true' then или if typepay_id = 242333 'false' then else, то есть если typepay_id != 242333 тогда правда, если typepay_id = 242333 тогда ложь то есть else. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 09:35 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
2107tsmqwwqпропущено... а typepay_id != 2423331 стоит ? что буит при NEW.typepay_id = 2423331 ? Я думаю логика должна работать так if typepay_id != 242333 'true' then или if typepay_id = 242333 'false' then else, то есть если typepay_id != 242333 тогда правда, если typepay_id = 242333 тогда ложь то есть else. так для кого я подкрасил этот самый "елсе" ? где он, а где присвоение неприсвоенного ? смотрим в книгу -- видим фигу, йопта если и для != 2423331 проскакивает -- тогда интереснее. но пока отложим. а вот про апдейт в теме поста, при инсерте -- в теле поста -- не понятно. вы всегда так внимательны ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 09:42 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
qwwq2107tsmпропущено... Я думаю логика должна работать так if typepay_id != 242333 'true' then или if typepay_id = 242333 'false' then else, то есть если typepay_id != 242333 тогда правда, если typepay_id = 242333 тогда ложь то есть else. так для кого я подкрасил этот самый "елсе" ? где он, а где присвоение неприсвоенного ? смотрим в книгу -- видим фигу, йопта если и для != 2423331 проскакивает -- тогда интереснее. но пока отложим. а вот про апдейт в теме поста, при инсерте -- в теле поста -- не понятно. вы всегда так внимательны ? esle это false то есть если выражение вернуло false, оно всегда будет else если это присутствует в логике, если выражение имеет false оно будет смотреть на другие выражения пока не получит TRUE или END в противном случаи это есть тот самый else. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 14:02 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
[quot qwwq]2107tsm если и для != 2423331 проскакивает -- тогда интереснее. но пока отложим. а вот про апдейт в теме поста, при инсерте -- в теле поста -- не понятно. вы всегда так внимательны ? Что не понятного у него у при инсерте проблема с уникальность строк так как он их по одинаковому критерию берет ему надо либо делать через CURSOR либо через ctid Физическое расположение версии строки. Я просто набросал примерно на глаз запросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 14:12 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
2107tsmqwwqпропущено... так для кого я подкрасил этот самый "елсе" ? где он, а где присвоение неприсвоенного ? смотрим в книгу -- видим фигу, йопта если и для != 2423331 проскакивает -- тогда интереснее. но пока отложим. а вот про апдейт в теме поста, при инсерте -- в теле поста -- не понятно. вы всегда так внимательны ? esle это false то есть если выражение вернуло false, оно всегда будет else если это присутствует в логике, если выражение имеет false оно будет смотреть на другие выражения пока не получит TRUE или END в противном случаи это есть тот самый else. скажите, уважаемый, русский язык вам родной ? далее: else -- это else. т.е. и False и NULL. в обоих случаях вы сразу попадаете из if--а на подкрашенный мною else без присвоения искомых вами полей. точка. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2017, 16:56 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
qwwq2107tsmпропущено... esle это false то есть если выражение вернуло false, оно всегда будет else если это присутствует в логике, если выражение имеет false оно будет смотреть на другие выражения пока не получит TRUE или END в противном случаи это есть тот самый else. скажите, уважаемый, русский язык вам родной ? далее: else -- это else. т.е. и False и NULL. в обоих случаях вы сразу попадаете из if--а на подкрашенный мною else без присвоения искомых вами полей. точка. Ахах ну да я в курсе что на else попадаю при null и если typepay_id = 2423331 и при этом условии мне не нужно присвоения полей. Но мой вопрос изначально был когда typepay_id != 2423331 и typepay_id is not null и не присваются нужные поля ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2017, 12:04 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
qwwq2107tsmпропущено... esle это false то есть если выражение вернуло false, оно всегда будет else если это присутствует в логике, если выражение имеет false оно будет смотреть на другие выражения пока не получит TRUE или END в противном случаи это есть тот самый else. скажите, уважаемый, русский язык вам родной ? далее: else -- это else. т.е. и False и NULL. в обоих случаях вы сразу попадаете из if--а на подкрашенный мною else без присвоения искомых вами полей. точка. Даже запись dblink_exec('dbname=*** user=*** password=***',INSERT_SQL); проходить а вот На некоторых записях не устанавливает-"NEW.execute := 1; NEW.datecreate := (SELECT CURRENT_TIMESTAMP(0));" ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2017, 12:09 |
|
Не работает тригер на update before
|
|||
---|---|---|---|
#18+
2107tsmqwwqпропущено... скажите, уважаемый, русский язык вам родной ? далее: else -- это else. т.е. и False и NULL. в обоих случаях вы сразу попадаете из if--а на подкрашенный мною else без присвоения искомых вами полей. точка. Даже запись dblink_exec('dbname=*** user=*** password=***',INSERT_SQL); проходить а вот На некоторых записях не устанавливает-"NEW.execute := 1; NEW.datecreate := (SELECT CURRENT_TIMESTAMP(0));" Ну так поставьте десяток RAISE WARNING в хранимку отладочных на подозрительные места. И по логам разбирайтесь что произошло. Визуально отлаживать код когда там что то странное происходит - не эффективно. -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2017, 12:38 |
|
|
start [/forum/topic.php?fid=53&fpage=79&tid=1996744]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 189ms |
0 / 0 |