ALTER FUNCTIONは、ストアド・ファンクションを明示的に再コンパイルするSQL文である。ファンクションを明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要が無くなり、実行時のコンパイルエラーやパフォーマンス上のオーバーヘッドが無くなる。
ALTER FUNCTION foo COMPILE
他のスキーマにあるファンクションをコンパイルするには、スキーマ名を指定する。
ALTER FUNCTION bar.foo COMPILE
PL/SQLデバッガで使用するためのコードを生成するには、DEBUGオプションを指定する。
ALTER FUNCTION foo COMPILE DEBUG
または、PL/SQLコンパイラのPLSQL_DEBUGオプションにTRUEを指定する。
ALTER FUNCTION foo COMPILE PLSQL_DEBUG = TRUE
MySQL や PostgreSQL、SQL Server の ALTER FUNCTION 文は既存の関数定義を変更できるが、Oracle の ALTER FUNCTION 文は既存のプロシージャの宣言や定義を変更することはできない。Oracle でファンクションを再宣言または再定義する場合は、CREATE OR REPLACE FUNCTION 文を使う。
関数定義を変更する。
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
action [ ... ] [ RESTRICT ]
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
RENAME TO new_name
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
OWNER TO new_owner
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
SET SCHEMA new_schema
既存の関数を変更する。
ALTER FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS return_data_type
[ WITH [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
[ ; ]
ストアドファンクションの特性を変更する。
ALTER FUNCTION func_name [characteristic ...]
characteristic: {
COMMENT 'string'
| LANGUAGE SQL
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
}