Удалить уникальное ограничение в столбце таблицы, не зная имени ограничения - PullRequest
3 голосов
/ 15 октября 2010

В Oracle 10g, как я могу удалить уникальное ограничение для столбца, не зная имени ограничения (например, имя, созданное системой, которое не обязательно будет одинаковым для экземпляров базы данных)? Удаление и воссоздание таблицы не вариант. Возможно ли это?

1 Ответ

8 голосов
/ 15 октября 2010

Вы можете получить имя ограничения с помощью:

SELECT CONSTRAINT_NAME
FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'xxx'
AND CONSTRAINT_TYPE = 'U'

Например, вы можете создать хранимую процедуру, которая выполняет предыдущий sql, сохраняет результат в переменной и использует эту переменную в ALTER TABLE DROP CONSTRAINT

РЕДАКТИРОВАТЬ: напр .::1008*

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;
...