Oracle PL/SQL – ALTER関数の例
`ALTER FUNCTION`ステートメントは、スタンドアロン関数を明示的に再コンパイルします。時には、関数内で使用されているテーブルの `ALTER TABLE`が関数をINVALIDにする原因になります。関数を再コンパイルしてVALIDを再作成する必要があります。
1. ALTER関数の例
まず、
test
alter`テーブル、
getmax
amount`関数を作成します。この関数では、 `test
alter`の ‘amount’カラムを使用しています。 `test__alter`テーブルから ‘amount’カラムを削除すると、関数のステータスは自動的にINVALIDになります。
‘amount’カラムを `test__alter`テーブルに追加しても、関数のステータスはINVALIDのままです。関数VALIDを再度作成するには、 `ALTER FUNCTION`ステートメントを使用して関数を再コンパイルする必要があります。
1.1テーブルと関数を作成します。
--creating table test__alter CREATE TABLE test__alter ( ID番号(5)、 金額(5) );
CREATE OR REPLACE FUNCTION get__max__amount戻り値の数は、maxAmount NUMBER(5)です。 ベギン test__alterからmaxAmountにMAX(量)を選択します。 RETURN maxAmount; END get__max__amount;/.... 1.2機能の状態を確認する。
object
name、statusをuser
objectsから選択します。object
name = ‘GET
MAX__AMOUNT’;
– 出力:有効
1.3列を削除してテーブルに追加し、機能のステータスを確認します。
— drop column
ALTER TABLE test__alter DROP列の量。
object
name、statusをuser
objectsから選択します。object
name = ‘GET
MAX__AMOUNT’;
– 出力:INVALID
ALTER TABLE test__alter ADD金額番号(5);
object
name、statusをuser
objectsから選択します。object
name = ‘GET
MAX__AMOUNT’;
– 出力:INVALID
1.4関数を `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
=== References . https://docs.oracle.com/cloud/latest/db112/LNPLS/alter__function.htm#LNPLS99999[Alter Function :- Oracle official docs] link://tag/alter/[alter]link://tag/function/[function]link://tag/orcale/[orcale]link://tag/plsql/[plsql]