db2唯一索引與唯一約束,重復刪除唯一約束存儲過程


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM