2016-05-11 3 views
1

У меня есть эта строка кода SQL здесь, т работа. Я думаю, это потому, что я пишу неправильный синтаксис.Эта проверка (nvl (column_name in ('x1', 'x2'), (another_column.value = 'something_else')) возможно в oracle sql?

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

Этот чек должен проверить, если «КЭГ» кастрированный баран имеет «КТ» или «YRT» в конце его имя и если оно делает еще столбцы значение должно быть изменено на «vezérigazgató». возможно ли это с помощью проверочного ограничения?

заранее спасибо!

+1

Ограничение может отвергнуть ряд. Я не могу изменить значение. Вместо этого используйте триггеры. Кроме того, ваш тест на строку должен использовать 'like'; в противном случае знак процента не действует. – Codo

ответ

2

Проверить только accept booleans (Здесь вы передаете логическое значение или строку).

Чтобы проверить значение вставляется/обновляется правильно вы можете использовать:

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

Проверка не может обновить значение, это просто проверить правильность ввода.

Если вы хотите автоматически обновлять с «vezérigazgató», если КЭГ не заканчиваются к.т. или 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; 
+0

Последняя часть вашего кода не то, что мне нужно. Конец должен выглядеть так: ограничение ck_ceg check (ceg like '% rt' или ceg like '% yrt' или pozicio = 'vezérigazgató') , который является другим столбцом. – Zh4rsiest

+0

Итак, вы хотите просто проверить значения или сделать обновление? – ebahi

+0

Оба. Честно говоря, я не совсем уверен, потому что это одно из упражнений моей системы баз данных, и описание упражнения довольно размыто. – Zh4rsiest