|
|
|
Очень долгий разбор XML
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток Господа Ораклоиды. Прошу помощи в разборе XML. Собственно ситуация: Имею относительно небольшой XML файл, из которого средствами SQL необходимо разобрать порядка 1К элементов и выбрать в таблицу те атрибуты (Position, Length, DefectValue, Class, SensorID) в которых атрибут Aggregate равен заданному значению. Наверно как-то запутано получилось... Пример XML: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Допустим, мне необходимо получить значения Position, Length, DefectValue, Class, SensorID, где Aggregate="PM". Делаю так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Но такая конструкция обрабатывается очень долго, минут 40. В связи с этим вопрос: Как ускорить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 09:18 |
|
||
|
Очень долгий разбор XML
|
|||
|---|---|---|---|
|
#18+
mozgen, чтобы теория не казалась сухой и была опора для изучения - вот тебе пример на твоих данных: Код: plsql 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. 26. 27. 28. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2016, 14:22 |
|
||
|
Очень долгий разбор XML
|
|||
|---|---|---|---|
|
#18+
Fogel, Спасибо, буду разбираться) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2016, 06:09 |
|
||
|
Очень долгий разбор XML
|
|||
|---|---|---|---|
|
#18+
В общих чертах разобрался, переделал вод себя, получилось это: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Но вот нюанс... в Worksheet'е (работаю в SQL Developer) все отрабатывает отлично, но в процедуре ругается на строку Код: plsql 1. с ошибкой Код: plsql 1. если вставляю INTO, то уже на строку Код: plsql 1. с ошибкой Код: plsql 1. да, "DESKRIPTION" написано верно, орфографически конечно нет, но так уж повелось :) не понимаю как быть, в чем трабл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2016, 09:25 |
|
||
|
Очень долгий разбор XML
|
|||
|---|---|---|---|
|
#18+
mozgen Код: plsql 1. А что, посложнее никак нельзя? :) Код: plsql 1. 2. 3. 4. 5. ...и таки да, в pl/sql нельзя выполнить просто select - обязательно надо как-то использовать результат. Либо select into, либо курсорный цикл, либо open for... но это уже совсем другая история, основы pl/sql называется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2016, 10:23 |
|
||
|
Очень долгий разбор XML
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, да, согласен, чет тупанул =) Хотя тупняк продолжается... можете подсказать КАК это сделать? О_о Че-то я в упор не понимаю как здесь можно данные в массив вставить да и вообще куда здесь цикл лепить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2016, 14:05 |
|
||
|
Очень долгий разбор XML
|
|||
|---|---|---|---|
|
#18+
mozgenandrey_anonymous, да, согласен, чет тупанул =) Хотя тупняк продолжается... можете подсказать КАК это сделать? О_о Че-то я в упор не понимаю как здесь можно данные в массив вставить да и вообще куда здесь цикл лепить... Всё зависит от того, что с данными надо сделать дальше. Разобрать то xml надо для чего-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2016, 16:12 |
|
||
|
Очень долгий разбор XML
|
|||
|---|---|---|---|
|
#18+
Алымов Анатолий, Вытаскиваю значения параметров и вставляю их в таблицу. данные по каждому дефекту пишутся в разные строки (следующий insert). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2016, 06:50 |
|
||
|
Очень долгий разбор XML
|
|||
|---|---|---|---|
|
#18+
так тебе никакого цикла не надо. insert into TABLENAME select ... from XMLTABLE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2016, 13:28 |
|
||
|
Очень долгий разбор XML
|
|||
|---|---|---|---|
|
#18+
Разобрался) получилось вот что: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Но задача усложнилась. Теперь (на самом деле и раньше нужно было) необходимо выбрать элементы из разных частей XML. Поясню: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Соответственно при запросе: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. В A1 логично возвращает NULL А при запросе Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Что еще более логично Код: plsql 1. Тут нюанс - ID встречается только один раз, т.к. это номер, на которому принадлежит вся последующая последовательность. В результате должно получиться так: ID A1 DefectPos DefectLength DefectAmplitude DefectClass SensorID Agregate25654 752055 24.330000000000002 0.1 15021 X 2 PM25655 752055 24.330000000000002 0.1 1848 X 4 PM25656 752055 24.330000000000002 0.1 7463 X 5 PM25657 752055 24.330000000000002 0.1 3756 X 13 PM25658 752055 24.330000000000002 0.1 3775 X 14 PM25659 752055 24.330000000000002 0.1 -01 X 17 PM25660 752055 24.330000000000002 0.1 1109 X 18 PM И у меня что-то ступор, ребят, подскажите как условие правильно составить, или два разных запроса объединить(?!), или как еще это сделать-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 08:59 |
|
||
|
Очень долгий разбор XML
|
|||
|---|---|---|---|
|
#18+
mozgen Код: plsql 1. Надо понимать, что есть точка отсчёта после XMLTABLE ('/Root/Results/Defect', и куда нужно от неё двигаться: Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 09:14 |
|
||
|
Очень долгий разбор XML
|
|||
|---|---|---|---|
|
#18+
Elic, О! точно, огромное спасибо!) Теперь все встало на свои места)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2016, 10:12 |
|
||
|
Очень долгий разбор XML
|
|||
|---|---|---|---|
|
#18+
Господа, решил продолжить тему. Ситуация изменилась в лучшую сторону, сейчас разбор проходит секунд за 30-60, но в результате это тоже очень долго. Как можно еще ускорить? Мой код: Код: plsql 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. 26. 27. 28. 29. 30. 31. 32. В среднем, часть XMLины которую пытаюсь разобрать состоит из 1К-1,05К строк, полагаю, что для таких размеров разбор слишком долгий... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2016, 07:27 |
|
||
|
Очень долгий разбор XML
|
|||
|---|---|---|---|
|
#18+
mozgen, поиграйся с XMLTRANSFORM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2016, 10:25 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39325966&tid=1886892]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
191ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
78ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 536ms |

| 0 / 0 |
