是否可以在oracle sql中检查(nvl(column_name in('x1','x2'),(another_column.value ='something_else'))?

时间:2016-05-11 19:33:10

标签: sql oracle nvl

我在这里有这行SQL代码,但这不起作用。我想这是因为我写错了语法。

constraint ck_ceg check(nvl(ceg in ('%rt','%yrt'),'vezérigazgató'))

此检查必须检查'ceg'是否在其名称的末尾有'rt'或'yrt',如果它有另一列,则必须将值更改为'vezérigazgató'。这是否可以通过检查约束来实现?

提前致谢!

1 个答案:

答案 0 :(得分:2)

选中仅接受布尔值(这里传递布尔值或字符串)。

要检查插入/更新的值是否正确,您可以使用:

constraint ck_ceg check(ceg like '%rt' or ceg like '%yrt' or pozicio = 'vezérigazgató')

检查无法更新值,只是测试输入的有效性。

如果你想用'vezérigazgató'自动更新,如果ceg没有以rt或yrt结尾,你必须写一个触发器,如:

create or replace trigger yourtable
before insert or update on yourtable
for each row
begin
    if :new.ceg not like '%rt' or :new.ceg not like '%yrt' then
        :new.pozicio := 'vezérigazgató';
    end if;
end;