|
|
|
ORA-22905 - Как установить приоритет выполнения части запроса
|
|||
|---|---|---|---|
|
#18+
Доброго дня господа ! Запрос, работает с массивами = select * from table(select POS from TRN_LIST) и пользов. типом pipelined функция Реализован with - ми если выполнять его в два этапа - основной запрос RCC_KREDIT явно слить в таблицу - к этой таблице подключить пользовательский тип все в порядке Если реализовать в один этап - ошибка = Ora-22905 cannot access rows from a non nested table item Насколько понимаю поль. тип не может получить данных , их на момент вызова еще нет Дополнения и пояснение - With реализация для параметризирован. запроса - TABLEDAY = параметр. дат - TRN_LIST = набор констанат - RCC_KREDIT это основной запрос, он делает сборку данных для послед. передачи в функцию расчета (поль. тип ttRcc) Вот надо как то сказать - сначала полностью собери данные и сохрани их в времен. таблице (/*+ Materialize */) - связь с типом ttRcc и расчет сделай "ПОПИСЖЕ". Заранее благодарен ! Код: 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. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2017, 16:46 |
|
||
|
ORA-22905 - Как установить приоритет выполнения части запроса
|
|||
|---|---|---|---|
|
#18+
упрости свою простыню с пятнами, смотреть тошно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2017, 17:31 |
|
||
|
ORA-22905 - Как установить приоритет выполнения части запроса
|
|||
|---|---|---|---|
|
#18+
Чехов, Верю ... тогда пояснить еще сложнее Не понимает синтаксиса вложенного запроса Ошибка =Case when B_TRNTYPE in(select * from table(select POS from TRN_LIST)) Нормально=Case when TB_TRNTYPE in('CT2111','CT0040','CT0041','CT0042','CT0043','CT0047','CT0052') Чем можно заменить ? With TRN_LIST - хотелось бы оставить, реляцию создавать не хотелось бы (в смысле не сносить во FROM) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2017, 18:04 |
|
||
|
ORA-22905 - Как установить приоритет выполнения части запроса
|
|||
|---|---|---|---|
|
#18+
HOME_X, Т.е. непонимает именно ссылку на таблицу, неважно какую ............Case when A.TB_TRNTYPE in (select 'DDD' from DUAL )....... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2017, 18:17 |
|
||
|
ORA-22905 - Как установить приоритет выполнения части запроса
|
|||
|---|---|---|---|
|
#18+
HOME_X, типа если 1 раз обьявить то потом проще получать первый и последний день? это как ронять себе на ногу гирю и смотреть на результат Код: plsql 1. 2. 3. 4. 5. 6. 7. обьявить таблицу из 1 строки чтобы запихнуть в три столбца три массива... три таблички тебя чем не устроили? Код: plsql 1. 2. 3. 4. 5. а так писать надо чтобы никто не догадался? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. или тебе платят построчно? и зачем тебе таблица Т если ты все равно делаешь select A.* идиотизм не лечиться. ты же не проограмист.. ты говнокодер. помогать и что-то обьяснять можно если человек хоть как то следит за кодом. а в дерьме копаться за бесплатно - увольте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2017, 19:43 |
|
||
|
ORA-22905 - Как установить приоритет выполнения части запроса
|
|||
|---|---|---|---|
|
#18+
HOME_XТ.е. непонимает именно ссылку на таблицу, неважно какую ............Case when A.TB_TRNTYPE in (select 'DDD' from DUAL )......Врёшь. Ты просто не умеешь декомпозировать, а лишь владеешь ремеслом быдло-копи-паста. Если бы владел упрощением, то смог бы и сам в процессе понять, где лопух, не вынося сор на форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2017, 19:54 |
|
||
|
ORA-22905 - Как установить приоритет выполнения части запроса
|
|||
|---|---|---|---|
|
#18+
VintHOME_X, типа если 1 раз обьявить то потом проще получать первый и последний день? это как ронять себе на ногу гирю и смотреть на результат Все параметрические переменные - сносятся в первые строки кода. Так читабельнее и удобнее при изменении, не надо шарить по полному листингу кода Этот with параметризирует временной период могут использоваться во многократно Vintобьявить таблицу из 1 строки чтобы запихнуть в три столбца три массива... три таблички тебя чем не устроили? Где Вы намерены хранить эти три таблички ? В базе ? Зачем ? Они не являются глобальными данными и используются исключительно для одного отчета Эти константы классифицированы фунционал. и компактно записаны одной строкой и тремя полями Чем не нравиться такая запись ? Oracle такое понимает .... (всегда ли это вопрос ?) Это with параметризирует локальные константы, дает возможность их менять в одном месте Два with можно совместить.... , об этом после Vintа так писать надо чтобы никто не догадался? Это уже практиковал (комбинировал) код после возникновения ошибки в ПРОДУКТИВЕ выглядит так Где псевдоним А(В) - это запрос по сборке исходных данных T - тип который отвечает за расчет /* select T.* from (select /*+ No_Merge * / b.id_contract_sap, b.program, b.network, .............. b.DURATION, b.grace, Cast(null as Varchar2(10)) MODES from RCC_KREDIT b ) A, table(ttRcc(A.id_contract_sap, A.program, .................. ) T */ Так понятно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2017, 20:42 |
|
||
|
ORA-22905 - Как установить приоритет выполнения части запроса
|
|||
|---|---|---|---|
|
#18+
ElicHOME_XТ.е. непонимает именно ссылку на таблицу, неважно какую ............Case when A.TB_TRNTYPE in (select 'DDD' from DUAL )......Врёшь. Ты просто не умеешь декомпозировать, а лишь владеешь ремеслом быдло-копи-паста. Если бы владел упрощением, то смог бы и сам в процессе понять, где лопух, не вынося сор на форум. Первоначальный вопрос звучал так - основной запрос RCC_KREDIT работает нормально, со всеми with и массивами (если запустить его отдельно) - подвязываем поль. тип ttRcc - получаем ошибку - если слить основной запрос RCC_KREDIT ЯВНО в таблицу - подвязываем поль. тип - НЕ получаем ошибку !!! Отсюда первая попытка решить проблемы Сначала заставить базу выполнить сборку данных RCC - материализовать результат далее вторым этапом связать Как это сделать - пожалуйста четко и конкретно ? Второе решение попытаться переписать ПОПОНЯТНЕЕ основной код = RCC_KREDIT Как искать в массиве, умею так select .............. Case when A.TB_TRNTYPE in (select * from table(H.ATM)) then ................ from ....... A, TRN_LIST H -- здесь всегда одна запись Есть еще варианты - уточните на примере.. Делать множественную реляцию не интересно Заранее благодарен ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2017, 21:13 |
|
||
|
ORA-22905 - Как установить приоритет выполнения части запроса
|
|||
|---|---|---|---|
|
#18+
HOME_XОтсюда первая попытка решить проблемыМетод тыка. HOME_XКак это сделать - пожалуйста четко и конкретно ? уточните на примереНаивность вкупе с наглостью? Но совет дам. Твоя портянка только годится только для (не)печати на мягкой бумаге. HOME_XДелать множественную реляцию не интересноГадать на гуще версий - тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2017, 22:06 |
|
||
|
ORA-22905 - Как установить приоритет выполнения части запроса
|
|||
|---|---|---|---|
|
#18+
ElicHOME_XОтсюда первая попытка решить проблемыМетод тыка. HOME_XКак это сделать - пожалуйста четко и конкретно ? уточните на примереНаивность вкупе с наглостью? Но совет дам. Твоя портянка только годится только для (не)печати на мягкой бумаге. HOME_XДелать множественную реляцию не интересноГадать на гуще версий - тоже. Если Вы знаете Все настолько хорошо что Вам не любопытно Зачем тратить СВОЕ и ЧУЖОЕ время, натирать мозоли и гадить сервер столь содержательными постами.....? P.S. Всего доброго ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2017, 23:02 |
|
||
|
ORA-22905 - Как установить приоритет выполнения части запроса
|
|||
|---|---|---|---|
|
#18+
HOME_Xгадить сервер столь содержательными постами.....?Ты слишком высокого мнения о своём содержании. HOME_XP.S. Всего доброго ...Кто хочет видеть личного, тот видит только его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2017, 23:07 |
|
||
|
ORA-22905 - Как установить приоритет выполнения части запроса
|
|||
|---|---|---|---|
|
#18+
HOME_XЧехов, Верю ... тогда пояснить еще сложнее Не понимает синтаксиса вложенного запроса Ошибка =Case when B_TRNTYPE in(select * from table(select POS from TRN_LIST)) Нормально=Case when TB_TRNTYPE in('CT2111','CT0040','CT0041','CT0042','CT0043','CT0047','CT0052') Чем можно заменить ? With TRN_LIST - хотелось бы оставить, реляцию создавать не хотелось бы (в смысле не сносить во FROM)Что именно не понимает то? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Как альтернатива, можно еще 1) либо unnest коллекции Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 2) либо воспользоваться условием member of Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Это была теоретическая часть. Фактически, я бы не рекомендовал применять этот инструментарий, не понимая как он работает и для чего предназначен. Ты можешь столкнуться с массой проблем начиная от ненужного использования CPU, неверной оценки кардинальности и кривых планов и заканчивая тем, что невозможно будет использовать параллельное выполнение запроса из-за примененных не к месту коллекций. PS. Не знаю чего все так накинулись, но в следующий раз потрать еще немного времени чтоб выпилить лишнее. Видно что ты пытался что-то сделать, но подобные полотна вызывают раздражение. И по прежнему до конца не ясно, что у тебя не взлетело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2017, 01:40 |
|
||
|
ORA-22905 - Как установить приоритет выполнения части запроса
|
|||
|---|---|---|---|
|
#18+
HOME_X, сколько работает? если нет пробуй проставить кардиналити у коллекций. Код: 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. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2017, 10:24 |
|
||
|
ORA-22905 - Как установить приоритет выполнения части запроса
|
|||
|---|---|---|---|
|
#18+
Извините господа - малость отсутствовал Решение следующее 1. Простое и НЕВЕРНОЕ (как вариант возможен) - представить список в виде строки и осуществлять поиск через InStr 2. Правильное , искать в коллекции через member of - Case when A.TB_TRNTYPE member of C.ATM then ........... 3.Рекомендации Oracle о явном приведении типа не к чему не привело 22905, 00000, "cannot access rows from a non-nested table item" // *Cause: attempt to access rows of an item whose type is not known at // parse time or that is not of a nested table type // *Action: use CAST to cast the item to a nested table type Case when A.TB_TRNTYPE in (select * from table(cast(C.POS as Mdsys.SdorIdTab))) then F.GRACE else 0 end 4.Попытки упростить конструкцию запроса, оставить только структуру - ошибка ушла, но хотелось бы понять ее причину (возможно в данных - поиграюсь при случае) Но вариант два вполне приемлем - может кому пригодится Спасибо за уделенное время и участие ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 18:23 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=171&tid=1886255]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
105ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 413ms |

| 0 / 0 |
