Замена части пакета Oracle - PullRequest
5 голосов
/ 06 сентября 2010

Мне нужно изменить одну процедуру из пакета.Мне нужно коснуться как декларации, так и реализации.Поскольку я поддерживаю файлы исправлений для каждой модификации, я бы хотел, чтобы изменения были минимальными.

Могу ли я обновить пакет только измененной процедурой (если да, как?) Или мне нужно предоставитьполное определение пакета и реализация?

Ответы [ 5 ]

16 голосов
/ 06 сентября 2010

Вам необходимо заменить всю спецификацию пакета и его тело - вы не можете работать только с частью пакета.

4 голосов
/ 07 сентября 2010

Просто чтобы противоречить всем остальным.,,

Технически вы можете это сделать - вы можете написать что-то, что будет в вашем файле исправления, извлечь существующий исходный пакет из базы данных (используя USER_SOURCE), применить ваше исправление, а затем перекомпилировать пакет, используя EXECUTE IMMEDIATE.

Однако я не думаю, что это было бы очень хорошей идеей - исправление на основе исправлений становится очень трудно отследить, особенно если задействованы несколько исправлений и несколько баз данных.Поместить весь файл в систему управления версиями намного лучше - ваш патч должен быть хорошо виден.

Если патч для стороннего пакета, подумайте над его упаковкой, чтобы все было прямо, кромеваш патч.Или поместите ваш патч в автономный пакет, который вызывает первый.Существует опасность того, что изменение в оригинальной упаковке может быть несовместимо с вашим патчем.

2 голосов
/ 06 сентября 2010

Вы не можете. Насколько я помню, единственный способ избежать ссылки на недействительные объекты - не трогать объявление вашего пакета, а выполнять только CREATE OR REPLACE PACKAGE BODY.

1 голос
/ 07 сентября 2010

Если вы используете Oracle 11g и хотите минимизировать аннулирование других объектов, обязательно разместите новые объявления в конце спецификации пакета.

1 голос
/ 06 сентября 2010

Поскольку объявление изменяется, вы можете рассмотреть возможность помещения новой процедуры в новый пакет, чтобы не касаться существующей. Пакеты, использующие новую версию процедуры, должны быть в любом случае адаптированы для отражения изменений в объявлении (если это не новый параметр со значением по умолчанию).

...