以下所有命令都按照我编写它们的顺序彼此分开执行:
这是我的桌子:
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';
,但未找到数据。有谁知道为什么触发器不起作用以及为什么我不能插入数据?