Oracle 10.2.0.1.0 の索引と制約の削除や変更
Oracle データベースの索引と制約の作成、追加、削除で混乱しました。作成するときは、自動的に振り当てるのに、変更した際は全て手作業で行わないとダメなところが面倒です。
DROP TABLE T1 PURGE;
/* テーブル作成 */
CREATE TABLE T1 ( C1 VARCHAR2(20), C2 VARCHAR2(20), C3 TIMESTAMP);
/* 制約の作成 */
ALTER TABLE T1 ADD ( CONSTRAINT T1_PKEY PRIMARY KEY ( C1,C2 ) USING INDEX PCTFREE 10 STORAGE ( INITIAL 1M NEXT 100K PCTINCREASE 0 ));
/* 確認 1*/
SELECT INDEX_NAME FROM USER_IND_COLUMNS WHERE TABLE_NAME = 'T1';
/* 確認 2*/
SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'T1';
/* 作るときは自動でやってくれて変更は手動で変更 */
/* 制約 T1_PKEY から T01_PKEY へ名称変更 */
ALTER TABLE T1 RENAME CONSTRAINT T1_PKEY TO T01_PKEY;
/* 索引 T1_PKEY から T01_PKEY へ名称変更 */
ALTER INDEX T1_PKEY RENAME TO T01_PKEY;
/* 確認 1*/
SELECT INDEX_NAME FROM USER_IND_COLUMNS WHERE TABLE_NAME = 'T1';
/* 確認 2*/
SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'T1';
/* T01_PKEY を削除 ERROR */
/* 当然、削除できません。*/
ALTER TABLE T1 DROP CONSTRAINT T01_PKEY;
/* 制約 T1_PKEY を削除 */
ALTER TABLE T1 DROP CONSTRAINT T1_PKEY;
/* 索引 T01_PKEY を削除 */
DROP INDEX T01_PKEY;