在Oracle 10g中,如果我不知道唯一约束的名称(例如系统生成的名称,在数据库实例之间可能不同),如何删除列上的唯一约束?删除并重新创建表不是一个选项。有没有可能做到这一点?
SELECT CONSTRAINT_NAME
FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'xxx'
AND CONSTRAINT_TYPE = 'U'
例如,您可以创建一个存储过程来执行先前的 SQL,将其结果存储在变量中,并在 ALTER TABLE DROP CONSTRAINT
中使用该变量。
编辑:
BEGIN
FOR r IN (
SELECT TABLE_NAME, CONSTRAINT_NAME
FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'xxx'
AND CONSTRAINT_TYPE = 'U') LOOP
EXECUTE IMMEDIATE REPLACE(REPLACE(
'ALTER TABLE #TABLE# DROP CONSTRAINT #CON#'
,'#TABLE#',r.TABLE_NAME)
,'#CON#',r.CONSTRAINT_NAME);
END LOOP;
END;