PL / SQL触发器来修改新插入的数据

时间:2018-12-13 13:38:01

标签: plsql triggers insertion

以下所有命令都按照我编写它们的顺序彼此分开执行:

这是我的桌子:

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)
);

该作品没有任何错误,可以完美运行。下一步是创建一个触发器,以检查置换的值是否小于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;

它编译触发器没有错误。接下来,我用代码测试触发器:

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';

,但未找到数据。有谁知道为什么触发器不起作用以及为什么我不能插入数据?

0 个答案:

没有答案