Индекс по функции и деревянный запрос

artemisin
Дата: 04.08.2005 17:00:22
Oracle 9i.
Есть табличка с деревом.
Есть функция, которая осуществляет поиск по пути в дереве.
Для ускорения упоследней добавлен индекс по функции, которая для каждого ID формирует путь( посредством SYS_CONNECT_BY_PATH).
При селектах все работает замечательно.
Но как только начинаю менять/добавлять строку в таблице, получаю
ORA-04091: table is mutating, trigger/function may not see it.
поскольку функция формирует данные на основе изменяемой таблице, чего и следовало ожидать.
Вопрос: кто-нибудь сталкивался с такой проблемой и как решали?
возможно ли организовать такой индекс и как?
AUTONOMUS_TRANSACTION - не прокатило.....
softwarer
Дата: 04.08.2005 17:10:01
Хм. Есть подозрение, что это в любом случае некорректная операция, поскольку изменение строки потребует переиндексирования не только измененной строки, но и всех "дочерних" строк. Собственно Oracle специально на этот случай предусмотрел ошибку ORA-30002 :)

Имхо - нужно явно писать денормализацию. Например, сделать IOT, куда и класть путь + [row]id.
artemisin
Дата: 04.08.2005 17:37:35
Через IOT конечно заработает.
раз других вариантов нет....
softwarer
Дата: 04.08.2005 17:44:20
artemisin
Через IOT конечно заработает.
раз других вариантов нет....

А какие другие варианты? Вы пытаетесь построить индекс по недетерминированной функции, хотя, я так подозреваю, дали ораклу зуб, что она детерминированная :)