3.24.1 DROP FUNCTION(関数削除)
(2) 使用権限
- 関数の所有者
-
自分が所有する関数を削除できます。
- DBA権限を持つユーザ
-
他ユーザが所有する関数を削除できます。
(3) 形式
DROP FUNCTION 〔認可識別子.〕ルーチン識別子(〔データ型〔,データ型〕…〕) 〔WITH PROGRAM〕
(4) オペランド
(a) 〔認可識別子.〕ルーチン識別子
- 認可識別子
-
削除する関数の所有者の認可識別子を指定します。
- ルーチン識別子
-
削除する関数の名称を指定します。
(b) データ型
削除する関数のパラメタで指定したデータ型を指定します。削除する関数のパラメタに指定したデータ型が,固定長文字データ型又は可変長文字データ型でかつ,文字集合指定を指定している場合,その文字集合指定を指定してください。
(c) WITH PROGRAM
関数を削除する場合,次に示す関数,手続き,及びトリガの有効なSQLオブジェクトを無効にするときに指定します。
-
削除する関数を使用する関数,手続き,及びトリガの有効なSQLオブジェクト
-
削除する関数と所有者,ルーチン識別子,及びパラメタ数が同じ関数を使用する関数,手続き,及びトリガの有効なSQLオブジェクト
WITH PROGRAMを省略した場合,次に示す関数,手続き,及びトリガのSQLオブジェクトがあるときは,その関数は削除できません。
-
削除する関数を使用する関数,手続き,及びトリガの有効なSQLオブジェクト
-
削除する関数と所有者,ルーチン識別子,及びパラメタ数が同じ関数を使用する関数,手続き,及びトリガの有効なSQLオブジェクト
(5) 共通規則
-
実行中のSQLオブジェクトが無効になる場合,Java手続き中からDROP FUNCTIONは実行できません。
-
抽象データ型内で定義した関数は削除できません。
-
同一名の関数が複数ある場合,削除する関数を一意に特定できるようにパラメタのデータ型を指定します。
-
指定した関数を使用する,ビュー表(パブリックビューも含む)がある場合,関数は削除できません。
-
WITH PROGRAMの指定によって無効となる関数のうち,次のどれかの条件を満たす関数をビュー定義に使用している場合,その関数は削除できません。
-
引数のデータ型に抽象データ型を使用している
-
戻り値のデータ型に抽象データ型を使用している
-
(6) 留意事項
-
DROP FUNCTIONは,OLTP下のX/Openに従ったUAPから指定できません。
-
WITH PROGRAMを指定して関数,手続き,及びトリガの有効なSQLオブジェクトを無効にした場合,ディクショナリ表SQL_ROUTINE_RESOURCES中の無効となった関数,手続き,及びトリガの行は削除されます。
-
WITH PROGRAMを指定して無効にした関数,手続き,及びトリガのSQLオブジェクトを実行するためには,ALTER ROUTINE又はALTER PROCEDUREを実行して関数,手続き,及びトリガのSQLオブジェクトを再作成しておく必要があります。
-
WITH PROGRAMを指定して無効にしたトリガのSQLオブジェクトを実行するためには,次のどちらかの操作をする必要があります。ただし,削除した関数と所有者,ルーチン識別子,及びパラメタ数が同じ関数を使用していたトリガについては,ALTER TRIGGER又はALTER ROUTINEを実行してトリガのSQLオブジェクトを再作成してもかまいません。
-
関数を定義し直して,ALTER TRIGGER又はALTER ROUTINEを実行してトリガのSQLオブジェクトを再作成する。
-
無効にしたトリガをDROP TRIGGERで削除してから,削除した関数を使用しないようにCREATE TRIGGERでトリガを再定義します。ただし,次のすべての条件を満たすトリガがある場合は,それらもすべてDROP TRIGGERで削除し,定義していた順にCREATE TRIGGERで再定義しないと,トリガ動作の実行順序が変わります。
(条件)
・無効にしたトリガよりも定義したのが後である。
・無効にしたトリガと定義した表が同じである。
・無効にしたトリガとトリガ契機(INSERT,UPDATE,又はDELETE)が同じである(ただし,UPDATEの場合は,トリガ契機列の指定の有無,及び内容に関係なく同じとみなされます)。
・無効にしたトリガとトリガ動作時期(BEFORE又はAFTER)が同じである。
・無効にしたトリガとトリガの動作する単位(行単位又は文単位)が同じである。
-
-
WITH PROGRAMを指定してトリガ動作条件中で使用している関数を削除した場合,無効にしたトリガのSQLオブジェクトを実行するときだけでなく,そのトリガを引き起こすSQLを前処理するときにもエラーになります。
-
WITH PROGRAMを指定して無効にした関数を使用したビュー表がある場合,そのビュー表を操作するためには,ALTER ROUTINEを実行して関数のSQLオブジェクトを再作成しておく必要があります。