|
|
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
fortnetДумаю, константа или не константа - не повлияет на механизм , управляющий состоянием пакета.Думать - это хорошо, однако и это тоже нужно уметь делать правильно. RTFM Package Treated as Stateless if State is Constant for Life of Session (FAQ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 15:35 |
|
||
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
Vintпочему надо именно F_NEW CONSTANT VARCHAR2(20) = 'F_NEW'; и потом использовать переменную F_NEW вместо того чтобы просто не написать 'F_NEW'? хоть раз за все время проекта такая константа менялась и вам действительно приходилось менять ее значение после выкатки в продакшн?Ошибки в написании одной и той же именованной константы в разных местах использования отлавливаются на ранних стадиях компилятором. Говнокод же с ошибками в литералах может жить вечно, не догадываясь о своей говнокодистости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 15:40 |
|
||
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
Elic, я задал вполне конкретные вопросы автору опуса, зачем ты можешь использовать константы я и сам могу придумать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 15:54 |
|
||
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
ElicfortnetДумаю, константа или не константа - не повлияет на механизм , управляющий состоянием пакета.Думать - это хорошо, однако и это тоже нужно уметь делать правильно. RTFM Package Treated as Stateless if State is Constant for Life of Session (FAQ) Реально даже в 11.2.0.2 varchar2 константы делают пакет stateful. А вот number, да разрешили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 16:40 |
|
||
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
Elic, Написал пакет, некоторые значения, которые часто используются и возвращаются функцией (отличаются от базы к базе) вынес в глобальные переменные. Есть проблема что пакет очень часто меняет состояние. Есть подозрение что проблема из-за глобальных переменных. Поэтому хочу узнать, поможет ли замена констант на функции. И вообще как при изменении пакета, сделать так, что бы пользователю не валилась ошибка о недоступности функции пакета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 17:42 |
|
||
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
Vint, Пакет используется на разных рабочих базах, и на каждой функция возвращает свое значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 17:43 |
|
||
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
Gogol Написал пакет, некоторые значения, которые часто используются и возвращаются функцией (отличаются от базы к базе) вынес в глобальные переменные. Есть проблема что пакет очень часто меняет состояние. Есть подозрение что проблема из-за глобальных переменных. Вообщем то, можно решить двумя путями - 1. Не рекомпилировать package body + не инвалидировать если пакет stateful. 2. Сделать пакет stateless, почитав для этого https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/packages.htm#LNPLS804 , чтобы понять какие компоненты пакета и при каких условиях (напр. "Therefore, a package that is stateless when compiled at one optimization level might be stateful when compiled at a different optimization level") делают его stateful. GogolПоэтому хочу узнать, поможет ли замена констант на функции. Нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 18:24 |
|
||
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
Gogolчасто меняет состояниеНе надо перевирать своими словами. Излагай факты. GogolЕсть подозрение что проблема из-за глобальных переменных.Это не причина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 18:25 |
|
||
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
GogolИ вообще как при изменении пакета, сделать так, что бы пользователю не валилась ошибка о недоступности функции пакета. ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2017, 18:30 |
|
||
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
Вот тут еще про то что официальная документация несколько недоговаривает: http://www.sql.ru/forum/1179250/ora-4068-with-compile-time-constant Оказывается и в 12.1.0.2 не исправили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2017, 07:31 |
|
||
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
Ask, На мой взгляд, для 12c есть объяснение http://docs.oracle.com/database/122/LNPLS/plsql-packages.htm#GUID-001EF960-7491-411B-A5F3-D1260A45794B SERIALLY_REUSABLE Packages SERIALLY_REUSABLE packages let you design applications that manage memory better for scalability. If a package is not SERIALLY_REUSABLE, its package state is stored in the user global area (UGA) for each user. Therefore, the amount of UGA memory needed increases linearly with the number of users, limiting scalability. The package state can persist for the life of a session, locking UGA memory until the session ends. In some applications, such as Oracle Office, a typical session lasts several days. If a package is SERIALLY_REUSABLE, its package state is stored in a work area in a small pool in the system global area (SGA). The package state persists only for the life of a server call. After the server call, the work area returns to the pool. If a subsequent server call references the package, then Oracle Database reuses an instantiation from the pool. Reusing an instantiation re-initializes it; therefore, changes made to the package state in previous server calls are invisible. (For information about initialization, see "Package Instantiation and Initialization".) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2017, 10:20 |
|
||
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
dba123На мой взгляд, для 12c есть объяснениеНет, ты просто чего-то не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2017, 10:32 |
|
||
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
GogolElic, Написал пакет, некоторые значения, которые часто используются и возвращаются функцией (отличаются от базы к базе) вынес в глобальные переменные. Есть проблема что пакет очень часто меняет состояние. Есть подозрение что проблема из-за глобальных переменных. Поэтому хочу узнать, поможет ли замена констант на функции. И вообще как при изменении пакета, сделать так, что бы пользователю не валилась ошибка о недоступности функции пакета. Move all constants and variables into a stand-alone package spec and reference those from your initial package. Thus when the status of your original package is invlidated for whatever reason, it has no package state and can be recompiled automatically, however the package containing the vars/const will not become invalidated as it has no dependencies, so the state that is in memory for that package will remain and can continue to be used. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2017, 12:00 |
|
||
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
dba123Ask, На мой взгляд, для 12c есть объяснение [/src] Ну это не объяснение, а еще один вариант как сделать пакет с константами stateless. К сожалению у SERIALLY_REUSABLE есть свои минусы - такие пакеты нельзя дергать из триггеров и sql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2017, 12:39 |
|
||
|
Автоматическая перекомпиляция при обращении к пакету. Ткните носом в доку.
|
|||
|---|---|---|---|
|
#18+
Большое спасибо! Константы вынес в отдельный пакет. Пользователь ошибку ORA-04068: existing state of packages has been discarded ловить перестал. Константы добавляются очень редко, а обновления рабочего пакета происходит постоянно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 09:44 |
|
||
|
|

start [/forum/topic.php?fid=52&gotonew=1&tid=1886332]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
175ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 527ms |

| 0 / 0 |
