Oracle11g 在表(oracle)中添加约束之前进行检查

Oracle11g 在表(oracle)中添加约束之前进行检查,oracle11g,Oracle11g,我想在表中添加约束,但在添加之前,我必须检查该约束是否存在于表中 像 在添加约束“CHK_DATES_VALID”之前,我需要检查约束是否存在 请引导我做出这个条件。如果那样的话,你不能使用 您需要检查系统视图,以确定约束是否已定义: DECLARE num_rows integer; BEGIN SELECT count(*) INTO num_rows FROM all_constraints WHERE constraint_name = 'CHK_DA

我想在表中添加约束,但在添加之前,我必须检查该约束是否存在于表中 像

在添加约束“CHK_DATES_VALID”之前,我需要检查约束是否存在
请引导我做出这个条件。

如果那样的话,你不能使用

您需要检查系统视图,以确定约束是否已定义:

DECLARE 
  num_rows integer;
BEGIN
   SELECT count(*)
      INTO num_rows
   FROM all_constraints
   WHERE constraint_name = 'CHK_DATES_VALID';

   IF num_rows = 0 THEN 
       EXECUTE IMMEDIATE 'ALTER TABLE the_table 
         ADD CONSTRAINT CHK_DATES_VALID
         CHECK ((to_upper(DATE_NORMAL) != ''N'') OR
                (to_upper(DATE_SCHEDULED) != ''N'') OR
                (to_upper(DATE_WINDOW) != ''N''))';
   END IF;
END;
/
执行立即数是必需的,因为不能在PL/SQL块中直接运行DDL


一个更简单的解决方案是简单地添加约束并捕获发生的任何错误。

这需要时间,因为我有上千个表和上千个约束,请告诉我任何其他Soln没有其他解决方案添加约束感谢解释为什么需要立即执行。
DECLARE 
  num_rows integer;
BEGIN
   SELECT count(*)
      INTO num_rows
   FROM all_constraints
   WHERE constraint_name = 'CHK_DATES_VALID';

   IF num_rows = 0 THEN 
       EXECUTE IMMEDIATE 'ALTER TABLE the_table 
         ADD CONSTRAINT CHK_DATES_VALID
         CHECK ((to_upper(DATE_NORMAL) != ''N'') OR
                (to_upper(DATE_SCHEDULED) != ''N'') OR
                (to_upper(DATE_WINDOW) != ''N''))';
   END IF;
END;
/