|
|
|
Интересный вопрос про мутирующие таблицы
|
|||
|---|---|---|---|
|
#18+
1)Есть таблица. 2) На ней триггер BEFORE INSERT ON ENTRIES FOR EACH ROW 3) в триггере есть вызов процедуры Get_Amount(..) 4) в этой процедуре идет select from ENTRIES ( т.е в туже таблицу на которой триггер) И. НЕ ВОЗНИАЕТ ОШИБКИ МУТИРУЮЩЕЙ ТАБЛИЦЕ. ПОЧЕМУ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2003, 14:13:13 |
|
||
|
Интересный вопрос про мутирующие таблицы
|
|||
|---|---|---|---|
|
#18+
нельзя ли по подробнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2003, 14:20:03 |
|
||
|
Интересный вопрос про мутирующие таблицы
|
|||
|---|---|---|---|
|
#18+
ты делаешь insert into entries values(); если сделаешь insert into entries select qqq from dual; у тебя возникнет ошибка. Читайте доку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2003, 14:24:02 |
|
||
|
Интересный вопрос про мутирующие таблицы
|
|||
|---|---|---|---|
|
#18+
С этими исключениями, т.е. когда таблицы все-таки не мутируют, интересная история получается: в документации на Oracle 8.1.5 оговаривалось: For a single row INSERT, constraining tables are mutating for AFTER row triggers, but not for BEFORE row triggers. INSERT statements that involve more than one row, such as INSERT INTO Emp_tab SELECT..., are not considered single row inserts, even if they only result in one row being inserted. http://technet.oracle.com/doc/server.815/a68003/01_13dbt.htm#786 В документации на Oracle 9.2 этой фразы уже не присутствует, хотя поведение сохраняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2003, 14:34:11 |
|
||
|
Интересный вопрос про мутирующие таблицы
|
|||
|---|---|---|---|
|
#18+
2 Denis Popov Почему интересная то :-) Мутирующие таблицы они и в Африке мутирующие. 2 Oracle_Developer Потому что триггер before (строка которую ты вставляешь еще не видна) и как сказал Пидор :-) у тебя наверняка вставляется только одна строка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2003, 15:36:36 |
|
||
|
Интересный вопрос про мутирующие таблицы
|
|||
|---|---|---|---|
|
#18+
Объясните плиз почему есть это ограничение на мутирующие таблицы т.е каковы его глубинные корни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2003, 16:27:30 |
|
||
|
Интересный вопрос про мутирующие таблицы
|
|||
|---|---|---|---|
|
#18+
SQL operations are SET operations. When you issue SELECT/UPDATE/INSERT/DELETE... you are not selecting/updating/inserting/deleting individual rows - you are selecting/updating/inserting/deleting SETS. If one row within a set fails - the whole operation fails. Another words SQL is not a procedural language. PL/SQL is - it allows you to work with individual rows. Trigger is written in PL/SQL and is procedural. As a result, we have a conflict. From SQL's point of view operation is done when ALL SET IS PROCESSED while trigger is trying to access table when SET IS PROCESSED YET. So form SQL's point of view table is in "in-between" state. We can not tell what is table contents at the moment. This is called mutating. In "old days" there was also a "constraining table" effect caused by mutation. Assume trigger on a parent table modifies child table. Since parent table is "mutating" Oracle can not validate foreign key. IN 8i constraining issue was removed since checking of the foreign key is deferred until at least the end of the parent statement. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2003, 17:07:44 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32181356&tid=1990044]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
201ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 526ms |

| 0 / 0 |
