|
|
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
Доброго дня, уважаемые форумчане. Суть проблемы: есть package, с кол-вом строк ~ 100 000 (автоматическая генерация, будь она не ладна). В пакете есть функция вида: Код: plsql 1. 2. 3. 4. 5. 6. 7. Если функцию поместить в начало пакета, то все корректно работает, а если в конец пакета, то возвращает некорректное значение. Если же в теле функции вместо числа 268435456 указать функцию power(2, 28) (т.е уйти от явного присваивания переменной числа), то все работает независимо от положения функции внутри пакета. Глобальной переменной с именем nRes нет. Результат работы функции: Код: plsql 1. 2. 3. Если внутри функции изменить присваиваемое значение , допустим 268435457, то результат функции не измениться: 429514 Версия БД: Код: plsql 1. 2. 3. 4. 5. 6. 7. Параметры БД во вложении dbprm.txt Подскажите, куда копать? shared pool? OS? Буду признателен за любой наводящий ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 15:54 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
Ivan Rabashchenko, Код: plsql 1. 2. 3. 4. 5. 6. 7. Аналогично? Играться с plsql_optimize_level в сторону уменьшения пробовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 16:19 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. Да, аналогично: некорректное поведение. Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 16:58 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
В dba_source что падает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 17:21 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
Ivan Rabashchenko, на правах версии переполняется "таблица констант" если в конец пакета добавить еще одну ф-цию fIr$Tmp2 с константой (напр 268435457), они будут правильно работать? ps перемещая по телу пакета ф-цию, возможно можно определить когда перестает работать ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 17:22 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
AmKadВ dba_source что падает? в source наверное все ок, а вот что в p-code вопрос ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 17:24 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
AmKadВ dba_source что падает? В словаре все зачетно. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 17:35 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
StaxIvan Rabashchenko, на правах версии переполняется "таблица констант" если в конец пакета добавить еще одну ф-цию fIr$Tmp2 с константой (напр 268435457), они будут правильно работать? 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. все разное ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 17:56 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
Пусть Вас не смущает название пакета BP$5024_PO_tmp, это и есть изначально указанный svc$23532pkg ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 17:59 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
StaxAmKadВ dba_source что падает? в source наверное все ок, а вот что в p-code вопрос ..... stax Простите за мою неграмотность, p-code, это Вы про DIANA ? Starting with release 7.3.4, the DIANA for package bodies is thrown away, not used, and not stored in the database Или под p-code Вы имели ввиду иное? Просветите, пжл, что это и как его позырить в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 18:16 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
Ivan Rabashchenko, а если сделать 268435457+0? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 18:16 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
хотя имхо надо сразу в корень проблемы смотреть раз уж у вас Ivan Rabashchenkoавтоматическая генерациято почему бы просто несколько разных пакетов/функций не генерировать? гораздо удобнее бы вам стало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 18:22 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
xtenderхотя имхо надо сразу в корень проблемы смотреть раз уж у вас Ivan Rabashchenkoавтоматическая генерациято почему бы просто несколько разных пакетов/функций не генерировать? гораздо удобнее бы вам стало Я с Вами полностью согласен, но генератор - священная корова. Да и цель иная: понять природу ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 18:26 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
Ivan Rabashchenko, А если Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 18:27 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
xtenderIvan Rabashchenko, а если сделать 268435457+0? Изменил штатную : Код: plsql 1. 2. 3. 4. 5. 6. Переместил в середину пакета на строку 50 000 третий вариант: Код: plsql 1. 2. 3. 4. 5. 6. Результат Код: plsql 1. 2. 3. 4. Т.е с поднятием вверх по пакету функция начинает работать верно. Я могу, конечно, найти эту точку, но это мало чем поможет, хотя если кому-то эта информация поможет, готов проделать эту работу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 18:30 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
я про точку, ниже которой перестает работать функция ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 18:31 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
Ivan RabashchenkoStaxпропущено... в source наверное все ок, а вот что в p-code вопрос ..... stax Простите за мою неграмотность, p-code, это Вы про DIANA ? Starting with release 7.3.4, the DIANA for package bodies is thrown away, not used, and not stored in the database Или под p-code Вы имели ввиду иное? Просветите, пжл, что это и как его позырить в БД. да диана я не коверялся там анврапщики хорошо разбираются наскоко я понимаю код хранится в sys.IDL%$ ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 18:35 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
Ivan RabashchenkoStarting with release 7.3.4, the DIANA for package bodies is thrown away, not used, and not stored in the databaseЭто откуда? Смотри в доке plsql лимиты, там есть что посчитать. По объему parsed_code грозятся ошибкой pls-123. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 18:35 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopIvan Rabashchenko, А если Код: plaintext на MOSC сразу на это наткнулся. Мало чем помогло: Код: plsql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 18:37 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
Ivan Rabashchenko, а перекомпиляция с включенным/выключенным дебагом тоже не помогает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 18:42 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
Ivan RabashchenkoТ.е с поднятием вверх по пакету функция начинает работать верно. Я могу, конечно, найти эту точку, но это мало чем поможет, хотя если кому-то эта информация поможет, готов проделать эту работу. возможно и другие ф-ции c константами после точки "невозврата" работают с "глюками" ета простая и Вы сразу определили фичу ps как метод борьбы попробовать в начале пакета добавить функцию "заглушку" с константами ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 18:43 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
Расплющенная принцессаIvan RabashchenkoStarting with release 7.3.4, the DIANA for package bodies is thrown away, not used, and not stored in the databaseЭто откуда? Смотри в доке plsql лимиты, там есть что посчитать. По объему parsed_code грозятся ошибкой pls-123. Лимиты посмотрел. Вроде в границах допустимого. Указанную фразу взял отседа: Size Limitations on PLSQL Packages (Doc ID 62603.1): Additional Information: a) DIANA is represented in IDL. The linear version of IDL is stored on disk. The actual parse tree is built up and stored in the shared pool. This is why the size of DIANA in the shared pool is typically larger than on disk. b) DIANA for called procedures is required in the shared pool only when you create procedures. In production systems, there is no need for DIANA in the shared pool (but only for the MCODE). c) Starting with release 7.3.4, the DIANA for package bodies is thrown away, not used, and not stored in the database. This is why the PARSED_SIZE (i.e. size of DIANA) of PACKAGE BODIES is 0. На pls-123 не нарываюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 18:51 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
В продолжении об лимитах: Код: plsql 1. 2. 3. 4. И по строкам в пакете (из той же доки): Starting with 8.1.3, the limit was relaxed for package bodies and type bodies which can now have approximately up to about 6,000,000 lines of code. Я понимаю, что строки бывают разные, но в пакете строки-коротыши и малым кол-вом токенов ( (identifiers, operators, functions и т.д.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 19:06 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
xtenderIvan Rabashchenko, а перекомпиляция с включенным/выключенным дебагом тоже не помогает? Код: plsql 1. 2. 3. 4. 5. 6. 7. Не помогло. Размер: Код: plsql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 19:20 |
|
||
|
Странное поведение переменных в пакетах, с большим количеством строк
|
|||
|---|---|---|---|
|
#18+
StaxIvan RabashchenkoТ.е с поднятием вверх по пакету функция начинает работать верно. Я могу, конечно, найти эту точку, но это мало чем поможет, хотя если кому-то эта информация поможет, готов проделать эту работу. возможно и другие ф-ции c константами после точки "невозврата" работают с "глюками" ета простая и Вы сразу определили фичу ps как метод борьбы попробовать в начале пакета добавить функцию "заглушку" с константами ..... stax Все верно, ниже определенной точки в пакете функции перестают корректно работать. Мой пример - упрощенная модель. Вы писали: "как метод борьбы попробовать в начале пакета добавить функцию "заглушку" с константами" Сори, не понял. Не могли бы Вы раскрыть тему? Просто в начале пакета сделать фейковую функцию вида: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2017, 19:25 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=134&tid=1884763]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 364ms |

| 0 / 0 |
