テーブルおよびデータを削除します。
Synopsis
DROP TABLE table
[RESTRICT | CASCADE] [%DELDATA | %NODELDATA]
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 オプションを指定します。
テーブル・データの削除に関するシステム全体の既定値は、以下のように設定できます。
-
ObjectScript $SYSTEM.SQL.SetDDLDropTabDelData 関数を呼び出します。現在の設定を確認するには、$SYSTEM.SQL.CurrentSettings() を呼び出します。これにより、
[DROP TABLE がデータを削除する] の設定が表示されます。
-
既定値は
真 (1) です。この設定を推奨します。テーブル定義の削除時に、
DROP TABLE でテーブル・データを削除しない場合は、このオプションを
偽 (0) に設定します。
削除対象のテーブルを参照する別テーブルに外部キー制約が定義されている場合、そのテーブルは削除できません。参照されているテーブルを削除する前に、それを参照しているすべての外部キー制約を削除する必要があります。これらの外部キー制約を削除せずに
DROP TABLE 操作を実行すると、SQLCODE -320 エラーが返されます。
外部キー制約での既定の動作は、RESTRICT キーワード・オプションと同じです。この制約では、CASCADE キーワード・オプションはサポートされません。
存在しないテーブルを削除しようとすると、
DROP TABLE は既定で SQLCODE -30 エラーを発行します。ただし、システム構成を以下のように設定することにより、このエラー報告動作をオーバーライドできます。
-
ObjectScript $SYSTEM.SQL.SetDDLNo30() 関数を呼び出します。現在の設定を確認するには、$SYSTEM.SQL.CurrentSettings() を呼び出します。これにより、
[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"