ALTER FUNCTION

ALTER FUNCTIONは、ストアド・ファンクションを明示的に再コンパイルするSQL文である。

  1. Oracle
    1. 権限
    2. 関数定義の変更
  2. PostgreSQL
  3. SQL Server
  4. MySQL

Oracle

ALTER FUNCTIONは、ストアド・ファンクションを明示的に再コンパイルするSQL文である。ファンクションを明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要が無くなり、実行時のコンパイルエラーやパフォーマンス上のオーバーヘッドが無くなる。

ALTER FUNCTION [schema.]function_name COMPILE
    [DEBUG]
    [parameter_name = parameter_value] ...
schema
他のスキーマにあるファンクションをコンパイルするには、スキーマ名を指定する。
ALTER FUNCTION bar.foo COMPILE
function_name
再コンパイルするストアド・ファンクションの名前を指定する。
ALTER FUNCTION foo COMPILE
DEBUG
PL/SQLデバッガで使用するためのコードを生成するには、DEBUGオプションを指定する。
ALTER FUNCTION foo COMPILE DEBUG
parameter_name = parameter_value
PL/SQLデバッガで使用するためのコードを生成するには、PL/SQLコンパイラのPLSQL_DEBUGオプションにTRUEを指定する。
ALTER FUNCTION foo COMPILE PLSQL_DEBUG = TRUE

権限

自分のスキーマにあるストアド・ファンクションを再コンパイルするのに必要なシステム権限は無い。

他のスキーマにあるストアド・ファンクションを再コンパイルするには、ALTER ANY PROCEDURE システム権限が必要である。

関数定義の変更

MySQLPostgreSQL及びSQL Server の ALTER FUNCTION 文は既存の関数定義を変更できるが、Oracle の ALTER FUNCTION 文は既存ファンクションの宣言や定義を変更することはできない。Oracle でファンクションを再宣言または再定義する場合は、CREATE OR REPLACE FUNCTION 文を使う。

PostgreSQL

関数定義を変更する。

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
name
定義を変更する関数の名前を指定する。
argmode
引数のモードを指定する。
argname
引数の名前を指定する。ただし、関数は関数名、引数の数および引数の型で特定されるので、引数の名前を省略しても問題ない。
argtype
引数のデータ型を指定する。
new_name
新しい関数名を指定する。
ALTER FUNCTION sqrt(integer) RENAME TO square_root;
new_owner
新しい関数の所有者を指定する。
ALTER FUNCTION sqrt(integer) OWNER TO tsuka
new_schema
新しいスキーマを指定する。関数のスキーマを変更するには、新しいスキーマにおける CREATE 権限が必要である。
ALTER FUNCTION sqrt(integer) SET SCHEMA maths;

SQL Server

既存の関数を変更する。

ALTER FUNCTION [ schema_name. ] function_name   
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type   
    [ = default ] }   
    [ ,...n ]  
  ]  
)  
RETURNS return_data_type  
    [ WITH <function_option> [ ,...n ] ]  
    [ AS ]  
    BEGIN   
        function_body   
        RETURN scalar_expression  
    END  
[ ; ]

MySQL

ストアドファンクションの特性を変更する。

ALTER FUNCTION func_name [characteristic ...]

characteristic: {
    COMMENT 'string'
  | LANGUAGE SQL
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
}

関連SQL

ALTER PACKAGE
パッケージを再コンパイルする。
ALTER PROCEDURE
プロシージャを再コンパイルする。
CALL
プロシージャやファンクションを実行する。
CREATE FUNCTION
ファンクションを作成する。
CREATE PACKAGE
パッケージの仕様部を作成する。
CREATE PACKAGE BODY
パッケージの本体を作成する。
CREATE PROCEDURE
プロシージャを作成する。
DROP FUNCTION
ファンクションを削除する。
DROP PACKAGE
パッケージを削除する。
DROP PROCEDURE
プロシージャを削除する。