プリントスタック TOKYO

データベースとセキュリティの世界から離れて早数年。過去の記憶を探しています。

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;