Oracle PL / SQL - ALTER-Funktionsbeispiel
Die AnweisungALTER FUNCTION
kompiliert explizit eine eigenständige Funktion neu. Manchmal führtALTER TABLE
in der Tabelle, die in der Funktion verwendet wird, dazu, dass die Funktion UNGÜLTIG wird. Wir müssen sie neu kompilieren (Funktion ändern), um sie wieder GÜLTIG zu machen.
1. ALTER Funktionsbeispiel
Zuerst erstellen wir die Tabelletest_alter
, die Funktionget_max_amount
. In dieser Funktion verwenden wir die Spalte "Betrag" vontest_alter
. Wenn wir nun die Spalte "Betrag" aus der Tabelle "test_alter
" entfernen, wird der Funktionsstatus automatisch UNGÜLTIG.
Auch wenn wir die Spalte "Betrag" wieder in die Tabelle "test_alter
" aufnehmen, bleibt der Funktionsstatus UNGÜLTIG. Um die Funktion wieder GÜLTIG zu machen, müssen wir sie mit der AnweisungALTER FUNCTION
neu kompilieren.
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