Oracle PL / SQL - пример функции ALTER
ОператорALTER FUNCTION
явно перекомпилирует автономную функцию. ИногдаALTER TABLE
в таблице, используемой в функции, приводит к тому, что функция становится НЕДЕЙСТВИТЕЛЬНОЙ, нам нужно перекомпилировать (изменить функцию), чтобы снова сделать ее ДЕЙСТВИТЕЛЬНОЙ.
1. Пример функции ALTER
Сначала мы создадим таблицуtest_alter
, функциюget_max_amount
. В этой функции мы используем столбец «количество»test_alter
. Теперь, когда мы удаляем столбец «количество» из таблицыtest_alter
, статус функции автоматически становится НЕДЕЙСТВИТЕЛЬНЫМ.
Даже если мы добавим столбец «количество» обратно в таблицуtest_alter
, статус функции останется НЕДЕЙСТВИТЕЛЬНЫМ. Чтобы снова сделать функцию ДЕЙСТВИТЕЛЬНОЙ, нам нужно перекомпилировать ее с помощью оператораALTER FUNCTION
.
1.1 Create table and function.
--creating table test_alter CREATE TABLE test_alter ( ID number(5), AMOUNT number(5) );
CREATE OR REPLACE FUNCTION get_max_amount RETURN NUMBER IS maxAmount NUMBER(5); BEGIN select MAX(amount) into maxAmount from test_alter; RETURN maxAmount; END get_max_amount; /
1.2 Check the status of function.
select object_name, status from user_objects where object_name = 'GET_MAX_AMOUNT'; -- output : VALID
1.3 Drop column and add it back to table, check the function status.
-- drop column ALTER TABLE test_alter DROP column amount; select object_name, status from user_objects where object_name = 'GET_MAX_AMOUNT'; -- output : INVALID -- add column ALTER TABLE test_alter ADD amount number(5); select object_name, status from user_objects where object_name = 'GET_MAX_AMOUNT'; -- output : INVALID
1.4 Recompile the function with ALTER FUNCTION
ALTER FUNCTION GET_MAX_AMOUNT COMPILE; -- Output : function GET_MAX_AMOUNT altered. -- Check the function status again! select object_name, status from user_objects where object_name = 'GET_MAX_AMOUNT'; -- output : VALID