インデックスを削除します。
Synopsis
DROP INDEX index-name [ON [TABLE] table-name]
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 が返されます。