5

Oracle 10g では、制約の名前 (データベース インスタンス間で必ずしも同じではないシステム生成名など) を知らずに、列の一意の制約を削除するにはどうすればよいですか? テーブルを削除して再作成することはできません。出来ますか?

4

1 に答える 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 に答える