db2惟一索引与惟一约束,重复删除惟一约束存储过程sql
今天写可重复执行的脚本时,发现没有重复删除约束的存储过程,写此纪录。code
--先建立惟一约束会自动建立惟一索引且二者名字相同,若该字段上已有索引,再次建立索引的语句无效,此时第二句话无效。 --先建立惟一索引不会建立惟一约束,在执行建立惟一约束,此时二者名字不一样 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