这个 check(nvl(column_name in ('x1','x2'), (another_column.value='something_else')) 在 oracle sql 中可能吗?

Is this check(nvl(column_name in ('x1','x2'), (another_column.value='something_else')) possible in oracle sql?

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

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

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

提前致谢!

检查只接受布尔值(这里你传递布尔值或字符串)。

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

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

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

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

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;