创建触发器ORA-00942时出现问题

时间:2014-11-16 22:53:04

标签: oracle triggers insert oracle11g ora-00942

我正在尝试创建一个触发器,当我插入'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 ...谢谢你的推荐

无论如何,它看起来是一个关于特权的问题,我仍然不知道如何解决它。

0 个答案:

没有答案