首页 > 解决方案 > PL/SQL 触发器修改新插入的数据

问题描述

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

所以这是我的桌子:

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

创作没有任何错误并且完美地工作。下一步是创建一个触发器,如果​​ deplasment的值低于 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';

但没有找到数据。有谁理解为什么触发器不起作用以及为什么我不能插入数据?

标签: plsqltriggersinsertion

解决方案


推荐阅读