|
Вопрос
|
|||
---|---|---|---|
#18+
есть иерархическая таблица типа: ID -primary ID_Parent -ссылка на верх. уров. Num - номер в уровне unique индекс ID_Parent, Num в триггере before insert делаю: select Max(Num) into :New.Num where ID_Parent=:New.ID_Parent Как культурно заблокировать уровень? ибо при нескольких процессах нарушается unique индекс. Или вообще это делается иначе... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2002, 13:22 |
|
Вопрос
|
|||
---|---|---|---|
#18+
select Max(Num)+1 - конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2002, 14:18 |
|
Вопрос
|
|||
---|---|---|---|
#18+
select max() - конечно универсально, но в Oracle лучше использовать sequence. Мало того что триггер будет тормозить вставку, да еще если ты будешь каждый раз max() определять. А если система типичная OLTP - то совсем неэффективно. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2002, 14:27 |
|
Вопрос
|
|||
---|---|---|---|
#18+
Нет, надо: Num - порядковый номер в уровне ID_Parent т.е. - 1, 2, 3 ... а не - 10, 150, 10120 ... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2002, 14:36 |
|
Вопрос
|
|||
---|---|---|---|
#18+
А что логически означает этот номер уровня? Дело в том, что если у всех у них ID_parent один и тот-же, то ты ошибаешь счтитая, что они находятся на уровнях 1, 2, 3 итд. С точки зрения иерархии все они находятся на одном и том же уровне, потому-что у них общий родитель. Тогда здесь идёт речь о том что номера присваиваются последовательно в порядке возрастания по мере поступления строк. Но в этом случае можно ввести атрибут - дата вставки. И в запросе просто сортировать по дате. Если же у тебя 2-ой это родитель 1-го, а 3-ий родитель второго, то этот атрибут Num вообще не нужен. Для этого просто для 2-го необходимо укзать 1-го в качестве ID_Parent итд. и можно просто использовать функцию LEVEL, которая и возвратит тебе иерархию с номерами уровней. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2002, 14:48 |
|
Вопрос
|
|||
---|---|---|---|
#18+
пардон, я хотел сказать что 1-ый родитель 2-го, 2-ой родитель 3-го итд ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2002, 14:49 |
|
Вопрос
|
|||
---|---|---|---|
#18+
мне неоходима возможность поиска по ID_Parent, Num (для удобства навигации) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2002, 15:24 |
|
Вопрос
|
|||
---|---|---|---|
#18+
А что, то что я долго и упорно писало ни в чём не убедило? Жаль. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2002, 15:29 |
|
Вопрос
|
|||
---|---|---|---|
#18+
Насколько я понимаю, может быть это не правильно, num - нужен для сортировки узлов дерева, принадлежащего одному уровню сквозную, по всему дереву. Это единственно в чем я вижу смысл этого поля. Просьба поправить если это не так. Но если num - нужен для сортировки узлов принадлежащих одному Parent узлу то смысл этого поля частично теряется поскольку: -- если используются иерархические запросы в 8i то по спецификации SQL сортировка невозможна -- если используются иерархические запросы в 9i то мы действительно можем сортировать используя ORDER SIBLINGS BY ... Далее по существу триггера: select Max(Num) into :New.Num where ID_Parent=:New.ID_Parent такой триггер в принципе должен быть мутирующий! > Как культурно заблокировать уровень? > ибо при нескольких процессах нарушается > unique индекс. в этой ситуации вообще не имеет смысла. Пример: create or replace trigger ai_bin_treeafter insert on bin_tree for each row declare n number; begin select max(num) into n from bin_tree where root_id=:new.root_id; end; / SQL> insert into bin_tree values ( 1, 1 ); *ERROR at line 1: ORA-04091: table TRAIN.BIN_TREE is mutating, trigger/function may not see it ORA-06512: at "TRAIN.AI_BIN_TREE", line 4ORA-04088: error during execution of trigger 'TRAIN.AI_BIN_TREE' единственный путь выполнения подобной задачи - -применение прагмы автономной транзакии решает проблему, но только частично, поскольку не позволяет применить последовательности операций INSERT и/или UPDATE без промежуточных COMMIT. следующая проблема этого select max() ... он вообще не будет работать даже без мутации поскольку при первом INSERT select max(null) вернет null. и соответственно при следующих тоже. должно быть: select nvl(max(num),0) into ... from ... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2002, 08:11 |
|
Вопрос
|
|||
---|---|---|---|
#18+
После остановки базы было произведено копирование файлов на другой компьютер. Скопировал в аналогичную структуру каталогов. При запуске база стартует, монтируется, но не открывается... Ругается: cannot open in exclusive mode. Если кто знает, пожалуйста, напишите последовательность действий приводящих к нормальному открыванию и работе БД? Заранее благодарен.. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2002, 08:40 |
|
Вопрос
|
|||
---|---|---|---|
#18+
на самом деле - Max(Num)+1 , хотя nvl(max(num),0) конечно правильно. но в одном процессе все работает, mutating- не ругается. таблица небольшая и редко меняется. Идея - засунуть в TreeView(delphi) и при клике на него смотреть куда попал, для этого и делаю Num. Было бы лучше в TreeView вставлять из unique поля, но этого нет. возможно идея порочная, механизм громоздкий, но ничего другого в голову не идет. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2002, 08:59 |
|
Вопрос
|
|||
---|---|---|---|
#18+
Предложение ко всем учасникам форума: на вопросы с подобной темой не отвечать. Мне кажется, понятно должно быть, что тема должна быть информативной!!!!! Denis, неужели тебе так в западло нормально тему задать? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2002, 09:20 |
|
Вопрос
|
|||
---|---|---|---|
#18+
Очередное предложение к учасникам форума: игнорировать вопросы с темой "вопрос", "проблемма", "помогите разобраться" и так далее... Я считаю создание вопросов с подобной темой неуважением ко всем учасникам форума !!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2002, 09:23 |
|
Вопрос
|
|||
---|---|---|---|
#18+
И export/import для дураков придумали... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2002, 09:39 |
|
Вопрос
|
|||
---|---|---|---|
#18+
мдя. Идея лично мне непонятная. Если у тебя родитель вычисляется отнятием единицы, то зачем держать поле? А если есть ссылка на родителя, то зачем нумеровать уровни? Ведь есть же замечательная конструкция SELECT...............CONNECT BY, а у нее есть полезный атрибут LEVEL, насколько я помню ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2002, 16:57 |
|
|
start [/forum/topic.php?fid=52&fpage=2830&tid=1992626]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 159ms |
0 / 0 |