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

时间:2011-05-28 19:50:08

标签: oracle11g

我想在表中添加Constraint但是在添加之前我必须检查是否存在于表中的约束 喜欢

IF NOT EXISTS(some condition)

ADD CONSTRAINT CHK_DATES_VALID
CHECK ((DATE_NORMAL != 'n' AND DATE_NORMAL != 'N') OR
       (DATE_SCHEDULED != 'n' AND DATE_SCHEDULED != 'N') OR
       (DATE_WINDOW != 'n' AND DATE_WINDOW != 'N'));

在添加约束'CHK_DATES_VALID'之前我需要检查是否约束现有 请指导我做这个镇定。

1 个答案:

答案 0 :(得分:7)

你不能像那样使用IF。

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

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

EXECUTE IMMEDIATE是必需的,因为您无法直接在PL / SQL块中运行DDL。

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