インデックスを削除します。
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 オプションを使用して個別に作成された) インデックスには適用されません。
index-name 未修飾 (EmpSalaryIndex)、修飾 (Employee.EmpSalaryIndex) のどちらでもかまいません。また、ON または ON TABLE キーワード句を使用して、その後にテーブル名を続けることで、インデックスに関連付けられているテーブルを指定できます。
DROP INDEX は、ネームスペース内のすべてのインデックス名が一意であると仮定していることに注意してください。同じ名前のインデックスが複数あるときに、その関連テーブルを明示的に指定しない場合、DROP INDEX は、アルファベット順の検索で最初に検出されたテーブルに関連付けられているインデックスを削除します。
存在しないインデックスを削除しようとすると、DROP INDEX は既定で SQLCODE -333 エラーを発行します。しかし、Caché 構成マネージャのオプションを設定して、システム全体で既定をオーバーライドできます。このためには、[詳細] タブの [SQL] オプションを選択し、以下の構成設定を表示します。存在しないインデックスの DDL DROP を許可する既定は “いいえ” です。存在しないインデックスに対して DROP INDEX の処理をせず、エラー・メッセージも発行しない場合は、“はい” に設定します。
IDKEY インデックスは、テーブルにデータがあるときは削除できません。削除しようとすると、SQLCODE -325 エラー・コードが発行されます。
以下の埋め込み SQL 例は、"EmpSalaryIndex" という名前のインデックスを作成し、後でそれを削除します。この例の DROP INDEX では、インデックスに関連付けられているテーブルが指定されておらず、このネームスペース内で "EmpSalaryIndex" が一意のインデックス名であると想定されています。
   SET %msql="_SYSTEM"
   &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 節を使用して、削除するインデックスに関連付けられているテーブルを指定しています。
   SET %msql="_SYSTEM" 
  &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 例は、修飾付きの名前構文を使用して、削除するインデックスに関連付けられているテーブルを指定しています。
   SET %msql="_SYSTEM" 
  &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