|
|
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
Oracle 11.2.04 вот тестовый запрос, суть в том что есть много разных строк-кодограмм (данные через разделитель) и в зависимости от типа, парсить нужно по разному. система сторонняя, т.к. запрос должен использовать только стандартные типы (пакеты/типы создавать нельзя). идея общего решения такая. PARSING - определяет на каком месте по порядку находится то или иное значение для определенного типа кодограммы далее идет парсинг строки на строки-значения и упаковка во вложенную таблицу потом подзапросом берется значение с нужным номером строки в зависимости какой нужен тэг и какой тип кодограммы. но работает только для первого элемента, хотя если делать count/max/min в подзапросах то видно что значения там есть и нужное кол-во строк во вложенной таблице. не понимаю что за глюк PS было решение через xml парсинг (заменя разделитея на тэги и получение значения через '/c/a[@num='|| OPER_TYPE ||']/text()'), но скорость не устроила, хотел так попробовать. Код: 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 10:31 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
barrabasно работает только для первого элемента, Код: plsql 1. RTFM Conditions testing for ROWNUM values greater than a positive integer are always … (FAQ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 10:36 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
Берется только первое значение из первой строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 10:39 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
Elicbarrabasно работает только для первого элемента, Код: plsql 1. RTFM Conditions testing for ROWNUM values greater than a positive integer are always … (FAQ) да с rownum тупанул, согласен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 10:43 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
почему для каждой строки одна и таже вложенная таблица, это видно по значению первого поля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 10:46 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
barrabasно скорость не устроилаСопровождаемость vs говнокодистось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 10:50 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
Elicbarrabasно скорость не устроилаСопровождаемость vs говнокодистось Elicbarrabasно скорость не устроилаСопровождаемость vs говнокодистось да, я с ровнумом лоханулся, что-то меня в массивы переклинило, начал рассматривать выборку не как таблицу а как коллкецию, а ровнум индексом :) именно и хочется сделать и быстро и сопровождаемость чтобы осталась . подумаю над substr/instr с регулярками еще но по поводу что всегда ссылка на одну коллекцию же - это баг или я опять пропустил RTFM какой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 10:57 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. разве не хрень? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 11:02 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
во второй строке же A5CFE3AFD5F4418693FDFFFD69AE5C90 должно быть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 11:05 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
сама задача просто на regexp_substr(k.CODOGRAMM, '[^~]+', 1, ПОЗИЦИЯ) решается :), с небольшим анализом на несуществующие теги :). просто переписывание XML парсинга не туда направило полет мысли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 11:29 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
barrabas, Код: plsql 1. если я понял о чем речь, будет намного проще и быстрее subsr + instr ~ ps просто интересно хмл как использавали что долго? ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 12:53 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
Начните с простого: Код: 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. 33. 34. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 13:36 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
Staxbarrabas, Код: plsql 1. если я понял о чем речь, будет намного проще и быстрее subsr + instr ~ ps просто интересно хмл как использавали что долго? ..... stax дали на переработку старую прогу, нужно было много чего добавить/исправить. начал проверять запрос, как-то долго показалось именно парсинг. вид следующий (это не реальный запрос, а действиующий пример, как парсили) Код: 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. поправил на regexp_substr Код: 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 13:44 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
barrabas дали на переработку старую прогу, нужно было много чего добавить/исправить. начал проверять запрос, как-то долго показалось именно парсинг. вид следующий (это не реальный запрос, а действиующий пример, как парсили) спасибо практики с хмл мало, собираю чужой опыт парсится для каждой строки, мож потому долго зы я так понимаю счас EXTRACT депресед зыы ели есть время я б попробовал ora:tokenize для статистики , а так 20980873 .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 13:55 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
Staxbarrabasдали на переработку старую прогу, нужно было много чего добавить/исправить. начал проверять запрос, как-то долго показалось именно парсинг. вид следующий (это не реальный запрос, а действиующий пример, как парсили) спасибо практики с хмл мало, собираю чужой опыт парсится для каждой строки, мож потому долго зы я так понимаю счас EXTRACT депресед зыы ели есть время я б попробовал ora:tokenize для статистики , а так 20980873 .... stax в данном случае думаю уже некуда искорять. если раньше 1000 записей выбиралась за 15-17 сек (а записей на порядки больше), реально ждали люди пару часов с regexp_substr эти 1000 записей 1-1,5 сек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 14:00 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
barrabasв данном случае думаю уже некуда искорять. если раньше 1000 записей выбиралась за 15-17 сек (а записей на порядки больше), реально ждали люди пару часов с regexp_substr эти 1000 записей 1-1,5 сек имхо 20980873 побыстрее будет .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 14:04 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousНачните с простого: Код: 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. 33. 34. так быстрее всего. быстрее регулярки раза в 1,5. код конечно не очень читаемый, много мест где забыть скописастить нужное поле можно, но думаю так сделаю я сразу думал об этом варианте, но как-то красоты хотелось, но 1,5-2 раза выше скорость победила ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 14:16 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
Staxbarrabasв данном случае думаю уже некуда искорять. если раньше 1000 записей выбиралась за 15-17 сек (а записей на порядки больше), реально ждали люди пару часов с regexp_substr эти 1000 записей 1-1,5 сек имхо 20980873 побыстрее будет .... stax да, протестил мне показалось что много instr тоже не очень, но регулярка хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 14:18 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
вот ситуация с multiset как-то напрягла, я помню использовал его давно в некоторых проектах, вот и думаю, правильно ли там работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 14:19 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, спасибо, я бы заленился писать инстры для проверки скорости, остановился бы на регулярке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 14:28 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
barrabasвот ситуация с multiset как-то напрягла, я помню использовал его давно в некоторых проектах, вот и думаю, правильно ли там работает в оракаля where rownum = 3 не прокатит получается надо обратно во вьюшку имхо можно строку распарсить (regular, substr, хмл ...) в таблицу и полученное соеденить с PARSING + pivot но всеравно будет запутанее и медленнее 20980873 ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 14:59 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
Staxbarrabasвот ситуация с multiset как-то напрягла, я помню использовал его давно в некоторых проектах, вот и думаю, правильно ли там работает в оракаля where rownum = 3 не прокатит получается надо обратно во вьюшку имхо можно строку распарсить (regular, substr, хмл ...) в таблицу и полученное соеденить с PARSING + pivot но всеравно будет запутанее и медленнее 20980873 ..... stax да это понятно, я сразу после Elic допер, что тормозил :), там же в другом херня Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. выводит CODOGRAMMMAX_VAL1~2~334~5~6 3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 15:24 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
barrabasтам же в другом херняоптимизатор не понял, что есть корреляция и закешировал результат подзапроса. Добавь на верхний уровень подзапроса ссылку на наружний запрос по типу (select ... from table(...) innerQ where outerQ.codogramm is not null). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 16:26 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
Работавокруг, да около, Ну или так: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 16:38 |
|
||
|
Не работает подзапрос multiset и отбратно
|
|||
|---|---|---|---|
|
#18+
barrabasStaxпропущено... в оракаля where rownum = 3 не прокатит получается надо обратно во вьюшку имхо можно строку распарсить (regular, substr, хмл ...) в таблицу и полученное соеденить с PARSING + pivot но всеравно будет запутанее и медленнее 20980873 ..... stax да это понятно, я сразу после Elic допер, что тормозил :), там же в другом херня Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. выводит CODOGRAMMMAX_VAL1~2~334~5~6 3 херня какая-то пятница, перегрелся наверное я если не баг, не могу понять почему так ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2017, 16:43 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39558806&tid=1884853]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
150ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 438ms |

| 0 / 0 |
