テーブルおよびデータを削除します。
Synopsis
DROP TABLE table 
     [RESTRICT | CASCADE] [%DELDATA | %NODELDATA]
引数
table 削除するテーブルの名前。
RESTRICT
CASCADE
オプション — RESTRICT を指定すると、従属ビューや整合性制約のないテーブルのみが削除されます。CASCADE を指定すると、従属ビューや整合性制約のあるテーブルが削除され、テーブル削除処理の一環として、それを参照しているビューまたは整合性制約もすべて削除されます (下記の CASCADE の制約を参照)。
%DELDATA
%NODELDATA
オプション — これらのキーワードは、テーブルの削除時に、テーブルに関連付けられているデータを削除するかどうかを指定します。既定では、テーブル・データを削除します。
概要
DROP TABLE コマンドはテーブルを削除します。
DROP TABLE コマンドは特権を必要とする操作です。DROP TABLE を使用する前に、%DROP_TABLE 管理者特権または指定されたテーブルに対する DELETE オブジェクト特権があることを確認する必要があります。特権がない場合は、SQLCODE –99 エラー (特権違反) が返されます。適切な特権を持っている場合は、GRANT コマンドを使用して %DROP_TABLE 特権を割り当てることができます。埋め込み SQL では、以下のように $SYSTEM.Security.Login メソッドを使用して適切な特権を持ったユーザとしてログインできます。
   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
   &sql(      )
DROP TABLE 文は、table に対してテーブル・レベルのロックを取得します。これにより、他のプロセスはテーブル削除の実行中にこのテーブルのデータを変更できなくなります。このロックは、DROP TABLE 操作の一環として自動的に解除されます。
データを含むテーブル
既定では、DROP TABLE はテーブルのデータも削除します。このデータ削除設定は、テーブル・ベースまたはシステム全体でオーバーライドできます。
テーブルの削除時に、DROP TABLE に %NODELDATA オプションを指定すると、テーブル・データが自動的に削除されるのを防止できます。既定のシステム構成設定では、テーブル・データは削除されます。テーブル・ベースでデータの削除を指定するには、システム全体の既定の設定でテーブル・データを削除しないように設定して、DROP TABLE に %DELDATA オプションを指定します。
テーブル・データの削除に関するシステム全体の既定値は、以下のように設定できます。
既定値は “真” (1) です。この設定を推奨します。テーブル定義の削除時に、DROP TABLE でテーブル・データを削除しない場合は、このオプションを “偽” (0) に設定します。
外部キー制約
削除対象のテーブルを参照する別テーブルに外部キー制約が定義されている場合、そのテーブルは削除できません。参照されているテーブルを削除する前に、それを参照しているすべての外部キー制約を削除する必要があります。これらの外部キー制約を削除せずに DROP TABLE 操作を実行すると、SQLCODE -320 エラーが返されます。
外部キー制約での既定の動作は、RESTRICT キーワード・オプションと同じです。この制約では、CASCADE キーワード・オプションはサポートされません。
存在しないテーブル
存在しないテーブルを削除しようとすると、DROP TABLE は既定で SQLCODE -30 エラーを発行します。ただし、システム構成を以下のように設定することにより、このエラー報告動作をオーバーライドできます。
既定値は “偽” (0) です。この設定を推奨します。存在しないテーブルに対して DROP TABLE の処理をせず、エラー・メッセージも発行しない場合は、“真” (1) に設定します。
以下の埋め込み SQL 例は、"Employees" という名前のテーブルを作成し、後でそれを削除しています。この例では、テーブルの削除時に、このテーブルに関連付けられているデータを削除しないことを指定しています。
  &sql(CREATE TABLE Employees (
       NAMELAST     CHAR (30) NOT NULL,
       NAMEFIRST    CHAR (30) NOT NULL,
       STARTDATE    TIMESTAMP,
       SALARY       MONEY))
  WRITE !,"Created a table"
  /*
    &sql(SQL code using Employees table)
  */
  &sql(DROP TABLE Employees %NODELDATA)
  WRITE !,"Deleted a table"
関連項目
ALTER TABLE CREATE TABLE INSERT JOIN SELECT テーブル UPDATE