Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


3.24.1 DROP FUNCTION(関数削除)

〈この項の構成〉

(1) 機能

関数を削除します。

(2) 使用権限

関数の所有者

自分が所有する関数を削除できます。

DBA権限を持つユーザ

他ユーザが所有する関数を削除できます。

(3) 形式

 DROP FUNCTION 〔認可識別子.〕ルーチン識別子(〔データ型〔,データ型〕…〕)
          〔WITH PROGRAM〕

(4) オペランド

(a) 〔認可識別子.〕ルーチン識別子

認可識別子

削除する関数の所有者の認可識別子を指定します。

ルーチン識別子

削除する関数の名称を指定します。

(b) データ型

削除する関数のパラメタで指定したデータ型を指定します。削除する関数のパラメタに指定したデータ型が,固定長文字データ型又は可変長文字データ型でかつ,文字集合指定を指定している場合,その文字集合指定を指定してください。

(c) WITH PROGRAM

関数を削除する場合,次に示す関数,手続き,及びトリガの有効なSQLオブジェクトを無効にするときに指定します。

  • 削除する関数を使用する関数,手続き,及びトリガの有効なSQLオブジェクト

  • 削除する関数と所有者,ルーチン識別子,及びパラメタ数が同じ関数を使用する関数,手続き,及びトリガの有効なSQLオブジェクト

WITH PROGRAMを省略した場合,次に示す関数,手続き,及びトリガのSQLオブジェクトがあるときは,その関数は削除できません。

  • 削除する関数を使用する関数,手続き,及びトリガの有効なSQLオブジェクト

  • 削除する関数と所有者,ルーチン識別子,及びパラメタ数が同じ関数を使用する関数,手続き,及びトリガの有効なSQLオブジェクト

(5) 共通規則

  1. 実行中のSQLオブジェクトが無効になる場合,Java手続き中からDROP FUNCTIONは実行できません。

  2. 抽象データ型内で定義した関数は削除できません。

  3. 同一名の関数が複数ある場合,削除する関数を一意に特定できるようにパラメタのデータ型を指定します。

  4. 指定した関数を使用する,ビュー表(パブリックビューも含む)がある場合,関数は削除できません。

  5. WITH PROGRAMの指定によって無効となる関数のうち,次のどれかの条件を満たす関数をビュー定義に使用している場合,その関数は削除できません。

    • 引数のデータ型に抽象データ型を使用している

    • 戻り値のデータ型に抽象データ型を使用している

(6) 留意事項

  1. DROP FUNCTIONは,OLTP下のX/Openに従ったUAPから指定できません。

  2. WITH PROGRAMを指定して関数,手続き,及びトリガの有効なSQLオブジェクトを無効にした場合,ディクショナリ表SQL_ROUTINE_RESOURCES中の無効となった関数,手続き,及びトリガの行は削除されます。

  3. WITH PROGRAMを指定して無効にした関数,手続き,及びトリガのSQLオブジェクトを実行するためには,ALTER ROUTINE又はALTER PROCEDUREを実行して関数,手続き,及びトリガのSQLオブジェクトを再作成しておく必要があります。

  4. 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)が同じである。

      ・無効にしたトリガとトリガの動作する単位(行単位又は文単位)が同じである。

  5. WITH PROGRAMを指定してトリガ動作条件中で使用している関数を削除した場合,無効にしたトリガのSQLオブジェクトを実行するときだけでなく,そのトリガを引き起こすSQLを前処理するときにもエラーになります。

  6. WITH PROGRAMを指定して無効にした関数を使用したビュー表がある場合,そのビュー表を操作するためには,ALTER ROUTINEを実行して関数のSQLオブジェクトを再作成しておく必要があります。