ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

# DROP COLLATING SEQUENCE文

> 指定された照合順番を削除します。

> データベースまたはデータベース内のドメインで使用されている照合順番は削除できません。

## 環境

> DROP COLLATING SEQUENCE文は次の環境で使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - SQLモジュールのプロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### collation-name

> 照合順番の作成時に使用したcollation-name引数をCREATE COLLATING SEQUENCE文に指定します。

> ### IF EXISTS

> 被参照オブジェクトがデータベースに存在しない場合に、SQLコマンド言語によってエラー・メッセージが表示されないようにします。

## 使用方法

> - データベースから照合順番を削除するには、データベースDROP権限が必要です。

> - データベースのデフォルトに設定した照合順番は削除できません。

>       SQL> create database filename TEST
>       cont> collating sequence french french;
>       SQL> drop coll seq french;
>       %RDB-E-NO_META_UPDATE, metadata update failed
>       -RDMS-F-COLUSEDDB, the collating sequence named FRENCH is used by the database

> - この文は読取り/書込みトランザクションで実行する必要があります。アクティブなトランザクションがない場合にこの文を発行すると、SQLでは、読取り/書込みトランザクションが暗黙的に開始されます。

> - DROP COLLATING SEQUENCE文を発行すると、他のユーザーがデータベースにアタッチできるようになります。

## 例

> 例1: フランス語の照合順番の作成および削除

> 次の例では、事前定義された照合順番FRENCHを使用して照合順番が作成されます。その後、SHOW COLLATING SEQUENCE文を使用して定義済の照合順番が表示されます。

> 次に、DROP COLLATING SEQUENCE文を使用して照合順番が削除されます。SHOW COLLATING SEQUENCE文では、照合順番が存在しないことを示しています。

>     SQL> ATTACH 'FILENAME personnel';
>     SQL> CREATE COLLATING SEQUENCE FRENCH FRENCH;
>     SQL> --
>     SQL> SHOW COLLATING SEQUENCE
>     User collating sequences in database with filename personnel
>          FRENCH
>     SQL> --
>     SQL> DROP COLLATING SEQUENCE FRENCH;
>     SQL> --
>     SQL> SHOW COLLATING SEQUENCE
>     User collating sequences in database with filename personnel
>     No collating sequences found

> 例2: ドメインまたはデータベースの定義に使用した照合順番の削除

> 次の例では、照合順番を使用してデータベースまたはドメインが定義されている場合、照合順番は削除できないことを示しています。

>     SQL> CREATE COLLATING SEQUENCE SPANISH SPANISH;
>     SQL> CREATE DOMAIN LAST_NAME_SPANISH CHAR (14)
>     cont> COLLATING SEQUENCE IS SPANISH;
>     SQL> --
>     SQL> SHOW DOMAIN LAST_NAME_SPANISH
>     LAST_NAME_SPANISH               CHAR(14)
>      Collating sequence: SPANISH
>     SQL> --
>     SQL> SHOW COLLATING SEQUENCE
>     User collating sequences in database with filename personnel
>          SPANISH
>     SQL> --
>     SQL> -- You cannot delete the collating sequence because the
>     SQL> -- domain LAST_NAME_SPANISH, defined using SPANISH, still exists:
>     SQL> --
>     SQL> DROP COLLATING SEQUENCE SPANISH;
>     %RDB-E-NO_META_UPDATE, metadata update failed
>     -RDMS-F-COLUSEDFLD, the collating sequence named SPANISH is used in
>     field LAST_NAME_SPANISH
>     SQL> --
>     SQL> -- Delete the domain:
>     SQL> --
>     SQL> DROP DOMAIN LAST_NAME_SPANISH;
>     SQL> --
>     SQL> -- Now you can delete the collating sequence:
>     SQL> --
>     SQL> DROP COLLATING SEQUENCE SPANISH;
>     SQL> --
>     SQL> SHOW COLLATING SEQUENCE
>     User collating sequences in database with filename personnel
>     No collating sequences found

# DROP CONSTRAINT文

> 指定された制約を削除します。

## 環境

> DROP CONSTRAINT文は次の環境で使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - SQLモジュールのプロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### constraint-name

> 削除する制約の名前を指定します。

> ### IF EXISTS

> 被参照オブジェクトがデータベースに存在しない場合に、SQLコマンド言語によってエラー・メッセージが表示されないようにします。

## 使用方法

> - 表制約または列制約によって参照される各表に対するDROP表権限が必要です。たとえば、FOREIGN KEY制約は、被参照表のみでなくソース表についてもDROP権限が必要です。

> - その制約が列制約または表制約である場合、このDROP文は暗黙的にALTER TABLE...DROP CONSTRAINTを実行します。詳細は、「ALTER TABLE文」を参照してください。

> - 制約が同時に問合せに関与する表にある場合、制約を削除しようとすると失敗します。制約を削除する前に、ユーザーはDISCONNECT文でデータベースからデタッチする必要があります。Oracle Rdbが最初に制約などのオブジェクトにアクセスすると、そのオブジェクトにロックがかけられ、ユーザーがそのデータベースを終了するまで解除されません。このオブジェクトを更新しようとすると、他のユーザーがこのオブジェクトにアクセスしているため、「lock conflict on client」のメッセージが表示されます。

> - DROP CONSTRAINT文では、DATA DEFINITIONモードで予約された表の制約を参照できます。

## 例

> 例1: 制約の削除

> 次の例ではSEX_NOT_NULL制約を削除します。

>     SQL> DROP CONSTRAINT SEX_NOT_NULL;

# DROP DATABASE文

> データベースを削除します。

> Oracle Rdbでこの文が実行されると、SQLではデータベースに関連付けられたデータベース・ルート・ファイルおよび記憶域ファイルがすべて削除されます。

> DROP DATABASE文にリポジトリ・パス名を指定するか、PATHNAME引数でアタッチされたデータベースの別名を指定すると、SQLではデータベース定義を格納するリポジトリ・ディレクトリも削除されます。

> 注意 DROP DATABASE文は慎重に使用してください。DROP DATABASE文の取消しには、ROLLBACK文は使用できません。この文が使用されると、SQLでは、すべてのデータおよびすべての定義が格納されている、データベース・ルート・ファイルおよび記憶域ファイルが削除されます。

## 環境

> DROP DATABAS文は次の環境で使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - SQLモジュールのプロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### ALIAS alias

> アタッチされたデータベースの別名を指定します。DROP DATABASE文は、データベース、および別名に関連付けられたすべてのデータベース・ルート・ファイルと記憶域ファイルを削除します。

> データベースがPATHNAME引数で宣言されている場合、ROP DATABASE文でも、データベース定義が含まれるリポジトリ・ディレクトリが削除されます。

> ### FILENAME 'attach-spec'

> データベースにアクセスするために必要な完全または部分的な情報が含まれる引用符付き文字列を指定します。アタッチ仕様には、.rdbファイルのファイル仕様が含まれます。

> DROP DATABASE文は、データベース、およびデータベース・ルート・ファイル仕様に関連付けられたすべてのデータベース・システム・ファイルを削除します。部分的なファイル仕様を使用すると、SQLでは標準のデフォルトが使用されます。DROP DATABASE文は、データベース定義が含まれるリポジトリ・ディレクトリもあるかどうかに関係なく、データベース・ファイルのみを削除します。

> ### literal-user-auth

> データベース（特にリモート・データベース）へのアクセスに使用するユーザー名およびパスワードを指定します。

> このリテラルにより、DROP DATABASE文でユーザー名およびパスワードの情報を明示的に指定できます。

> ### PATHNAME path-name

> データベース定義が保存されているリポジトリ・ディレクトリのリポジトリ・パス名としてフルパス名または相対パス名を指定します。ファイル仕様ではなくパス名を使用して、データベース・ルート・ファイルおよび記憶域ファイルとともにリポジトリからリポジトリ・データベース定義を削除します。「DROP PATHNAME文」も参照してください。

> ### USER 'username'

> データベース・システムで権限チェックに使用されるオペレーティング・システムのユーザー名を指定する文字列リテラルを定義します。

> ### USING 'password'

> USER句で指定されているユーザー名に対するユーザーのパスワードを指定する文字列リテラルを定義します。

## 使用方法

> - データベースを削除するにはDROPデータベース権限が必要です。

> - 現時点で他のユーザーがアタッチしているか、RMU/OPENコマンドを使用してオープンしているOracle Rdbデータベースは削除できません。

> - アフターイメージ・ジャーナル（.aij）・ファイルは削除されません。

## 例

> 例1: ファイルのみの削除

> この文では、データベースpersonnel.rdbに関連付けられたデータベースのデータベース・システム・ファイルが削除されます。このデータベースにリポジトリ・ディレクトリに保存されている定義もある場合、このDROP DATABASE文ではその定義は削除されません。

>     SQL> DROP DATABASE FILENAME personnel;

> 例2: ファイルおよびリポジトリ定義の削除

> データベース・ファイルおよびリポジトリ定義を削除するには、DROP DATABASE文にリポジトリ・パス名を指定する必要があります。この文では、関連付けられたデータベース・ルート・ファイルおよび記憶域ファイル以外に、リポジトリ・ディレクトリCDD$TOP.ACCOUNTING.PERSONNELも削除されます。

>     SQL> DROP DATABASE PATHNAME CDD$TOP.ACCOUNTING.PERSONNEL;

# DROP DOMAIN文

> ドメイン定義を削除します。PATHNAME修飾子を使用してデータベースにアタッチしている場合、SQLではドメイン定義もリポジトリから削除されます。

## 環境

> DROP DOMAIN文は次の環境で使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - SQLモジュールのプロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### domain-name

> 削除するドメインの名前を指定します。

> ### IF EXISTS

> 被参照オブジェクトがデータベースに存在しない場合に、SQLコマンド言語によってエラー・メッセージが表示されないようにします。

## 使用方法

> - データベースからドメインを削除するには、DROPデータベース権限が必要です。

> - 指定したドメインを削除できます。ただし、表の列定義で参照されているドメインは削除できません。列定義で参照されているドメインを削除するには、最初にALTER TABLE文を使用して列定義を変更または削除する必要があります。列定義が制約または索引定義で使用されている場合は、最初に制約または索引定義を削除してから列定義を変更または削除する必要があります。

> - Oracle Rdbでは、ストアド・ルーチンとメタデータ（ドメインなど）の間に依存関係が作成され、これに基づいてコンパイルおよび格納されるため、ルーチンまたはトリガーの依存性のあるドメインは削除できません。ストアド・ルーチンおよびトリガー無効にできる文またはできない文のリストは、「CREATE MODULE文」および「CREATE TRIGGER文」を参照してください。
>   ストアド・ルーチン依存性の種類およびメタデータ変更によるストアド・ルーチン無効化の詳細は、『Oracle Rdb7 Guide to SQL Programming』を参照してください。

> - DROP SCHEMA CASCADE文の一部としてドメインが削除される場合、ドメインのプロパティはそのドメインを使用して定義した列に継承されます。

## 例

> 例1: 列に参照されないドメインの削除

>     SQL> --
>     SQL> -- The following CREATE DOMAIN statement creates a domain
>     SQL> -- that is not used by any columns:
>     SQL> --
>     SQL> CREATE DOMAIN ABCD IS CHAR(4);
>     SQL> --
>     SQL> -- The SHOW DOMAINS statement shows domain ABCD at the
>     SQL> -- top of the list:
>     SQL> --
>     SQL> SHOW DOMAINS

>     User domains in database with filename personnel
>     ABCD                            CHAR(4)
>     ADDRESS_DATA_1_DOM              CHAR(25)
>     ADDRESS_DATA_2_DOM              CHAR(20)
>        .
>        .
>        .
>     SQL> --
>     SQL> -- Now delete the domain:
>     SQL> --
>     SQL> DROP DOMAIN ABCD;
>     SQL> --
>     SQL> -- The SHOW DOMAINS statement shows that the
>     SQL> -- domain ABCD has been deleted:
>     SQL> --
>     SQL> SHOW DOMAINS

>     User domains in database with filename personnel
>     ADDRESS_DATA_1_DOM              CHAR(25)
>     ADDRESS_DATA_2_DOM              CHAR(20)
>        .
>        .
>        .

> 例2: 列に参照されるドメインの削除

> 次の例では、ドメインの定義が削除されます。列がドメイン定義を、制約がその列を参照するため、最初に表を変更してからドメインを削除する必要があります。

>     SQL> --
>     SQL> -- Attempt to delete the domain SEX_DOM.  Error messages
>     SQL> -- indicate that the table EMPLOYEES uses the domain
>     SQL> -- SEX_DOM, so SEX_DOM cannot yet be deleted:
>     SQL> --
>     SQL> DROP DOMAIN SEX_DOM;
>     %RDB-E-NO_META_UPDATE, metadata update failed
>     -RDMS-F-RELEXI, field SEX_DOM is used in relation EMPLOYEES
>     -RDMS-F-FLDNOTDEL, field SEX_DOM has not been deleted
>     SQL> --
>     SQL> -- Looking at the EMPLOYEES table shows that SEX is the
>     SQL> -- column that depends on the domain SEX_DOM.  Try
>     SQL> -- to delete the column SEX; error messages indicate that the
>     SQL> -- constraint EMP_SEX_VALUES depends on the column SEX:
>     SQL> --
>     SQL> ALTER TABLE EMPLOYEES DROP COLUMN SEX;
>     %RDB-E-NO_META_UPDATE, metadata update failed
>     -RDMS-F-FLDINCON, field SEX is referenced in constraint EMP_SEX_VALUES
>     -RDMS-F-RELFLDNOD, field SEX has not been deleted
>     from relation EMPLOYEES
>     SQL> --
>     SQL> -- Delete the constraint EMP_SEX_VALUES:
>     SQL> --
>     SQL> ALTER TABLE EMPLOYEES DROP CONSTRAINT EMP_SEX_VALUES;
>     SQL> --
>     SQL> -- Because EMP_SEX_VALUES was the only constraint or index
>     SQL> -- that depended on the column SEX, you can now delete
>     SQL> -- the column SEX:
>     SQL> --
>     SQL> ALTER TABLE EMPLOYEES DROP COLUMN SEX;
>     SQL> --
>     SQL> -- The column SEX in the table EMPLOYEES was the only column in
>     SQL> -- the database that depended on the domain SEX_DOM, so you can
>     SQL> -- now delete the domain SEX_DOM:
>     SQL> --
>     SQL> DROP DOMAIN SEX_DOM;
>     SQL>

# DROP INDEX文

> 指定した索引定義を削除します。PATHNAME修飾子を使用してデータベースにアタッチしている場合、SQLでは索引定義もリポジトリから削除されます。

## 環境

> DROP INDEX文は次の環境で使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - SQLモジュールのプロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### CASCADE

> この索引を使用する任意の記憶域マップを、NO PLACEMENT VIA INDEX記憶域マップに変更するように指定します。

> ### IF EXISTS

> 被参照オブジェクトがデータベースに存在しない場合に、SQLコマンド言語によってエラー・メッセージが表示されないようにします。

> ### index-name

> 削除する索引定義の名前を指定します。

> ### RESTRICT

> 索引がOracle Rdbデータベース内の他のオブジェクトによって参照される場合、その索引の削除を回避します。デフォルトはRESTRICTです。

## 使用方法

> - 表から索引を削除するには、DROP表権限が必要です。

> - 索引が同時に問合せに関与している場合、索引を削除しようとすると失敗します。索引を削除する前に、ユーザーはDISCONNECT文でデータベースからデタッチする必要があります。Oracle Rdbが最初に索引などのオブジェクトにアクセスすると、そのオブジェクトにロックがかけられ、ユーザーがそのデータベースを終了するまで解除されません。このオブジェクトを更新しようとすると、他のユーザーのこのオブジェクトへのアクセスが最適化されているため、LOCK CONFLICT ON CLIENTメッセージが表示されます。
>   同様に、索引の削除中、DROP文に対してCOMMIT文またはROLLBACK文を使用してトランザクションを完了するまで、ユーザーはその索引に関連する問合せを実行できません。実行しようとすると、LOCK CONFLICT ON CLIENTエラー・メッセージが表示されます。

> - CASCADEを使用すると、この索引を参照する記憶域マップが暗黙的にNO PLACEMENT VIA INDEX記憶域マップに変更されます。

> - 削除中の索引を参照する問合せアウトラインは、DROP INDEXコマンドのRESTRICTオプションおよびCASCADEオプションの両方に対して無効とマークされます。

> - マルチスキーマ・データベースでは、暗黙的にDROP INDEX ... CASCADE文を使用してDROP SCHEMA ... CASCADE文をサポートします。Oracle Rdbの旧バージョンでは、記憶域マップが削除対象の索引を参照する場合、この文は失敗します。

## 例

> 例1: デフォルト・データベースからの索引の削除

>     SQL> ATTACH 'FILENAME personnel';
>     SQL> DROP INDEX DEG_COLLEGE_CODE;
>     SQL> COMMIT;

> 例2: いずれかのアタッチ・データベースからの索引の削除

>     SQL> ATTACH 'FILENAME personnel';
>     SQL> ATTACH 'ALIAS MF FILENAME mf_personnel';
>     SQL> ATTACH 'ALIAS CORP FILENAME corporate_data';
>     SQL> SET QUOTING RULES 'SQL99';
>     SQL> DROP INDEX "CORP.ADMINISTRATION".PERSONNEL.EMP_EMPLOYEE_ID;
>     SQL> COMMIT;

# DROP MODULE文

> Oracle Rdbデータベースからモジュールを削除します。

## 環境

> DROP MODULE文は次の環境で使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - SQLモジュールのプロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### CASCADE

> SQLで、モジュール内のルーチンを参照するすべてのオブジェクトを無効にし、その後、そのモジュール定義を削除するように指定します。これはカスケード削除と呼ばれます。ルーチンまたは言語セマンティクス依存性のあるストアド・ルーチンで参照されるモジュールを削除する場合、対象となるストアド・ルーチンも無効としてマークされます。

> ### IF EXISTS

> 被参照オブジェクトがデータベースに存在しない場合に、SQLコマンド言語によってエラー・メッセージが表示されないようにします。

> ### module-name

> モジュールの名前を識別します。

> ### RESTRICT

> ファンクションまたはプロシージャがOracle Rdbデータベース内の他のオブジェクトによって参照される場合、ストアド・ルーチン定義の削除を回避します。デフォルトはRESTRICTです。

## 使用方法

> - この文を実行するには、削除対象のモジュールに対するDROP権限が必要です。

> - ストアド・モジュールのプロシージャまたはファンクション内のオブジェクトが、同時に問合せに関与している表にある場合、モジュールを削除しようとすると失敗します。モジュールを削除する前に、ユーザーはDISCONNECT文でデータベースからデタッチする必要があります。SQLが最初にモジュールなどのオブジェクトにアクセスすると、そのオブジェクトにロックがかけられ、ユーザーがそのデータベースを終了するまで解除されません。
>   このオブジェクトを更新しようとすると、他のユーザーがこのオブジェクトにアクセスしているため、「lock conflict on client」のメッセージが表示されます。
>   同様に、モジュールの削除中、DROP文に対してCOMMIT文またはROLLBACK文を使用してトランザクションを完了するまで、ユーザーはモジュールのプロシージャまたはファンクションに関連する問合せを実行できません。実行しようとすると、LOCK CONFLICT ON CLIENTエラー・メッセージが表示されます。

> - その定義によってストアド・ファンクションが起動されるCOMPUTED BY列が表にあり、そのストアド・ファンクションが削除対象になっている場合、その列はCOMPUTE NULLに設定されます。

> - ストアド・ルーチンを無効にしてモジュールを削除し、その後そのモジュールを再定義する場合、無効なルーチンを使用すると、ルーチン参照を再度有効にしようとします。このようなモジュールを再度有効にする場合は、ALTER MODULE文を使用します。

## 例

> 例1: Oracle Rdbデータベースからのモジュールの削除

>     SQL> DROP MODULE employee_salary;

> 例2: DROP MODULE ... CASCASEアクションの確認

> この例は、削除対象のモジュールと、ルーチンやトリガーなどの他のデータベース・オブジェクトの間に依存性が存在する可能性があることを示します。スクリプトでWARN_INVALIDオプションを指定してSET FLAGSを使用すると、データベース管理者には対象となるオブジェクトが通知されます。この場合は、アプリケーション環境に悪影響を及ぼす可能性があるため、ロールバックを使用してDROP MODULE ... CASCADEを取り消します。

>     SQL> start transaction read write;
>     SQL>
>     SQL> create module FIRST_MODULE
>     cont>     function GET_TIME ()
>     cont>     returns TIME (2);
>     cont>     return CURRENT_TIME (2);
>     cont> end module;
>     SQL>
>     SQL> create module SECOND_MODULE
>     cont>     procedure PRINT_TRACE (in :arg varchar(40));
>     cont>     begin
>     cont>     trace GET_TIME(), ': ', :arg;
>     cont>     end;
>     cont> end module;
>     SQL>
>     SQL> create table SAMPLE_TABLE
>     cont>     (ident integer,
>     cont>      descr char(100));
>     SQL> create trigger SAMPLE_TABLE_TRIGGER
>     cont>     after insert on SAMPLE_TABLE
>     cont>     (trace GET_TIME(), ': ', SAMPLE_TABLE.descr)
>     cont>     for each row;
>     SQL>
>     SQL> commit;
>     SQL>
>     SQL> set flags 'warn_invalid';
>     SQL> drop module FIRST_MODULE restrict;
>     %RDB-E-NO_META_UPDATE, metadata update failed
>     -RDMS-E-OBJ_INUSE, object "GET_TIME" is referenced by SAMPLE_TABLE_TRIGGER. (usage: Trigger)
>     -RDMS-E-MODNOTDEL, module "FIRST_MODULE" has not been deleted
>     SQL> drop module FIRST_MODULE cascade;
>     ~Xw: Trigger "SAMPLE_TABLE_TRIGGER" marked invalid
>     ~Xw: Routine "PRINT_TRACE" marked invalid
>     SQL>
>     SQL> rollback;