@ GWu неправильно по моему мнению. По крайней мере, он не прав по духу. Это не вопрос ХОЧУ, это вопрос НЕОБХОДИМОСТИ. Однако он также прав в том смысле, что говорит: это зависит .
Вам НЕОБХОДИМО перекомпилировать ваши пакеты, если базовые данные в базе данных являются многобайтовыми.
У меня были проблемы сегодня, когда пакеты были скомпилированы в формате BYTE, хотя основные данные в моих таблицах находятся в Unicode. Таблицы были явно определены как (например) VARCHAR2 (20 CHAR), в то время как код в моих пакетах PL / SQL был определен только как VARCHAR2 (20).
Это означает, что столбец в базе данных, определенной с длиной 50, не всегда вписывается в переменную PL / SQL, определенную как длина 50. Мои пользователи сообщают о множестве ошибок типа «символьный буфер слишком мал», так как результат.
Перекомпиляция пакетов требуется, если у вас тот же случай, что и у меня.
Однако, что я действительно хотел бы знать, так это как узнать, был ли пакет скомпилирован в формате BYTE. Таким образом, я бы точно знал, какой из моих пакетов нужно перекомпилировать. Не зная об этом, у меня нет способа проактивно пойти туда, чтобы перекомпилировать их. Мне просто нужно подождать, пока пользователь сообщит о проблеме.
Полагаю, я, конечно, мог бы перекомпилировать их все, но это заблокировало бы мою базу данных, пока пользователи все еще в ней. Поэтому я должен снова запланировать некоторое время простоя, чтобы решить всю проблему: - (
- EDIT -
Должен прочитать комментарий от @AlexPoole перед публикацией. Представление dba_plsql_object_settings
дает необходимую информацию!