create or replace trigger diner_clist_a
before insert on clist for each row
BEGIN
  select Mname,Mprice,Mcost into :new.Mname,:new.Mprice,:new.Mcost
  from Mlist
  where Mid=:new.Mid;
END
这个是我的触发器代码,
插入语句是:
insert into CLIST(Cid,Sid,Mid,Cqty) values('C_01','S_01','M_01',5);
报的错误是:
ORA-04098:触发器‘DINER.DINER_CLIST_A’无效且未通过重新认证。数据库触发器

解决方案 »

  1.   

    我想知道怎么做、、Oracle在学阶段。。不太理解怎么做、
      

  2.   

    create or replace trigger diner_clist_a
    before insert on clist for each row
    declare
      mname varchar2(50);
      Mprice varchar2(50);
      Mcost varchar2(50);
    BEGIN
      select Mname,Mprice,Mcost into mname ,Mprice,Mcost
      from Mlist
      where Mid=:new.Mid;
      
      insert into 目标表 values(mname ,Mprice,Mcost);
    END
      

  3.   

    end后面要加分号。。我把自己坑了。、还以为像insert,语句似的可以省略、、语句没问题。、
      

  4.   

     :new.Mname,:new.Mprice,:new.Mcost
     NEW相当于你插入行的记录类型,直接可以获取对应的值,不需要在赋值