|
|
|
Обход дерева условий на PL/SQL
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Помогите пожалуйста решить задачу (заранее прошу прощения, если поставлю не совсем понятное условие). Существует таблица, со структурой данных в виде дерева: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Вот результат выполнения селекта: IDPARENT_IDNOTEVALUECONNECT_BY_ISLEAFOPERATIONVARIABLE1Условие 11870=nVar121_____Условие 240=nVar262__________Условие 601=nVar472__________Условие 701>nVar531_____Условие 381=nVar341_____Условие 450=nVar284__________Условие 800=nVar5108_______________Условие 1051!=nVar694__________Условие 901>nVar551_____Условие 591=nVar3 Необходимо проверить ветви данного дерева (имя переменной, операция сравнения, значение, с которым нужно сравнивать берутся из таблицы). Т.е, другими словами, нам нужно по очереди проверить 4 ветви: Код: plaintext 1. 2. 3. 4. Достаточно дойти до первого CONNECT_BY_ISLEAF = 1 (потомков нет), при котором все предыдущие условия данной ветви сработали, чтобы все условие сработало. Помогите пожалуйста с алгоритмом проверки ветвей на PL/SQL. Особенно вызывает затруднение реализация условия "OR". Еще раз повторюсь, прошу прощения, но я вижу такое решение данной задачи. Может кто-нибудь знает другое? Заранее благодарю за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 05:21 |
|
||
|
Обход дерева условий на PL/SQL
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, забыл псевдостолбец LEVEL. Я хотел как-то за него зацепиться при обработке условия "ИЛИ", т.к. LEVEL у этих подветвей будет одинаков. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. IDPARENT_IDNOTEVALUECONNECT_BY_ISLEAFOPERATIONVARIABLELEVEL1Условие 11870=nVar1121_____Условие 240=nVar2262__________Условие 601=nVar4372__________Условие 701>nVar5331_____Условие 381=nVar3241_____Условие 450=nVar2284__________Условие 800=nVar53108_______________Условие 1051!=nVar6494__________Условие 901>nVar5351_____Условие 591=nVar32 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 05:53 |
|
||
|
Обход дерева условий на PL/SQL
|
|||
|---|---|---|---|
|
#18+
а где поле, отвечающее за признак OR/AND? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 06:29 |
|
||
|
Обход дерева условий на PL/SQL
|
|||
|---|---|---|---|
|
#18+
Это же видно из дерева. Один уровень - OR. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 06:32 |
|
||
|
Обход дерева условий на PL/SQL
|
|||
|---|---|---|---|
|
#18+
RefuserЭто же видно из дерева. Один уровень - OR. Если следующая строка имеет уровень как у текущей, то OR, иначе AND (уровень следующий больше текущего) или окончание условия (уровень следующий меньше текущего). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 06:47 |
|
||
|
Обход дерева условий на PL/SQL
|
|||
|---|---|---|---|
|
#18+
alex-ls Если следующая строка имеет уровень как у текущей, то OR, иначе AND (уровень следующий больше текущего) или окончание условия (уровень следующий меньше текущего). А если уровень тот же не у следующей строки, а например через несколько, как в примере... Нужен универсальный алгоритм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 06:55 |
|
||
|
Обход дерева условий на PL/SQL
|
|||
|---|---|---|---|
|
#18+
Refuseralex-ls Если следующая строка имеет уровень как у текущей, то OR, иначе AND (уровень следующий больше текущего) или окончание условия (уровень следующий меньше текущего). А если уровень тот же не у следующей строки, а например через несколько, как в примере... Нужен универсальный алгоритм. Через несколько строк делается примерно также, просто проверяется не текущий уровень, а уже каким-то образом подобранный, чтобы обрабатывалась ситуация с вложенными условиями. Однако проще для признака OR/AND использовать отдельное поле, а не уровень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 07:06 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=140&tid=1885019]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 313ms |

| 0 / 0 |
