Триггер для вставки значения в столбец if?

#sql #oracle #plsql #database-trigger

#sql #Oracle #plsql #database-триггер

Вопрос:

Мне нужно создать триггер в таблице, который обновляет при каждой вставке значение столбца, если присутствует условие. Итак, в таблице, подобной этой:

введите описание изображения здесь

Мне нужен триггер для обновления всех нулевых значений до ‘1’, если «RegimeIva» = ‘3’, чтобы получить такой результат:

введите описание изображения здесь

Я пытался:

 create or replace TRIGGER AtualizaNat before INSERT ON Cabecdoc  
for each row
BEGIN
  if :new.IntrastatnatA is null and :new.intrastatnatB  is null and :new.regimeiva = '3' then
    :new.intrastatnatA : 1; :new.intrastatnatB : 1;
  else
    :new.intrastatnatA : null; :new.intrastatnatB : null; 
  end if;
END;
  

Это не работает

Комментарии:

1. = is null должно быть is null и := is null; должно быть изменено на := null;

2. Да, моя ошибка! но это все равно не работает.

3. Вы хотите обновить только одну вставляемую строку? Если да, то что именно не работает?

4. Присвоение значения должно происходить с помощью := и не только : поэтому оно должно быть:new.intrastatnatA := 1; вместо :new.intrastatnatA : 1;

5. Да, вставляется только одна строка. «Сообщение 156, уровень 15, состояние 1, строка 1 с неправильным синтаксисом рядом с ключевым словом «или».

Ответ №1:

Исправлено несколько синтаксических ошибок в вашем коде.

Вот небольшой пример. У меня это работает нормально:

 create table Cabecdoc (IntrastatnatA number, IntrastatnatB number, regimeiva char(1));


create or replace TRIGGER AtualizaNat before INSERT ON Cabecdoc  
for each row
BEGIN
  if :new.IntrastatnatA is null and :new.intrastatnatB  is null and :new.regimeiva = '3' then
    :new.intrastatnatA := 1; :new.intrastatnatB := 1;
  else
    :new.intrastatnatA := null; :new.intrastatnatB := null;
  end if;
END;

--inserting a row...
insert into Cabecdoc values (null, null, '3');

--...and checking
select * from Cabecdoc;


--Output:
IntrastatnatA IntrastatnatB regimeiva
1             1             3