db2唯一索引與唯一約束,重複刪除唯一約束儲存過程
阿新 • • 發佈:2020-08-03
db2唯一索引與唯一約束,重複刪除唯一約束儲存過程
今天寫可重複執行的指令碼時,發現沒有重複刪除約束的儲存過程,寫此紀錄。
--先建立唯一約束會自動建立唯一索引且兩者名字相同,若該欄位上已有索引,再次建立索引的語句無效,此時第二句話無效。 --先建立唯一索引不會建立唯一約束,在執行建立唯一約束,此時兩者名字不同 ALTER TABLE USER_TEST ADD CONSTRAINT CONS_ID UNIQUE(ID); CREATE UNIQUE INDEX INDEX_ID ON USER_TEST(ID); --刪除唯一約束時,會將該約束帶來的索引一併刪除。 --如果先建立的索引,必須先刪除約束才能刪除索引。 ALTER TABLE USER_TEST DROP CONSTRAINT CONS_ID; DROP INDEX INDEX_ID; --建立刪除索引儲存過程 --1.變數名稱不可以與表中欄位名稱一樣,若一樣不執行where語句,萬一是delete或者update可就慘嘍。 --2.拼接sql語句時,記得關鍵字前後的空格,不然與表名連線在一起報語法錯誤。 CREATE PROCEDURE "WUSB"."TRYDROPCONS" ( IN "TABLENAME" VARCHAR(50) , IN "CONSTRAINTNAME" VARCHAR(50)) BEGIN DECLARE EX VARCHAR(500); DECLARE NUM INT; SELECT COUNT(*) INTO NUM FROM SYSCAT.KEYCOLUSE k WHERE K.CONSTNAME = UPPER(CONSTRAINTNAME) AND K.TABNAME = UPPER(TABLENAME); IF NUM > 0 THEN SET EX = ' ALTER TABLE ' || TABLENAME || ' DROP CONSTRAINT ' || CONSTRAINTNAME; PREPARE EXT FROM EX; EXECUTE EXT; END IF; END