Как указал Ankit, вам не нужно использовать триггер, но если вы новичок, я опубликую ответ с триггером.
После создания таблицы давайте вставим первую строку со следующим оператор.
INSERT INTO STATO_VERS_METODO(METODO, VERS, PROGETTO, NOTA_VERSM)
VALUES (1, 1, 10, 'Source code changed')
Теперь наша таблица имеет одну строку и выглядит следующим образом:
METODO | VERS | PROGETTO | STATO | NOTA_VERSM
-----------------------------------------------------------
1 | 10 | 1 | Nuovo | Source code changed
Теперь, когда вы объявляете таблицу с ограничением, вы не можете вставить другую строку с таким же (METODO, PROGETTO, VERS), что-то вроде:
INSERT INTO STATO_VERS_METODO(METODO, VERS, PROGETTO, NOTA_VERSM)
VALUES (1, 1, 10, 'New String')
Будет выдано исключение.
ORA-00001: unique constraint (****.UK_STATO_METODO) violated ORA-06512
Поэтому, если вы хотите изменить значение, вам нужно сделать UPDATE
, Но, как вы сказали в разделе комментариев, вам нужно объединить старую и новую строки. Одним из решений может быть реализация триггера следующим образом.
create or replace TRIGGER AGGIORNA_NOTA_METODO
BEFORE UPDATE ON STATO_VERS_METODO
FOR EACH ROW
BEGIN
:NEW.STATO := 'Modificato';
:NEW.NOTA_VERSM := :OLD.NOTA_VERSM || ' ' || :NEW.NOTA_VERSM;
END;
Обновите строку:
UPDATE STATO_VERS_METODO SET NOTA_VERSM = 'Minor fix'
WHERE METODO = 1 AND PROGETTO = 10 AND VERS = 1;
Наконец, наша таблица выглядит так:
METODO | VERS | PROGETTO | STATO | NOTA_VERSM
--------------------------------------------------------------------
1 | 10 | 1 | Modificato | Source code changed Minor fix
Также ваш триггер, как вы написали, генерирует исключение мутирующей таблицы, узнать больше .