在 Oracle 10g 中,我如何在不知道约束名称的情况下删除列上的唯一约束(例如,系统生成的名称,在数据库实例之间不一定相同)?删除并重新创建表不是一种选择。是否可以?
问问题
3836 次
1 回答
9
您可以使用以下命令检索约束的名称:
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;
于 2010-10-15T19:55:11.030 回答