Oracle PL/SQL - пример функции ALTER

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