powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Exception в инициализации пакета.
6 сообщений из 6, страница 1 из 1
Exception в инициализации пакета.
    #39648668
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет коллеги.
В блоке инициализации пакета обявляется переменная с пользовательсктм типом OBJECT.
Причёи этот объект имеет свой конструктор, и он вызывается сразу же при объявлении переменной. Что-то типа такого:

create or replace package body package_name is
variable userObjectType := userObjectType.constructor_function('init-parameter');

И вот есть у нас наш АРМик, который вызывает наш пакет. Переменная пытается инициализироваться конструктором, в конструкторе происходит ошибка.
На бою очень редко происходит, раз в пол-года (но приводит к тому, что сервис для клиентов останавливается). На тесте чаще, но тоже не каждый месяц, ловить сложно.
Теперь мы в нашей сессии имеем инициализированный пакет, на котором не прошла инициализация объекта.
При повторном обращении к пакету инициализация переменной уже не пытается пройти - пакет-то уже инициализирован!
Но объект имеет значение null, и я не могу обращаться к методам объекта, возникает ошибка: "ORA-30625: method dispatch on NULL SELF argument is disallowed".
Кода написано дохрена. Таких пакетов около 500 штук. Ломается в разных пакетах. Переписывать их все - очень не хотелось бы.

Идеальный выход видится такой: если АРМ видит, что происходит ошибка в инициализации любого пакета - то переоткрывать сессию (коннект к базе).
Но вот главный вопрос: как АРМу понять, что ошибка была именно в инициализации пакета?

Можно, конечно, переоткрывать сессию по ошибке "ORA-30625: method dispatch on NULL SELF argument is disallowed". Это проще всего. Это даже решит нашу проблему. (Или даже вообще: по любой ошибке переоткрывать сессию.)
Но хочется немного разобраться в механике оракла: как (в общем случае, не переписывая пакеты) не допустить исполнение пакета, у которого при инициализации произошла ошибка.
...
Рейтинг: 0 / 0
Exception в инициализации пакета.
    #39648701
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22При повторном обращении к пакету инициализация переменной уже не пытается пройти - пакет-то уже инициализирован! Starting with Oracle Database 12c Release 1, an error raised during package initialization leaves the package uninitialized.
...
Рейтинг: 0 / 0
Exception в инициализации пакета.
    #39648708
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну гугля говорит следующее:

https://livesql.oracle.com/apex/livesql/file/content_C0H8TJYPQ47XQZLMUO4T7EKC9.html

..... In 12.1 and higher, when a package fails to initialize, it is marked as uninitialized.
...
Рейтинг: 0 / 0
Exception в инициализации пакета.
    #39648719
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shurka22...Можно, конечно, переоткрывать сессию....
Мне кажется, что DBMS_SESSION.RESET_PACKAGE или MODIFY_PACKAGE_STATE должно быть достаточно

shurka22...
Но вот главный вопрос: как АРМу понять, что ошибка была именно в инициализации пакета?
...

В секции инициализации пакета явно доступна обработка ошибок.
Т.ч. проблемы нет. Обрабатывайте ошибки, как хотите

Другое дело, что инициализацию переменных нужно перенести туда, где ей и место - в секцию инициализации.
...
Рейтинг: 0 / 0
Exception в инициализации пакета.
    #39648759
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevДругое дело, что инициализацию переменных нужно перенести туда, где ей и место - в секцию инициализации.
оно то так, но мож затратно, мож логика так построена

на то и есть секция в пакете, которая отрабатывает токо при первом вызове (напр заполняет пакетные переменние)

не зря ж учли "багу" в 12-ке

.....
stax
...
Рейтинг: 0 / 0
Exception в инициализации пакета.
    #39649158
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Exception в инициализации пакета.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]