|
|
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. При записи пациента на прием проводится проверка на наличие у него приемов в промежутке (+-20 мин). Если есть, то запретить вставку. При вставке проблем не возникает, но при обновлении поля выдает ошибку о мутировании таблицы. Что это за ошибка и почему она возникает, я понимаю, но вот куда мне деть SELECT? Как обойти мутирование? Или на что его заменить? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 22:39 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
оракл так и пишет - "таблица мутирована"? а номер ошибки там прилагается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 22:45 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
Q.Tarantino, авторORA-04091: table name is mutating, trigger/function may not see it ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2017, 22:50 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
pastkhuf, Oracle 11R2: If you must use a trigger to update a mutating table, you can avoid the mutating-table error in either of these ways: - Use a compound DML trigger (see "Using Compound DML Triggers to Avoid Mutating-Table Error"). - Use a temporary table. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 03:01 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
Vladimir Filin, Mutating-Table Restriction http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/triggers.htm#g1699708 Using Compound DML Triggers to Avoid Mutating-Table Error http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/triggers.htm#CHDFEBFJ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 03:08 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
Vladimir Filin, Я эту теорию заранее просмотрел, у меня проблема с практикой. Я не знаю, как в моем случаем писать составной триггер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 05:09 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
Vladimir Filin, мне ее обновлять даже не надо, просто посчитать количество определенных строк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 05:17 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
Vladimir Filin, если записать в before statement, то вообще триггер никак не будет реагировать на вставку, а after всегда выдает ошибку, даже если в таблице нет строк Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 05:34 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
ТОП популярных вопросов конечно уже прочитал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 09:25 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
tru55, Да, конечно, поэтому и пишу, что не получается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 09:51 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
почему мне никто не хочет помочь, может я тему неудачно назвал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 10:59 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
pastkhuf, А с чем связана реализация на уровне триггера? Сколько сессий одновременно могут добавлять записи по одному пациенту? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 11:03 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
env, задача: если у пациента есть уже прием, то его нельзя записать на прием в интервале 20 мин до и после. Я считаю в триггере эти строки, если их количество не равно 0, но запретить вставку. Несколько сессий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 11:09 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
pastkhuf, Код: plsql 1. Почему сравнение с нулем? проапдейтили/вставили одну запись, запросом ее нашли,сравнили с нулем.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 11:14 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
Anatoly B, я делаю то же самое. Если количество запей в интервале 20 мин не равно нулю, то запрещаю вставку. Там с логикой все хорошо, проблема в том, что оракл не дает возможность считывать данные из той же таблицы. То есть если бы я считал что-то из другой таблицы, ошибки бы не было ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 11:24 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
pastkhuf, Выполняйте команду SELECT в триггере типа AFTER уровня statement (не for each row!). Для такого триггера уже будет согласованное состояние данных таблицы и вы сможете избежать описываемых ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 13:06 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
pastkhufЕсли количество запей в интервале 20 мин, включая только что вставленную и потому попавшую в сравнение запись, pastkhufне равно нулю Да, действительно, с чего бы тут ошибке быть... Ведь тут pastkhufс логикой все хорошо, проблема в том, что оракл не дает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 13:46 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
SQL*Plus, Ну мне же нужно предотвратить вставку, если пациент в это время на приеме! Даже если так, я ж в составном триггере выполняю SELECT в after statement? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 13:47 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
env, прошу прощения, признаю ошибку, но я имел введу в первом запросе не ошибки, когда я SELECT выполнял до вставки. Теперь все работает, спасибо всем большое! Я правильно понимаю: after statemen срабатывает после вставки, тогда, если возникает ошибка, то результат откатывается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 14:01 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
envpastkhuf, А с чем связана реализация на уровне триггера? Сколько сессий одновременно могут добавлять записи по одному пациенту? 100500 сессий. Как это влияет на выбор уровня триггера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 14:34 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
XMLerenvpastkhuf, А с чем связана реализация на уровне триггера? Сколько сессий одновременно могут добавлять записи по одному пациенту? 100500 сессий. Как это влияет на выбор уровня триггера.это влияет на выбор уровня изоляции, блокировки таблицы или иных до/вместо триггерных действий по обеспечению целостности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 14:43 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
pastkhufналичие у него приемов в промежутке (+-20 мин)достаточно уникального индекса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 14:52 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
pastkhuf Теперь все работает, ... Вот и славно! После торжественного омывания нового триггера в достойной жидкости, есть смысл спокойно почитать пару (как минимум) тем про подобные задачки. На усмотрение pastkhuf, разумеется. dbms_photoshop.... Читай эту тему Задачка Владимир Бегун Базовая идея тут . Это не триггер, но для некоторых случаев позволяет решить задачку. Кодирование, обход мутаций и обеспечение целостности данных при конкурентном изменении данных в таблице -- это ряд вещей, над которыми приходится задумываться решая эту и подобные ей задачи используя DIY-методы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 14:58 |
|
||
|
Мутирование таблицы
|
|||
|---|---|---|---|
|
#18+
непересекающиеся интервалы иных до/вместо триггерных действий по обеспечению целостности. Триггер- инструмент, обеспечение целостности- целевая функция. Инструменты могут быть разные, уникальный индекс- на мой взгляд, предпочтительнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2017, 15:01 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=162&tid=1885903]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
72ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 380ms |

| 0 / 0 |
