我想在表中添加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'之前我需要检查是否约束现有 请指导我做这个镇定。
答案 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。
更简单的解决方案是简单地添加约束并捕获发生的任何错误。