日期:2014-05-17  浏览次数:20784 次

关于数据库的触发器问题
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’无效且未通过重新认证。
数据库 触发器

------解决方案--------------------
触发器编译未通过,所以提示无效。。。
------解决方案--------------------
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
------解决方案--------------------
 :new.Mname,:new.Mprice,:new.Mcost
 NEW相当于你插入行的记录类型,直接可以获取对应的值,不需要在赋值
------解决方案--------------------
begin上面少个declare