create or replace trigger t_trg
   before insert or update on ttt
    for each row
    
begin
    select new_id.nextval into :new.n from dual;
end;create table ttt (n number ,v varchar2(10)); 这个触发器不知道为什么不可用????

解决方案 »

  1.   

    你是搁哪儿拷贝的吧。居然每行里头都“全角”空格字符。
    create or replace trigger t_trg
         before insert or update on ttt
         for each row
          
    begin
         select new_id.nextval into :new.n from dual;
    end;
    CREATE SEQUENCE new_id;
    create table ttt (n number ,v varchar2(10)); 
    下边是运行结果。
    SQL> create or replace trigger t_trg
      2       before insert or update on ttt
      3       for each row
      4
      5  begin
      6       select new_id.nextval into :new.n from dual;
      7  end;
      8  /触发器已创建SQL> insert into ttt values(0, 'abc');已创建 1 行。SQL> insert into ttt values(0, 'abc');已创建 1 行。SQL> insert into ttt values(0, 'abc');已创建 1 行。SQL> select * from ttt;         N V
    ---------- ----------
             1 abc
             2 abc
             3 abc
      

  2.   

    create or replace trigger t_trg
       before insert or update on ttt
       for each row
         
    begin
       select new_id.nextval into :new.n from dual;
    end;
    向上面这样通过触发器来使用sequence还不如在插入数据的时候作如下处理:
    insert into ttt(n,v) values(your_sequence_name.nextval,'your_v_value');