|
|
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
Добрый день, Есть потребность обезопасить одну важную таблицу от глобальных апдейтов, каждый отдельный апдейт должен быть не более 3 строк. Как должен выглядеть триггер под эту задачу? Большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 15:57:27 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
gospodin_vasyaa, ну делаешь временную табличку on commit delete rows. В ней счетчик. По update before each row. Увеличиваешь счетчик. Вышел за границы разумного - дели на 0. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:01:19 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
gospodin_vasyaa, Студент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:07:57 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, Если честно я не понял: 1) вне триггера создаем GLOBAL TEMPORARY TABLE 2) какой счетчик надо создать для этой таблицы? 3) как выгружать туда запрос по которому сработал триггер? 4) как не разрешать выполнить действие в теле триггера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:15:51 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньевну делаешь временную табличку on commit delete rows. В ней счетчик. По update before each row. Увеличиваешь счетчик. Вышел за границы разумного - дели на 0. :)Это вы так шутите? Нафиг создавать таблички, если можно обойтись COMPOUND-триггером? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:15:57 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
AlexFF__|, Нет, начинающий PL/SQL разработчик ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:16:27 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
gospodin_vasyaa, sql%rowcount > 3 rollback ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:19:01 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
gospodin_vasyaaAlexFF__|, Нет, начинающий PL/SQL разработчик Ну так учись описывать свои замыслы правильно. 2 быстрых update по 2 строки считаются update 4 строк? А 100 по 1 строке? Какую цель в итоге хочешь достичь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:19:12 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
gospodin_vasyaaНет, начинающий PL/SQL разработчик Тогда в ON EACH ROW триггере делай SELECT из этой самой таблицы. Гарантировано ограничение в одну изменённою запись. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:19:17 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
gospodin_vasyaaДобрый день, Есть потребность обезопасить одну важную таблицу от глобальных апдейтов, каждый отдельный апдейт должен быть не более 3 строк. Как должен выглядеть триггер под эту задачу? Большое спасибо! для начала, раскройте тайну апдейт не больше 3-х строк, а мерж? (можно и и по ветвям - типа, "не больше ляля в when matched кляузе" хотя и это баян ну и постановщику этой дичины пламенный привет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:28:49 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
AlexFF__|, Цель: не позволять работникам за один запрос апдейтить сразу много строк ( часто забывают условия where). Если они подряд делают 100 апдейтов по одной строке, то пожалуйста. Еще раз: именно за раз не должно позволять обновлять много строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:31:11 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
gospodin_vasyaaДобрый день, Есть потребность обезопасить одну важную таблицу от глобальных апдейтов, каждый отдельный апдейт должен быть не более 3 строк. Как должен выглядеть триггер под эту задачу? Большое спасибо! 1) в before statment счетчік устанавливаете в 0 2) в after for each rows увеличиваете на 1 3) в after statment проверяете если счетчик больше 3-х срыв зы проще делать в компаунд триггере, но я их (компаунд тріггеров) боюсь из-за merge ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:36:27 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
gospodin_vasyaaAlexFF__|, Цель: не позволять работникам за один запрос апдейтить сразу много строк ( часто забывают условия where) Феерично ) Может тебе сделать процедуру для update/delete/insert таблицы, чтобы dml операции шли через нее? И пусть "работники" пользуются ею. Там сможешь реализовать и эту и остальные свои смелые фантазии по мере поступления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:37:29 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
stax.., Мне кажется ваша реализация наиболее подходит, попробую реализовать, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 16:46:19 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
stax..я компаунд тріггеров боюсь из-за mergeможно подумать, обычные (не COMPOUND) вас спасут от этого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 17:06:08 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
stax..но я их (компаунд тріггеров) боюсь из-за mergeА на чём основан страх? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 17:09:06 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
Elicstax..но я их (компаунд тріггеров) боюсь из-за mergeА на чём основан страх? не понимаю как оно работает выкладывал сдесь тест и вопросы по нему ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 17:17:25 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
--Eugene--Это вы так шутите? Нафиг создавать таблички, если можно обойтись COMPOUND-триггером? 1. Да. 2. Нафиг компаунд, когда можно через временную табличку? :) Собственно компаунд это хорошо, пока нет merge, ну и если надо действительно действия на одну операцию. Табличка на транзакцию. Собственно для понимая не важно. Студент. Временная табличка (или переменная в компаунде) и есть счетчик. Собственно увеличиваем значение. Ну и про то, как не дать - я же сказал раздели на ноль. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 17:25:14 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
ElicА на чём основан страх? На том, что их два в одном. И причем третий вообще вызовется не инициализированным. :) И главное это фича. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 17:27:30 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
--Eugene--stax..я компаунд тріггеров боюсь из-за mergeможно подумать, обычные (не COMPOUND) вас спасут от этого не спасут, а спасают ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 17:37:45 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
stax..--Eugene--пропущено... можно подумать, обычные (не COMPOUND) вас спасут от этого не спасут, а спасают ..... staxвозможно, с тех пор прошло немало времени, но всёже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 18:12:36 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
gospodin_vasyaaЦель: не позволять работникам за один запрос апдейтить сразу много строк ( часто забывают условия where).Если на прод пускают разработчика, за которого нужно бояться, то нужны не триггера, а транквилизаторы. Сделай себе песочницу и ковыряйся в ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 18:29:39 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
Жаба тоадская тоже надоела Только напишешь delete или update без where, сразу подчеркивает красной линией Какое ей собачье дело, почему я where не написал или dual не приджойнил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 22:25:12 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2016, 22:34:05 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, Спасибо, получилось вот так: CREATE OR REPLACE TRIGGER tab1_str_upd BEFORE UPDATE ON tab1 FOR EACH ROW declare var1 number(2); begin insert into temp_table_in_sub (id) values ( 1); select count(*) into var1 from temp_table_in_sub; IF var1>5 THEN raise_application_error( -20001, 'Нельзя одновременно обновлять столько строк!'); END IF; END; / ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 12:53:56 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
5 раз по одной в одной транзакции уже попробовал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 13:01:09 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
gospodin_vasyaa, можно через compound trigger create table tab1 (id number, dd date, vv varchar2(32)) / create or replace trigger tr_tab1 for update of dd,vv on tab1 compound trigger l_cnt number := 0; after each row is begin l_cnt := l_cnt + 1; if l_cnt > 3 then raise_application_error(-20001, 'Нельзя одновременно обновлять столько строк!'); end if; end after each row; end tr_tab1; / ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 14:10:04 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
arlxgospodin_vasyaa, можно через compound trigger create table tab1 (id number, dd date, vv varchar2(32)) / create or replace trigger tr_tab1 for update of dd,vv on tab1 compound trigger l_cnt number := 0; after each row is begin l_cnt := l_cnt + 1; if l_cnt > 3 then raise_application_error(-20001, 'Нельзя одновременно обновлять столько строк!'); end if; end after each row; end tr_tab1; / проверте на мерже напр вставляет 2 строки меняет две строки и удаляет две строки ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 15:57:11 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
stax..проверте на мержетвоя мерджефобия не уступает многострокобоязни автора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 16:11:43 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
stax.., но 2 же можно ) 4 - нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2016, 16:38:44 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
-2-stax..проверте на мержетвоя мерджефобия не уступает многострокобоязни автора. імхо compound і мерже в 11-ке работают неправильно ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 09:54:50 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
stax..compound і мерже в 11-ке работают неправильнос мерджем, и не только с мерджем, могут "неправильно" срабатывать строчные триггеры независимо от их совмещения в compund или через переменную пакета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 10:03:02 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
arlxstax.., но 2 же можно ) 4 - нельзя. авторSQL> select * from tab1; ID DD VV ---------- -------- -------------------------------- 1 2 3 4 SQL> merge into tab1 t using ( 2 select 1 i,'u' o from dual union all 3 select 2 i,'u' o from dual union all 4 select 3 i,'d' o from dual union all 5 select 4 i,'d' o from dual union all 6 select 5 i,'i' o from dual union all 7 select 6 i,'i' o from dual 8 ) m 9 on (t.id=m.i) 10 WHEN MATCHED THEN UPDATE SET t.vv = m.o 11 DELETE WHERE (t.vv='d') 12 WHEN NOT MATCHED THEN INSERT (id,vv) values (m.i,m.o) 13 / merge into tab1 t using ( * ERROR at line 1: ORA-20001: Нельзя одновременно обновлять столько строк! ORA-06512: at "STAX.TR_TAB1", line 6 ORA-04088: error during execution of trigger 'STAX.TR_TAB1' две обновлять можно ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 10:07:14 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
compadre.с мерджем, и не только с мерджем, могут "неправильно" срабатывать строчные триггеры независимо от их совмещения в compund или через переменную пакета. Ну как бы все зависит от понятия "не правильно". Compound предполагает методику free before use, как навеянный веками и единственно возможный вариант. В связи с чем есть подозрение, что там все написано по методу наоте..сь и совмещать merge и compound не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 10:12:44 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
stax.., stax..UPDATE SET t.vv = m.o Но update же идет 4 записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 10:14:28 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
arlxstax.., stax..UPDATE SET t.vv = m.o Но update же идет 4 записей. двух Код: plsql 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. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 11:36:26 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
stax.., сначала обновление 4 записей, потом удаление 2. Код: 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. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 12:19:01 |
|
||
|
Триггер, не позволяющий обновить больше n-строк
|
|||
|---|---|---|---|
|
#18+
stax.., то есть merge сначала update запись, потом обнаруживает что она попадает под условие delete, и удаляет ее. Если триггер будет for update or delete , то счетчик еще раньше будет "генерить" ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 12:45:29 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1887671]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
163ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 443ms |

| 0 / 0 |
