那位高人帮我看看  我写的这个触发器  在pl/sql delevoper下不行 提示触发器无效 但是在命令行下创建这个触发器就没事 可以插入数据  并且这个时候在pl/sql下也可以插入了 不知道怎么弄的  给看看 
   create or replace trigger set_add
   before  insert on emp
   for each row
   declare
   sn number;
   
begin
   select  emp_id  into sn from emp where rownum<2 order by emp_id desc;
    sn:=sn+1;
 :new.emp_id:=sn;
   end;
 /插入语句是 intsert into emp (emp_id,emp_name,emp_sex) values(11,'xiaoming','m');

解决方案 »

  1.   

    intsert into emp (emp_id,emp_name,emp_sex) values(11,'xiaoming','m');
    你的插入语句这么写?
    可是我看你的触发器的意思是要自动产生emp_id呀~  create or replace trigger set_add 
      before  insert on emp 
      for each row 
     
    begin 
      select  emp_id+1  into :new.emp_id from emp where rownum <2 order by emp_id desc;   end; 
      

  2.   

    是啊 就是自动产生的 要求就是emp_id 自动加1  不管输入的数是多少
      

  3.   

    是啊 就是自动产生的 要求就是emp_id 自动加1  不管输入的数是多少
      

  4.   

    我这个为什么在pl/sql delevoper下不行
      

  5.   

    用sequence+触发器,可以搜下之前的帖子
      

  6.   

    使用sequence吧,你在EMP的触发器中是不能查询EMP的,mutate 
      

  7.   


    --创建触发器create or replace trigger set_add 
    before  insert on emp  
    for each row  
    begin 
        select NVL(max(emp_id)+1,1) into :new.emp_id from emp ;
    end;--插入,插入的时候EMP_ID的值就没必要插了,触发器会自动给它生成的
    intsert into emp (emp_name,emp_sex) values('xiaoming','m');
      

  8.   

    select NVL(max(emp_id)+1,1)   这个什么意思 要是没有数据表里面 怎么处理
      

  9.   

     NVL(max(emp_id)+1,1) 如果表中没有数据,那就默认为1
      

  10.   

    如果没猜错的话,在sqlplus里执行就没问题了
      

  11.   

    现在问题是plsql developer不行,而plus行,和建序列没啥关系,楼主是这样不?