Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Борьба с ORA-01436 в древовидных запросах. / 13 сообщений из 13, страница 1 из 1
20.08.2003, 13:59
    #32241814
Alex_D
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Борьба с ORA-01436 в древовидных запросах.
Доброго дня всем !!!

Есть запрос по дереву, иногда возникает следущая ошибка ...

ORA-01436 CONNECT BY loop in user data

Причина ошибка понятна введены некоректные данные образующие цикл.

Вопрос в том, можно ли на уровне базы ввести ограничение, не позволяющее вводить циклические данные. Если можно, то как?


Заранее благодарен !!!
...
Рейтинг: 0 / 0
20.08.2003, 14:03
    #32241823
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Борьба с ORA-01436 в древовидных запросах.
А на какой структуре такая фигня возникает?
...
Рейтинг: 0 / 0
20.08.2003, 14:23
    #32241866
Alex_D
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Борьба с ORA-01436 в древовидных запросах.
Например, в справочнике вариантов упаковки товара

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
desc freight_packs

Name         Type         Nullable Default Comments                   
 ------------ ------------ -------- ------- -------------------------- 
 
FRPC_ID      NUMBER( 10 )                  Идентификатор
FRGT_FRGT_ID NUMBER( 10 )                  Товар              
PACK_PACK_ID NUMBER( 2 )                   Упаковка
RATE         NUMBER                 1      Коэфициент пересчета
FRPC_FRPC_ID NUMBER( 10 )   Y              Род.упаковка                           

Хороший пример с сигаретами: сигарета, пачка, блок, коробка

Упаковка              Коэф. пересчета        Род. упаковка
пачка                   20                     null (ед. измерения по умолчанию)
блок                    10                     пачка
коробка                 40                     блок
...
Рейтинг: 0 / 0
20.08.2003, 14:40
    #32241901
Sir
Sir
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Борьба с ORA-01436 в древовидных запросах.
Ask Tom. :))
http://asktom.oracle.com/pls/ask/f?p=4950:8:1031960901975898530::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:1168035332645,
...
Рейтинг: 0 / 0
20.08.2003, 14:42
    #32241907
Simon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Борьба с ORA-01436 в древовидных запросах.
вы наверно запрос неправильно пишите
с такой таблицей ошибка не должна вылезать
...
Рейтинг: 0 / 0
20.08.2003, 15:37
    #32242032
Alex_D
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Борьба с ORA-01436 в древовидных запросах.
to Sir

Большое спасибо за ссылку !!! Попробуем ...

to Simon

:)) Но это зависит от степени професионализма пользователей пользующих систему ... Вот пример реальных данных введеных пользователем (круговая ссылка)...

Код: plaintext
1.
2.
3.
FRPC_ID FRGT_FRGT_ID PACK_PACK_ID RATE FRPC_FRPC_ID 
     169 	          116 	         5      2 	         367 
     367 	          116 	         4     20 	         169 
...
Рейтинг: 0 / 0
21.08.2003, 01:33
    #32242491
ShgGena
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Борьба с ORA-01436 в древовидных запросах.
This isn't very hard problem.
I have read Ask Tom site (by Sir's link) and his decision I have found a little bit
not effective.

This is my mind only.
We have to check that current (inserting/updating) parent_id doesn't present as
a node in the same subtree.

2 components:
-- 1 - trigger before insert / update
-- 2 - procedure that has to validate this situation.

Trigger
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create or replace trigger bi_bu_tree_table
before insert or update on tree_table
for each row
begin
   if new.parent_id is not null then
      check_tree_liks(new.node_id, new.parent_id);
   end if;
exceptions
   when others then raise;
end;
/
show errors;


Procedure
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create or replace 
procedure check_tree_liks(p_node_id number, p_parent_id number) is
   pragma autonomous_transaction;
   n number;
begin
   select  1  into n from tree_table
   where p_parent_id = node_id
   connect by prior parent_id = node_id
   start with node_id = p_node_id;
   commit;
   raise_application_error(- 20100 , 'Recursive link to parent_id');
exception
   when no_data_found then return;
   when too_many_rows then raise_application_error(- 20100 , 'Recursive link to parent_id');
   when others then raise;
end;
/
show errors;

...
Рейтинг: 0 / 0
21.08.2003, 10:56
    #32242783
DenSoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Борьба с ORA-01436 в древовидных запросах.
2 ShgGena
Как раз-то ссылка Sir это есть самое грамотное решение
проблемы.
А Ваше решение вызывает большие подозрения в корректности,
например update разве не приведет к мутации.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
15.01.2021, 01:27
    #40036001
your_frend
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Борьба с ORA-01436 в древовидных запросах.
То есть, если таблица пермещения например
Пункт А Пункт В
склад1 склад2
склад2 склад3
склад3 склад1 вот на этой строчке будет такая ошибка?
То есть по такой древовидность лучше не строить?
...
Рейтинг: 0 / 0
15.01.2021, 09:10
    #40036014
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Борьба с ORA-01436 в древовидных запросах.
Если это единственные данные в ней, то нет. Да и смысла в такой таблице практически никакого, т.к. понять стартовую точку и конечную по ней нельзя.
...
Рейтинг: 0 / 0
15.01.2021, 09:22
    #40036017
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Борьба с ORA-01436 в древовидных запросах.
your_frend
таблица пермещения

по такой древовидность лучше не строить?


Древовидность перемещения ?

Дерево складов - это понятно.
...
Рейтинг: 0 / 0
15.01.2021, 09:29
    #40036019
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Борьба с ORA-01436 в древовидных запросах.
dmdmdm,

Видимо, при перемещении кусочки изделия раздают друзьям и знакомым на соседних складах.
...
Рейтинг: 0 / 0
15.01.2021, 09:54
    #40036026
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Борьба с ORA-01436 в древовидных запросах.
your_frend

склад3 склад1 вот на этой строчке будет такая ошибка?


обычно при перемещении есть дата (ид)
добавить and dat>prior dat

.....
stax
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Борьба с ORA-01436 в древовидных запросах. / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]