Триггер PL / SQL для изменения вновь вставленных данных - PullRequest
0 голосов
/ 13 декабря 2018

Все команды ниже выполняются отдельно друг от друга в том порядке, в котором я их написал:

Итак, вот моя таблица:

CREATE TABLE clase (
clasa VARCHAR2(20) PRIMARY KEY,
tip VARCHAR2(2) NOT NULL,
tara varchar(30) NOT NULL,
nr_arme NUMBER(3, 0) NOT NULL,
diametru_tun NUMBER(3,0) NOT NULL,
deplasament NUMBER(6, 0) NOT NULL,

CONSTRAINT chk_diam_tun CHECK ((diametru_tun > 15 AND nr_arme < 10) OR diametru_tun <= 15)
);

созданиене имеет ошибок и работает отлично.Следующим шагом является создание триггера, который проверяет при вставке, является ли значение deplasament * ниже, чем 10000 , и автоматически изменяет его на 10000.

CREATE OR REPLACE TRIGGER t_clase_insert
BEFORE INSERT OR UPDATE ON clase
FOR EACH ROW
BEGIN
   IF(:NEW.deplasament < 10000) THEN
   :NEW.deplasament := 10000;
END IF;
END;

Itкомпилирует триггер без ошибок.Затем я проверяю триггер с кодом:

INSERT INTO clase
(clasa, tip, tara, nr_arme, diametru_tun, deplasament)
VALUES
('My_class', 'mc', 'Europe', 10, 3, 8000);

И вывод:

ORA-04098: trigger 'DATABASEFORSCHOOL.CLASA_ADAUGARE' is invalid and failed re-validation

Я попытался определить, есть ли синтаксическая ошибка с:

select * 
from 
user_errors 
where 
type = 'TRIGGER' 
and 
name = 't_clase_insert';

но данные не найдены.Кто-нибудь понимает, почему триггер не работает и почему я не могу вставить данные?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...