インデックスを削除します。
Synopsis
DROP INDEX index-name [ON [TABLE] table-name]
DROP INDEX コマンドは特権を必要とする操作です。
DROP INDEX を使用する前に、%ALTER_TABLE 管理者特権または指定されたテーブルに対する %ALTER 特権があることを確認する必要があります。特権がない場合は、SQLCODE 99 エラー (特権違反) が返されます。適切な特権を持っている場合は、
GRANT コマンドを使用してこのような特権を割り当てることができます。
IDKEY インデックスは、テーブルにデータがあるときは削除できません。削除しようとすると、SQLCODE -325 エラー・コードが発行されます。
Caché SQL は、指定した
index-name (SqlName とも呼ばれる) をクラスおよびグローバルにおける対応インデックス名 (句読点文字を除く) に変換します。
DROP INDEX はこの名前生成を使用してインデックスへのすべての参照を削除します。
index-name は、未修飾 (EmpSalaryIndex)、修飾 (Employee.EmpSalaryIndex) のどちらでもかまいません。また、ON または ON TABLE キーワード句を使用して、その後にテーブル名を続けることで、インデックスに関連付けられているテーブルを指定できます。
DROP INDEX は、ネームスペース内のすべてのインデックス名が一意であると仮定していることに注意してください。同じ名前のインデックスが複数あるときに、その関連テーブルを明示的に指定しない場合、
DROP INDEX は、アルファベット順の検索で最初に検出されたテーブルに関連付けられているインデックスを削除します。
存在しないインデックスを削除しようとすると、
DROP INDEX は既定で SQLCODE -333 エラーを発行します。ただし、構成オプションを以下のように設定することにより、システム全体でこの既定の設定をオーバーライドできます。
-
ObjectScript $SYSTEM.SQL.SetDDLNo333() 関数を呼び出します。現在の設定を確認するには、$SYSTEM.SQL.CurrentSettings() を呼び出します。これにより、
[SQLCODE=-333 エラーの抑制] の設定が表示されます。
-
既定値は
偽 (0) です。既定では、Caché は SQLCODE -333 エラーを返します。この設定を推奨します。存在しないインデックスに対して
DROP INDEX の処理をせず、エラー・メッセージも発行しない場合は、
真 (1) に設定します。
以下の埋め込み SQL 例は、"EmpSalaryIndex" という名前のインデックスを作成し、後でそれを削除します。この例の DROP INDEX では、インデックスに関連付けられているテーブルが指定されておらず、このネームスペース内で "EmpSalaryIndex" が一意のインデックス名であると想定されています。
&sql(CREATE TABLE Employee (
EMPNUM INT NOT NULL,
NAMELAST CHAR(30) NOT NULL,
NAMEFIRST CHAR(30) NOT NULL,
STARTDATE TIMESTAMP,
SALARY MONEY,
ACCRUEDVACATION INT,
ACCRUEDSICKLEAVE INT,
CONSTRAINT EMPLOYEEPK PRIMARY KEY (EMPNUM))
)
WRITE !,"SQLCODE=",SQLCODE," Created a table"
&sql(CREATE INDEX EmpSalaryIndex
ON TABLE Employee
(Namelast,Salary))
WRITE !,"SQLCODE=",SQLCODE," Created an index"
/* use the index */
&sql(DROP INDEX EmpSalaryIndex)
WRITE !,"SQLCODE=",SQLCODE," Deleted an index"
以下の埋め込み SQL 例は、ON TABLE 節を使用して、削除するインデックスに関連付けられているテーブルを指定しています。
&sql(CREATE INDEX EmpVacaIndex
ON TABLE Employee
(NameLast,AccruedVacation))
WRITE !,"SQLCODE=",SQLCODE," Created an index"
/* use the index */
&sql(DROP INDEX EmpVacaIndex ON TABLE Employee)
WRITE !,"SQLCODE=",SQLCODE," Deleted an index"
以下の埋め込み SQL 例は、修飾付きの名前構文を使用して、削除するインデックスに関連付けられているテーブルを指定しています。
&sql(CREATE INDEX EmpSickIndex
ON TABLE Employee
(NameLast,AccruedSickLeave))
WRITE !,"SQLCODE=",SQLCODE," Created an index"
/* use the index */
&sql(DROP INDEX Employee.EmpSickIndex)
WRITE !,"SQLCODE=",SQLCODE," Deleted an index"
以下のコマンドは、存在しないインデックスを削除しようとしています。結果は、既定の SQL コード -333 が返されます。