インデックスを削除します。
Synopsis
DROP INDEX index-name [ON [TABLE] table-name]
引数
index-name 削除されるインデックスの名前。インデックス名は未修飾、修飾のどちらでもかまいません。
ON table-name
または
ON TABLE table-name
オプション — インデックスが関連付けられているテーブルの名前。
概要
DROP INDEX 文はインデックスを削除します。DROP INDEX は、PRIMARY KEY や UNIQUE 制約の定義によって作成された (CREATE TABLEALTER TABLE 文の、PRIMARY KEY や UNIQUE オプションを使用して個別に作成された) インデックスには適用されません。
DROP INDEX コマンドは特権を必要とする操作です。DROP INDEX を使用する前に、%ALTER_TABLE 管理者特権または指定されたテーブルに対する %ALTER 特権があることを確認する必要があります。特権がない場合は、SQLCODE –99 エラー (特権違反) が返されます。適切な特権を持っている場合は、GRANT コマンドを使用してこのような特権を割り当てることができます。
DROP INDEX 文は、table-name に対してテーブル・レベルのロックを取得します。これにより、他のプロセスはこのテーブルのデータを変更できなくなります。このロックは、DROP INDEX 操作が終了すると自動的に解除されます。
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 エラーを発行します。ただし、構成オプションを以下のように設定することにより、システム全体でこの既定の設定をオーバーライドできます。
既定値は “偽” (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 が返されます。
DROP INDEX PeopleIndex
関連項目
CREATE INDEX