Oracle PL / SQL - Exemple de fonction ALTER
L'instructionALTER FUNCTION
recompile explicitement une fonction autonome. Parfois,ALTER TABLE
sur la table utilisée dans la fonction rendra la fonction INVALIDE, nous devons la recompiler (modifier la fonction) pour la rendre à nouveau VALIDE.
1. Exemple de fonction ALTER
Tout d'abord, nous allons créer la tabletest_alter
, fonctionget_max_amount
. Dans cette fonction, nous utilisons la colonne «montant» detest_alter
. Désormais, lorsque nous supprimons la colonne «montant» de la tabletest_alter
, le statut de la fonction devient automatique INVALID.
Même si nous rajoutons la colonne «montant» à la tabletest_alter
, l’état de la fonction reste INVALIDE. Pour rendre la fonction VALIDE à nouveau, nous devons la recompiler à l'aide de l'instructionALTER 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