|
|
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
Привет! есть на входе в pl/sql функцию пакета результат работы предыдущего компонента в виде таблицы, естессно. исходная таблица: "номер точки""время корректировки""величина корректировки"3131231316546464601.11.15 00:00:0098.9873131231316546464601.12.15 00:00:0078.7923131231316546464601.01.16 00:00:0080.9693131231316546464601.02.16 00:00:0039.0953131231316546464601.03.16 00:00:0023.5483131231316546464601.04.16 00:00:0012.7263131231316546464601.05.16 00:00:0013.5243131231316546464601.06.16 00:00:007.9523131231316546464601.07.16 00:00:006.7486543219674987324101.12.15 00:00:0063.2876543219674987324101.01.16 00:00:0027.9516543219674987324101.02.16 00:00:0030.9896543219674987324101.03.16 00:00:0032.26543219674987324101.04.16 00:00:0013.8186543219674987324101.05.16 00:00:0014.4136543219674987324101.06.16 00:00:0012.9926543219674987324101.07.16 00:00:004.9429875416732164613501.11.15 00:00:00136.0039875416732164613501.12.15 00:00:00212.8849875416732164613501.01.16 00:00:00122.4379875416732164613501.02.16 00:00:0078.963964741598529896401.12.15 00:00:0093.2053964741598529896401.02.16 00:00:009.243964741598529896401.03.16 00:00:005.883964741598529896401.04.16 00:00:0011.763964741598529896401.05.16 00:00:003.153964741598529896401.06.16 00:00:001.263964741598529896401.07.16 00:00:001.624 надо из этих исходных данных перейти к таким: "номер точки""1""2""3""4""5""6""7""8""9"3131231316546464698.98778.79280.96939.09523.54812.72613.5247.9526.7486543219674987324163.28727.95130.98932.213.81814.41312.9924.94298754167321646135136.003212.884122.43778.963964741598529896493.2059.245.8811.763.151.261.624 не используя, ясно дело, число "9" как жестко известный предел кол-ва данных. по горизонтали должно быть столько пронумерованных столбцов по сгруппированным точкам, сколько их найдется в исходных данных. Т.е. если бы вдруг записей о первой точке было бы 15, к примеру - значит 15 пронумерованных столбцов и должно быть. Несуществующие данные для точек, как видно - ничем не заполняются. (null). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 19:10:07 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
попробуй pivot , правда если сможешь выкрутиться и не упасть от неизвестный предел кол-ва данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 19:15:50 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
черт, все усложняется. после последнего столбца нужен еще один. Итого по всем строкам. помогайте товарищи! как написать подходящий динамический код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 20:14:05 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
Познающий, Ты сначала обьясни как ты будешь обрабатывать результаты если число столбцов неизвестно? SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 21:26:15 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
Познающийчерт, все усложняется. после последнего столбца нужен еще один. Итого по всем строкам. помогайте товарищи! как написать подходящий динамический код? PIVOT через OdciTable интерфейс. Например Anton Scheffer's dynamic pivot function . Теперь создаем последовательность для поддержки hard parse (важно!): Код: plsql 1. 2. 3. 4. 5. 6. Теперь делаем пивот с обеспечением hard parse: Код: 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. Только все это баловство. Реально это нужно в отчетах и посему любой генератов отчетов делает все это куда проще. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 22:35:47 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
У нас нет генератора. и задачи ставят четко по имеющемуся по. т.е. есть субд оракл, таблицы в нем, данные. по ним надо как то сделать то, что описано. буквально. результаты выводятся потом в табличном виде в стороннюю прогу, что умеет работать с оракл по оси интерфейсу. И к примеру, вот выше моего поста результат не буквален. таблица итоговая имеет null ячейки не в тех местах, как у меня в примере нарисовано.... увы, селяви. надо как то выкрутиться. или очень убедительно доказать, что это невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 08:48:12 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
Познающий, Если уж совсем без вариантов, тогда обрабатывать в программе, к примеру при выводе в ексель идешь по курсору (ADOQuery или чего там у вас), номер столбца (j) увеличиваешь, значение 1 столбца сохраняешь в переменную (X), как только в первой колонке меняется значение (Value<>X) номер строки (i) набавляешь, j сбрасываешь на 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 09:53:33 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
nata44845Познающий, Если уж совсем без вариантов, тогда обрабатывать в программе, к примеру при выводе в ексель идешь по курсору (ADOQuery или чего там у вас), номер столбца (j) увеличиваешь, значение 1 столбца сохраняешь в переменную (X), как только в первой колонке меняется значение (Value<>X) номер строки (i) набавляешь, j сбрасываешь на 1. ну нет такой возможности. Прога только принимает таблицу. Ее надо сформировать как-то на стороне базы. ИЛИ !доказательно! пояснить, что это невозможно сделать при текущих условиях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 11:49:40 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
не пойму - тут вообще никак нельзя редактировать свои же сообщения? Добавка. А если ограничиться все же константой столбцов в число 12, к примеру. Допустим этот момент я еще смогу "пробить" в ТЗ. Хотя щаз этого и нельзя делать. Этот момент упростит положение? Как то легче станет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 11:53:13 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
не пойму - тут вообще никак нельзя редактировать свои же сообщения? Добавка. А если ограничиться все же константой столбцов в число 12, к примеру. Допустим этот момент я еще смогу "пробить" в ТЗ. Хотя щаз этого и нельзя делать. Этот момент упростит положение? Как то легче станет? P.S. точнее не просто 12, а ПОСЛЕДНИЕ 12 записей - т.к. есть сортировка по полю даты, как видно из исходных данных в первом моем посте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 11:55:04 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
ПознающийДобавка. А если ограничиться все же константой столбцов в число 12, к примеру. Допустим этот момент я еще смогу "пробить" в ТЗ. Хотя щаз этого и нельзя делать. Этот момент упростит положение? Как то легче станет? P.S. точнее не просто 12, а ПОСЛЕДНИЕ 12 записей - т.к. есть сортировка по полю даты, как видно из исходных данных в первом моем посте. легче станет - тогда можно использовать pivot с фиксированным набором полей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 12:00:13 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
А что должно получиться? варианты - новая табличка - вьюшка. Ну так, можно по данным посчитать количество колонок и заполнить, последовательно, из pl-sql кода, и скормить. как надо, так и заполнить. некрасиво, но работает. и задать регламент уничтожения, этих времянок, допустим через три дня. Или меньше - по оповещению от внешней системы, что данные забрали. т.е. если нужно из оракла сделать эксель с вба - то нужно из оракла делать .... эксель с вба ... последовательно рисующий в ячейках? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 12:10:43 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
ПознающийИ к примеру, вот выше моего поста результат не буквален. таблица итоговая имеет null ячейки не в тех местах, как у меня в примере нарисовано.... Нарисованы у тебя часы и трусы - в том-же столбце данные за разные даты, так-что как читать такой отчет непонятно. Но нет проблем: Код: 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. Или если хочешь все итоги в последнем столбце: Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 15:22:11 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
SY, странно, но для моего Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production на Ваш код я получаю ORA-00904: "PIVOT": недопустимый идентификатор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 16:50:12 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
ПознающийSY, странно, но для моего Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production на Ваш код я получаю ORA-00904: "PIVOT": недопустимый идентификатор у меня прокатывает только такое строение pivot оператора: SELECT * FROM ( SELECT column1, column2 FROM tables WHERE conditions ) PIVOT ( aggregate_function(column2) FOR column2 IN ( expr1, expr2, ... expr_n) | subquery ) ORDER BY expression [ ASC | DESC ]; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 17:01:27 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
Познающийстранно, но Ты прочитал по-диагонали: SYНапример Anton Scheffer's dynamic pivot function . Ты этот zip скачал? Тaм есть pivotFun.sql. Вот он-то и создает ф-цию pivot (не путать с PIVOT clause - Антон нeудачно, IMHO, выбрал имя ф-ции). SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 17:05:14 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
Познающийна Ваш код я получаю ORA-00904: "PIVOT": недопустимый идентификаторГлаза разуй: 19397255 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 17:06:21 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
1: Click 2: Код: 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. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 17:09:32 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
ндя, однако тяжелый способ самоубийства выходит..... ладно. применим этот новый pivot. но надо заметить, что в исходном посте фраза "Например ..{ссылка}.." никоим образом не подводит к тому, что ТОЛЬКО после скачки архива с доп.функционалом я могу воспользоваться советом. "Например - это всего лишь пример. Значит можно и не этот вариант брать" - я так посчитал... и взял стандартный pivot clause.... ок, спасибо всем за всю эту науку. бум вчитываться дальше.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 17:25:17 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
SY, кстати, в ветке https://asktom.oracle.com/pls/apex/f?p=100:11:0::::p11_question_id:4843682300346852395 за два поста до конца - Антон выкатил модифицированную версию этого "комбайна". Правда не ясно - проблему с hard|soft parse и мульти-сессионностью решил он или нет, но проект развивался с 2006. А Вы на форуме http://www.orafaq.com/forum/mv/msg/201346/653342/#msg_653342 как бы точку в обсуждениях не поставили? Barbara Boehmer осталась при мнении что решена проблема, а Вы - что не до конца? А предложенное мне решение - оно тоже с "подводными камнями"? Есть вариант, что я не получу верный итоговый отчет? К примеру, как дела с очередностью? всегда ли вертикальные столбцы "1""2""3""4""5""6""7""8""9" гарантированно будут в таком порядке? я нашел обсуждение - проблема с очередностью "вывернутых" строк в столбцы - актуальна для этого "комбайна" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 18:48:09 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
Познающий, Проблему hard pass обойти нeльзя. Мы вынуждены форсировать hard parse каждый раз посколько данные и соответственно число столбцов могли измениться и только hard pass вызывает OdciTableDescribe который и отвечает за опредeлeния числa столбцов. Решить её можно выполняя каждый раз тот-же SQL с другим текстом (например каждый раз рaзный комментарий). Я привел пример как это cдeлать в SQL*Plus. В том же SQL*Plus можно: Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 20:05:13 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
что-то не везет мне с этим "комбайном" ORA-29913: ошибка при выполнении ODCITABLEDESCRIBE callout 29913. 00000 - "error in executing %s callout" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 14:23:16 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
Познающийчто-то не везет мне с этим "комбайном" ORA-29913: ошибка при выполнении ODCITABLEDESCRIBE callout 29913. 00000 - "error in executing %s callout" Перeд тм как подкинуть SELECT ф-ции pivot проверь работает ли сам SELECT. Затем проверь годится ли он для ф-ции pivot - например ф-ция pivot не хавает WITH clause - необходимо все пихать в in-line view как в моем вызове. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 15:42:35 |
|
||
|
не пойму как тут можно выкрутиться.
|
|||
|---|---|---|---|
|
#18+
ок, с этой ошибкой разобрался. но теперь другая хрень: последний 10 столбец ЕСТЬ, но его содержимое не всё верное: ТОЧКИ 1 2 3 4 5 6 7 8 9 1098754167321646135136.003212.884122.43778.96550.2846543219674987324163.28727.95130.98932.213.81814.41312.9924.942200.5923964741598529896493.2059.245.8811.763.151.261.624126.1193131231316546464698.98778.79280.96939.09523.54812.72613.5247.9526.748362.341 а - понял - его содержимое "прижалось" к данным. к примеру, первая строка - сумма "550.284" - она в 5 столбце - сразу за данными, а не в отдельном, специальном итоговом 10 столбце. это вот как вышло??? у Вас верный результат, а у меня шиш.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 16:25:28 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39272565&tid=1887875]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
188ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 188ms |
| total: | 492ms |

| 0 / 0 |
