我正在尝试创建一个触发器,当我插入'director'模式和另一个表空间中的'Investigadores'时,应该验证'grado_academico'的新输入值。
这是我的表
CREATE TABLE director.Investigadores (
id_investigador numeric(6, 0) NOT NULL,
nombre varchar(40) NOT NULL, apellido_pat varchar(40) NOT NULL,
apellido_mat varchar(40) NOT NULL, grado_academico varchar(40) NOT NULL,
fecha_ingreso date NOT NULL, nivel_sni numeric(2, 0) NOT NULL,
CONSTRAINT id_investigador PRIMARY KEY (id_investigador))
tablespace sni_tablespace;
这是我的触发器
CREATE OR REPLACE TRIGGER verificarGrado
before insert on director.Investigadores
for each row
begin
IF (new.grado_academico='MC' OR new.grado_academico='DOCTOR' OR new.grado_academico='LICENCIATURA')
return new;
else
RAISE EXCEPTION 'El grado academico solo puede ser MC, DOCTOR o LICENCIATURA';
end if;
END;
/
但是当我创建触发器时返回一个警告,所以我运行
SQL> show errors
ERROR:
ORA-00942: table or view does not exist
那么为什么如果我的桌子已经存在,它会给我这个警告?
我的触发器不正确?
我的用户'导演'有权创建任何触发器。
我应该做点什么吗?
我希望你能帮我解决这个问题。
修改
我使用架构
更改了触发器CREATE OR REPLACE TRIGGER director.verificarGrado
before insert on director.Investigadores
for each row
begin
IF (:new.grado_academico='MC' OR :new.grado_academico='DOCTOR' OR :new.grado_academico='LICENCIATURA')
then
:new.grado_academico:=:new.grado_academico;
else
RAISE EXCEPTION 'El grado academico solo puede ser MC, DOCTOR o LICENCIATURA';
end if;
END;/
让我犯同样的错误。
行:new.grado_academico:=:new.grado_academico;是我不确定我想做什么的,我只需要插入继续
修改 我改变了条件的逻辑我使用IF NOT ...谢谢你的推荐
无论如何,它看起来是一个关于特权的问题,我仍然不知道如何解决它。