問合せアウトラインを削除します。
DROP OUTLINE文は次の環境で使用できます。
- 対話型SQL内
- プリコンパイル対象のホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
DROP OUTLINE文により、ユーザーは既存のアウトラインをデータベースから削除するように指定できます。
IF EXISTS
被参照オブジェクトがデータベースに存在しない場合に、SQLコマンド言語によってエラー・メッセージが表示されないようにします。outline-name
削除するアウトラインの名前を指定します。
- アウトラインを削除するには、アウトラインにより参照されるすべての表に対するDROP権限が必要です。
- DROP OUTLINE文はアウトライン操作です(他のユーザーは、アウトラインを削除すると、データベースにアタッチできます)。ただし、問合せアウトラインは、そのアウトラインが別のトランザクションで参照されている場合は削除できません。そのアウトラインが別のトランザクションで参照されている場合にDROP OUTLINE文を発行すると、そのトランザクションは終了し、アウトラインは削除されます。
例1: アウトラインの削除
SQL> DROP OUTLINE MY_OUTLINE;
リポジトリ定義を削除します。物理データベース・ファイルは削除されません。
DROP PATHNAME文は次の環境で使用できます。
- 対話型SQL内
- プリコンパイル対象のホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
path-name
スキーマ定義のリポジトリ・パス名を指定します。フルパス名または相対パス名のどちらでも指定できます。相対パス名を使用する場合は、相対パス名の前にあるすべてのパス名セグメントを組み込むように、現行デフォルト・リポジトリが定義されている必要があります。
例1: DROP PATHNAME文によるパス名の削除次の例では、リポジトリ・ディレクトリCDD$TOP.SQL.DEPT3とそのすべての子を削除します。そのパス名に対応するデータベース・システム・ファイルやデータは削除しません。
SQL> DROP PATHNAME "CDD$TOP.SQL.DEPT3";
プロファイル定義を削除します。
DROP PROFILE文は次の環境で使用できます。
- 対話型SQL内
- ホスト言語プログラムに埋め込まれる場合
- SQLモジュールまたはその他の複合文のプロシージャの一部として
- 動的SQLで動的に実行される文として
CASCADE
このオプションによりすべてのユーザー定義は変更され、このプロファイルへの索引が削除されます。IF EXISTS
被参照オブジェクトがデータベースに存在しない場合に、SQLコマンド言語によってエラー・メッセージが表示されないようにします。RESTRICT
データベース内のユーザーがプロファイルを使用すると、DROP PROFILE文は失敗します。これはデフォルトです。
- データベースからプロファイルを削除するには、SECURITYデータベース権限が必要です。
- デフォルトでは、プロファイル名は大文字です。大文字と小文字の組合せ、または特殊文字を使用して定義されている場合、SET DIALECT 'SQL99'文またはSET QUOTING RULES 'SQL99'文を使用してデリミタ付き識別子を有効にします。次に、DROP PROFILE文で名前を引用符(" ")で囲みます。
例1: 大文字と小文字を組み合せたデリミタ付き識別子プロファイル名の使用
SQL> DROP PROFILE Decision_Support; %RDB-E-NO_META_UPDATE, metadata update failed -RDMS-E-PRFNEXISTS, a quota does not exist with the name "DECISION_SUPPORT" SQL> SET DIALECT 'SQL99'; SQL> DROP PROFILE "Decision_Support"; SQL> COMMIT;
例2: CASCADEを使用した、ユーザーからのプロファイル割当ての削除
この例では、プロファイルとユーザー・オブジェクト間に依存性が存在する可能性があることを示します。CASCADEアクションでは、割当て先のすべてのユーザーからプロファイルを削除します。
SQL> create profile DECISION_SUPPORT cont> comment is 'restrictions for read-only users' cont> default transaction read only cont> transaction modes (read only, shared); SQL> SQL> show profile DECISION_SUPPORT; DECISION_SUPPORT Comment: restrictions for read-only users Transaction modes (read only, shared) Default transaction read only SQL> SQL> create user FREEMAN cont> identified externally cont> profile DECISION_SUPPORT; SQL> SQL> show user FREEMAN; FREEMAN Identified externally Account is unlocked Profile: DECISION_SUPPORT No roles have been granted to this user SQL> SQL> drop profile DECISION_SUPPORT restrict; %RDB-E-NO_META_UPDATE, metadata update failed -RDMS-E-PRFINUSE, entry "DECISION_SUPPORT" is referenced by user "FREEMAN" SQL> SQL> drop profile DECISION_SUPPORT cascade; SQL> SQL> show user FREEMAN; FREEMAN Identified externally Account is unlocked No roles have been granted to this user SQL> SQL> commit;
CREATE ROLE文またはGRANT文で以前に作成したロールを削除します。
DROP ROLE文は次の環境で使用できます。
- 対話型SQL内
- ホスト言語プログラムに埋め込まれる場合
- SQLモジュールまたはその他の複合文のプロシージャの一部として
- 動的SQLで動的に実行される文として
CASCADE
指定したロールをデータベースから削除し、他のロールとアクセス制御リスト(ACL)内に存在する、このロールへの参照をすべて削除します。IF EXISTS
被参照オブジェクトがデータベースに存在しない場合に、SQLコマンド言語によってエラー・メッセージが表示されないようにします。RESTRICT
指定したロールを削除します。別のロールまたはACLにこのロールへの参照がある場合は、DROP ROLE文は失敗します。role-name
データベースの既存のrole-name(CREATE ROLE文で作成したものなど)です。事前定義されたロールは指定できません。詳細は、「使用方法」を参照してください。
- ロールを削除するには、データベースに対するSECURITY権限が必要です。
- 特殊ロールであるBATCH、DIALUP、INTERACTIVE、LOCAL、NETWORKおよびREMOTEは、ユーザー・プロセスの作成時にOpenVMSオペレーティング・システムによって付与されます。したがって、これらのロールは予約名であり、DROP ROLE文でrole-nameとしては使用できません。
例1: データベースからのロールの削除
SQL> SHOW ROLES; Roles in database with filename mf_personnel.rdb DOCUMENTATION SQL> DROP ROLE DOCUMENTATION RESTRICT; SQL> SHOW ROLES; Roles in database with filename mf_personnel.rdb No Roles Found
Oracle Rdbデータベースからルーチンの定義、外部ルーチンまたはストアド・ルーチンを削除します。外部ルーチンとは、外部ファンクションと外部プロシージャの両方を意味します。ストアド・ルーチンとは、ストアド・ファンクションとストアド・プロシージャの両方を意味します。
DROP FUNCTION文とDROP PROCEDURE文は次の環境で使用できます。
- 対話型SQL内
- プリコンパイル対象のホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
CASCADE
指定されたルーチンに依存性がある場合でも、ルーチン定義を削除します。参照ルーチンは無効であるとマークされます。IF EXISTS
被参照オブジェクトがデータベースに存在しない場合に、SQLコマンド言語によってエラー・メッセージが表示されないようにします。DROP FUNCTION routine-name
Oracle Rdbデータベースの外部ファンクションまたはストアド・ファンクション定義の名前を識別します。DROP PROCEDURE routine-name
Oracle Rdbデータベースの外部プロシージャまたはストアド・プロシージャ定義の名前を識別します。RESTRICT
ルーチンがOracle Rdbデータベース内の他のオブジェクトによって参照される場合、外部ルーチンまたはストアド・ルーチン定義の削除を回避します。デフォルトはRESTRICTです。
- データベースからファンクションまたはプロシージャを削除するには、ルーチンのDROP権限が必要です。CREATE MODULEを使用してルーチンが作成されている場合、所有しているルーチンを削除するには、このモジュールのDROP権限が必要です。
- SQLでは、Oracle Rdbデータベースに外部ルーチンの実行可能イメージは格納されません。かわりに、その名前や位置など外部ルーチンを指し示す情報を保存するため、SQLでは問合せの実行からこのルーチンが自動的に起動されます。
- モジュール内でルーチンを削除するには、最初に削除対象のルーチンを組み込んだモジュールのALTER権限が必要です。
- COMPUTED BY列は、DROP FUNCTION CASCADE文によって削除されたファンクションを参照する表内で、COMPUTE NULLに設定されます。
表を変更してCOMPUTED BY列を削除できます。将来のある時点で、表を変更し、同じ名前で異なるcomputed-by式を使用して新しいCOMPUTED BY列を作成できます。
例1: Oracle Rdbデータベースからの外部ファンクション定義の削除外部ファンクション定義を変更する場合、最初に削除してから計画した変更内容で再作成する必要があります。この例は、COSINE_Fファンクションの削除方法を示しています。
SQL> DROP FUNCTION cosine_f RESTRICT;
例2: ストアド・モジュールからのルーチンの削除
DROP FUNCTION文およびDROP PROCEDURE文を使用すると、ストアド・モジュールからルーチンを削除できます。そのルーチンが他のオブジェクトによって参照されている場合、正常にルーチンを削除するにはCASCADEオプションが必要なことがあります。
同じタスクの実行に使用できるALTER MODULEのDROP FUNCTION句およびDROP PROCEDURE句も参照してください。
この例では、使用されなくなったストアド・モジュールTIME_ROUTINESからファンクションを削除します。
SQL> set dialect 'sql99'; SQL> create database filename junk; SQL> SQL> create module TIME_ROUTINES cont> cont> function GET_TIME () cont> returns TIME (2); cont> return CURRENT_TIME (2); cont> cont> function DAY_OF_WEEK (in :dt date) cont> returns VARCHAR(10); cont> return case EXTRACT (weekday from :dt) cont> when 1 then 'Monday' cont> when 2 then 'Tuesday' cont> when 3 then 'Wednesday' cont> when 4 then 'Thursday' cont> when 5 then 'Friday' cont> when 6 then 'Saturday' cont> when 7 then 'Sunday' cont> else '***' cont> end; cont> cont> end module; SQL> SQL> show module TIME_ROUTINES; Information for module TIME_ROUTINES Header: TIME_ROUTINES No description found Module ID is: 1 Routines in module TIME_ROUTINES: DAY_OF_WEEK GET_TIME SQL> drop function GET_TIME cascade; SQL> show module TIME_ROUTINES; Information for module TIME_ROUTINES Header: TIME_ROUTINES No description found Module ID is: 1 Routines in module TIME_ROUTINES: DAY_OF_WEEK SQL>
スキーマとそこに含まれるすべての定義を削除します。
DROP SCHEMA文は次の環境で使用できます。
- 対話型SQL内
- プリコンパイル対象のホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
CASCADE
指定されたスキーマを参照するその他の定義(ビュー、制約、表、順序、索引およびトリガー)を削除し、その後、スキーマ定義を削除します。これはカスケード削除と呼ばれます。CASCADEキーワードを指定すると、SQLではスキーマを削除する前に、スキーマによって格納された定義がすべて削除されます。
CASCADEキーワードを指定しない場合、スキーマは空である必要があります。
IF EXISTS
被参照オブジェクトがデータベースに存在しない場合に、SQLコマンド言語によってエラー・メッセージが表示されないようにします。RESTRICT
指定したスキーマが他の定義で参照される場合は、エラー・メッセージが返されます。指定したスキーマを参照する他の定義がすべて削除されるまで、DROP SCHEMA RESTRICT文ではスキーマが削除されません。DROP SCHEMA文は、デフォルトでRESTRICTを暗黙的に指定します。schema-name
スキーマ名を指定します。スキーマがデフォルトのカタログおよびデータベースにない場合、カタログ名および別名でスキーマ名を修飾する必要があります。スキーマ名の詳細は、第2.2.15項を参照してください。
- スキーマを削除するには、スキーマと同じ認可識別子を持つか、ユーザー名がスキーマ名と一致している必要があります。
- マルチスキーマ・データベースからスキーマを削除するには、DROPデータベース権限が必要です。
- 最初にスキーマを参照するビュー、制約、索引およびトリガーを削除せず、そのスキーマを削除しようとすると、SQLにより次のエラー・メッセージが返されます。
SQL> ATTACH 'ALIAS MS_ALIAS FILENAME MS_TESTDB'; SQL> SET QUOTING RULES 'SQL99'; SQL> SET CATALOG '"MS_ALIAS.MS_TESTCATALOG"'; SQL> DROP SCHEMA "MS_ALIAS.MS_TESTSCHEMA"; %RDB-E-NO_META_UPDATE, metadata update failed -RDMS-E-SCHEMAINUSE, schema MS_TESTSCHEMA currently in use
スキーマを削除する前に指定したスキーマを参照する定義をすべて削除するか、DROP SCHEMA CASCADEを指定すると、エラー・メッセージを回避できます。- スキーマRDB$SCHEMAは削除できません。
例1: 暗黙的なRESTRICTによるスキーマの削除次の例では、ユーザーはスキーマRECRUITING自体を削除する前に、このスキーマを参照する定義を削除する必要があります。
ユーザーは、デフォルト・スキーマをRECRUITINGに、デフォルト・カタログをADMINISTRATIONに設定した後は、別名CORPのみで各定義名を修飾できます。
SQL> ATTACH 'ALIAS CORP FILENAME CORPORATE_DATA'; SQL> SET CATALOG '"CORP.ADMINISTRATION"'; SQL> SET SCHEMA '"CORP.ADMINISTRATION".RECRUITING'; SQL> SET QUOTING RULES 'SQL92'; SQL> DROP SCHEMA "CORP.RECRUITING"; %RDB-E-NO_META_UPDATE, metadata update failed -RDMS-E-SCHEMAINUSE, schema RECRUITING currently in use SQL> DROP TABLE "CORP.CANDIDATES"; SQL> DROP TABLE "CORP.COLLEGES"; %RDB-E-NO_META_UPDATE, metadata update failed -RDMS-F-CONEXI, relation COLLEGES is referenced in constraint DEGREES_FOREIGN3 -RDMS-F-RELNOTDEL, relation COLLEGES has not been deleted SQL> DROP TABLE "CORP.DEGREES"; %RDB-E-NO_META_UPDATE, metadata update failed -RDMS-F-TRGEXI, relation DEGREES is referenced in trigger EMPLOYEE_ID_CASCADE_DELETE SQL> DROP TABLE "CORP.RESUMES"; %RDB-E-NO_META_UPDATE, metadata update failed -RDMS-F-TRGEXI, relation RESUMES is referenced in trigger EMPLOYEE_ID_CASCADE_DELETE -RDMS-F-RELNOTDEL, relation RESUMES has not been deleted SQL> -- SQL> -- The trigger is part of another schema, PERSONNEL. Since this SQL> -- is not the default schema, the user qualifies the trigger name SQL> -- with schema and names. SQL> -- SQL> DROP TRIGGER "CORP.ADMINSTRATION".PERSONNEL.EMPLOYEE_ID_CASCADE_DELETE; SQL> DROP CONSTRAINT "CORP.DEGREES_FOREIGN3"; %RDB-E-NO_META_UPDATE, metadata update failed -RDMS-F-CONDELVIAREL, constraint DEGREES_FOREIGN3 can only be deleted by changing or deleting relation DEGREES SQL> DROP TABLE "CORP.DEGREES"; SQL> DROP TABLE "CORP.RESUMES"; SQL> DROP TABLE "CORP.COLLEGES"; SQL> DROP SCHEMA "CORP.RECRUITING";
例2: CASCADEによるスキーマの削除
次の例では、スキーマACCOUNTINGを参照する定義が削除されてから、スキーマ自体が削除されます。
SQL> DROP SCHEMA "CORP.ACCOUNTING" CASCADE; Domain "CORP.ADMINISTRATION".ACCOUNTING.BUDGET is also being dropped. Domain "CORP.ADMINISTRATION".ACCOUNTING.CODE is also being dropped. SQL>
指定した順序を削除します。
DROP SEQUENCE文は次の環境で使用できます。
- 対話型SQL内
- ホスト言語プログラムに埋め込まれる場合
- SQLモジュールまたはその他の複合文のプロシージャの一部として
- 動的SQLで動的に実行される文として
CASCADE
CASCADE句で、順序を参照するすべてのオブジェクトを無効にしてから順序の定義を削除するようSQLに指定します。ルーチンまたは言語セマンティクス依存性のあるストアド・ルーチンまたはトリガーで参照される順序を削除する場合、対象となるストアド・ルーチンまたはトリガーも無効としてマークされます。IF EXISTS
被参照オブジェクトがデータベースに存在しない場合に、SQLコマンド言語によってエラー・メッセージが表示されないようにします。RESTRICT
順序がOracle Rdbデータベース内の他のオブジェクトによって参照される場合、RESTRICT句により、順序定義の削除を回避(DROP SEQUENCE文が失敗)します。sequence-name
データベース内の既存の順序名です。小文字やSQL許可範囲内にない文字を指定するには、順序名を一重引用符(')で囲みます。
- データベースから順序を削除するには、順序に対するDROPデータベース権限が必要です。
- 順序を削除する場合、データベース・ルート・ファイルで予約された領域が、次の順序を作成したときに再使用可能になります。
- Oracle Rdbでは、ストアド・シーケンスとメタデータ(表など)の間に基礎となる依存関係が作成されるため、CASCADEを指定した場合はルーチンまたは言語セマンティクス依存性のある表を削除できますが、RESTRICTでは削除できません。DROP TABLE CASCADEの場合、ストアド・ルーチンで参照される表を削除すると、ストアド・ルーチンは無効であるとマークされます。DROP TABLE RESTRICTの場合、ストアド・ルーチンで参照される表を削除しようとすると文が失敗するため、依存するストアド・ルーチンは無効になりません。ストアド・ルーチンの無効化が可能な文と不可能な文のリストは、「CREATE MODULE文」を参照してください。
ストアド・ルーチン依存性の種類およびメタデータ変更によるストアド・ルーチン無効化の詳細は、『Oracle Rdb7 Guide to SQL Programming』を参照してください。- Oracle Rdbでは、順序とその定義に依存する他のデータベース・オブジェクト(表やルーチンなど)間に依存性が作成されます。たとえば、CASCADEを指定した場合、依存性のある順序を削除できますが、RESTRICTでは削除できません。DROP SEQUENCE...CASCADEの場合、ストアド・ルーチンで参照される順序を削除すると、そのルーチンは無効であるとマークされます。DROP SEQUENCE...RESTRICTの場合、依存性が検出されると文は失敗し、依存するルーチンは無効化されません。ストアド・ルーチンの無効化の原因となる文のリストは、「CREATE MODULE文」を参照してください。
例1: 順序の削除
SQL> SHOW SEQUENCE; Sequences in database with filename mf_personnel.rdb EMPID SQL> DROP SEQUENCE EMPID; SQL> SHOW SEQUENCE; Sequences in database with filename mf_personnel.rdb No Sequences Found SQL>