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

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

ORA-01436 CONNECT BY loop in user data

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

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


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

Код: 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
Борьба с ORA-01436 в древовидных запросах.
    #32241901
Sir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sir
Гость
Ask Tom. :))
http://asktom.oracle.com/pls/ask/f?p=4950:8:1031960901975898530::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:1168035332645,
...
Рейтинг: 0 / 0
Борьба с ORA-01436 в древовидных запросах.
    #32241907
Simon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы наверно запрос неправильно пишите
с такой таблицей ошибка не должна вылезать
...
Рейтинг: 0 / 0
Борьба с ORA-01436 в древовидных запросах.
    #32242032
Alex_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Борьба с ORA-01436 в древовидных запросах.
    #32242491
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Борьба с ORA-01436 в древовидных запросах.
    #32242783
DenSoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ShgGena
Как раз-то ссылка Sir это есть самое грамотное решение
проблемы.
А Ваше решение вызывает большие подозрения в корректности,
например update разве не приведет к мутации.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Борьба с ORA-01436 в древовидных запросах.
    #40036001
your_frend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть, если таблица пермещения например
Пункт А Пункт В
склад1 склад2
склад2 склад3
склад3 склад1 вот на этой строчке будет такая ошибка?
То есть по такой древовидность лучше не строить?
...
Рейтинг: 0 / 0
Борьба с ORA-01436 в древовидных запросах.
    #40036014
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это единственные данные в ней, то нет. Да и смысла в такой таблице практически никакого, т.к. понять стартовую точку и конечную по ней нельзя.
...
Рейтинг: 0 / 0
Борьба с ORA-01436 в древовидных запросах.
    #40036017
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
your_frend
таблица пермещения

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


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

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

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

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


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

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


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