3.23.1 DROP DATA TYPEの形式と規則
(2) 使用権限
- 抽象データ型の所有者
-
自分が所有する抽象データ型を削除できます。
- DBA権限を持つユーザ
-
他ユーザが所有する抽象データ型を削除できます。
(3) 形式
DROP DATA TYPE 〔認可識別子.〕データ型識別子 〔WITH PROGRAM〕
(4) オペランド
(a) 〔認可識別子.〕データ型識別子
- 認可識別子
-
削除するデータ型識別子の所有者の認可識別子を指定します。
- データ型識別子
-
削除するデータ型識別子を指定します。
(b) WITH PROGRAM
抽象データ型を削除する場合,次に示す関数,手続き,及びトリガの有効なSQLオブジェクトを無効にするときに指定します。
-
削除する抽象データ型と同じ継承関係にある抽象データ型(最も上位のデータ型のすべてのサブタイプ)を使用する関数,手続き,及びトリガの有効なSQLオブジェクト
-
削除する抽象データ型で定義した関数及び手続きを使用する,関数,手続き,及びトリガの有効なSQLオブジェクト
-
削除する抽象データ型で定義した関数と所有者,ルーチン識別子,及びパラメタ数が同じ関数を使用する関数,手続き,及びトリガの有効なSQLオブジェクト
WITH PROGRAMを省略した場合,次に示す関数,手続き,及びトリガのSQLオブジェクトがあるときは,その抽象データ型は削除できません。
-
削除する抽象データ型と同じ継承関係にある抽象データ型を使用する関数,手続き,及びトリガの有効なSQLオブジェクト
-
削除する抽象データ型で定義した関数及び手続きを使用する関数,手続き,及びトリガの有効なSQLオブジェクト
-
削除する抽象データ型で定義した関数と所有者,ルーチン識別子,及びパラメタ数が同じ関数を使用する関数,手続き,及びトリガの有効なSQLオブジェクト
(5) 共通規則
-
指定した抽象データ型を利用している実表,インデクス,抽象データ型,抽象データ型内のルーチン,ルーチン,及びトリガがある場合は削除しません。
-
抽象データ型定義内で定義した関数をビュー定義で使用している場合は,その抽象データ型は削除できません。
-
WITH PROGRAMの指定によって無効となる関数のうち,次のどれかの条件を満たす関数をビュー定義に使用している場合,抽象データ型の削除はできません。
-
引数のデータ型に抽象データ型を指定している
-
戻り値のデータ型に抽象データ型を指定している
-
-
抽象データ型削除に伴って実行中のSQLオブジェクトが無効になる場合,Java手続き中からDROP DATA TYPEは実行できません。
(6) 留意事項
-
DROP DATA TYPEは,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オブジェクトを再作成しておく必要があります。ただし,削除した抽象データ型定義内で定義した関数及び手続きを使用していたトリガについては,SQLオブジェクトを実行するためには,次のどちらかの操作をする必要があります。
-
抽象データ型を定義し直して,ALTER TRIGGER又はALTER ROUTINEを実行してトリガのSQLオブジェクトを再作成する。
-
無効にしたトリガをDROP TRIGGERで削除してから,削除した抽象データ型定義内で定義した関数及び手続きを使用しないようにCREATE TRIGGERでトリガを再定義します。ただし,次のすべての条件を満たすトリガがある場合は,それらもすべてDROP TRIGGERで削除し,定義していた順にCREATE TRIGGERで再定義しないと,トリガ動作の実行順序が変わります。
(条件)
・無効にしたトリガよりも定義したのが後である。
・無効にしたトリガと定義した表が同じである。
・無効にしたトリガとトリガ契機(INSERT,UPDATE,又はDELETE)が同じである(ただし,UPDATEの場合は,トリガ契機列の指定の有無,及び内容に関係なく同じとみなされます)。
・無効にしたトリガとトリガ動作時期(BEFORE又はAFTER)が同じである。
・無効にしたトリガとトリガの動作する単位(行単位又は文単位)が同じである。
-
-
WITH PROGRAMを指定して無効にした関数を使用したビュー表がある場合,そのビュー表を操作するためには,ALTER ROUTINEを実行して関数のSQLオブジェクトを再作成しておく必要があります。
(7) 使用例
ユーザ(認可識別子:USER1)が定義したSGML型を削除します。
DROP DATA TYPE USER1.SGML