Вам ничего не нужно делать; Oracle перекомпилирует (или, по крайней мере, попытается сделать это) эти пакеты и сделает их VALID
(если что-то другое не предотвратит этого).
Вот простая демонстрация.
Тестовый пример сначала:
SQL> create table test (name varchar2(5));
Table created.
SQL> insert into test
2 select 'Littl' from dual union all
3 select 'Foot' from dual;
2 rows created.
SQL> create or replace package pkg_test as
2 function f_test return test.name%type;
3 end;
4 /
Package created.
SQL> create or replace package body pkg_test as
2 function f_test return test.name%type is
3 retval test.name%type;
4 begin
5 select max(name) into retval from test;
6 return retval;
7 end;
8 end;
9 /
Package body created.
SQL>
Давайте проверим статус пакета и посмотрим результат функции:
SQL> select object_name, status From user_objects where object_name = 'PKG_TEST';
OBJECT_NAM STATUS
---------- -------
PKG_TEST VALID
PKG_TEST VALID
SQL> select pkg_test.f_test from dual;
F_TEST
--------------------------------------------------------------------------------
Littl
SQL>
Все в порядке.
Теперь увеличьте столбец и посмотрите, что произойдет:
SQL> alter table test modify name varchar2(10);
Table altered.
SQL> select object_name, status From user_objects where object_name = 'PKG_TEST';
OBJECT_NAM STATUS
---------- -------
PKG_TEST INVALID
PKG_TEST INVALID
SQL> select pkg_test.f_test from dual;
F_TEST
--------------------------------------------------------------------------------
Littl
SQL> select object_name, status From user_objects where object_name = 'PKG_TEST';
OBJECT_NAM STATUS
---------- -------
PKG_TEST VALID
PKG_TEST VALID
SQL>
Видите? Просто работает . Пакет изначально был INVALID
, был перекомпилирован в фоновом режиме и стал VALID
.
Итак, не беспокойтесь. Я бы просто сказал поздравляю вы решили объявить все , чтобы оно унаследовало тип данных столбца. Если вы его жестко запрограммировали, то у вас была бы БОЛЬШАЯ проблема с ручным изменением всех этих переменных, и еще много чего, чтобы все работало.