`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]