有表SPE_CUSTOMER 
KEY值为:CUSTOMER_SN 编码规则为以E开头+上9位数字。如E000000001
要在插入新数据之前实现key值的增长插入
要怎么实现,谢谢大伙

解决方案 »

  1.   

    创建一个指定表的before insert 的触发器吧,根据你的规则,生成流水码。
      

  2.   

    创建个sequence:
    create sequence seq_1;
    然后再获取要插入的值:
    select 'E'||lpad(seq_1.nextval,9,'0') FROM dual;
    或者在你要insert的时候直接指定:'E'||lpad(seq_1.nextval,9,'0')即可
      

  3.   


    select 'E'||to_char(seq_CUSTOMER.nextval,'0000000000') FROM dual;
      

  4.   

    Sequence有一个问题,如果中途有任何人使用一次nextval,那么你的数值可能不连续了出现E000000007,E000000009 中间断档。
      

  5.   

    创建个sequence: 
    create sequence seq_1; 
    然后再获取要插入的值: 
    select 'E'||lpad(seq_1.nextval,9,'0') FROM dual; 
    或者在你要insert的时候直接指定:'E'||lpad(seq_1.nextval,9,'0')即可 
      

  6.   

    before insert 的触发器,根据你的规则,生成流水码。
      

  7.   

    创建一个指定表的before insert 的触发器吧,根据你的规则,生成流水码。创建个sequence: 
    create sequence seq_1; 
    然后再获取要插入的值: 
    select 'E'||lpad(seq_1.nextval,9,'0') FROM dual; 
    或者在你要insert的时候直接指定:'E'||lpad(seq_1.nextval,9,'0')即可 CREATE OR REPLACE TRIGGER "oracle用户".tib_AAA before insert 
    on SPE_CUSTOMER for each row 
    declare 
        integrity_error  exception; 
        errno            integer; 
        errmsg           char(200); 
        dummy            integer; 
        found            boolean; 
    begin 
        select 'E'||lpad(seq_1.nextval,9,'0')
          into :new.CUSTOMER_SN
          from dual; 
     exception 
        when integrity_error then 
           raise_application_error(errno, errmsg); 
    end;用上述方法就可以,只是有一个问题,用sequence容易出现断点,如果你的customer_sn不需要连续的话,可以这样用,如果必须
    要连续,最好还是每次取customer_sn的最大值,然后加一,这样就不会有断点,处理也是放在触发器中.
      

  8.   

    建议用 before insert 的触发器比较好!
      

  9.   

    创建一个事件前触发器或sequence都可以   至于sequence出现中间断档的问题你可以在创建时在创建语句最后加上nocache就OK了
      

  10.   

    如果允许断码,那用什么都可以,随自己喜好;
    如果不允许,可以采用max+1的方法,此时,要考虑并发的问题。
      

  11.   

    给个简单的参考例子:create table t(pk number primary key,...);
    create sequence t_seq;
    create trigger t_trigger before insert on t for each row
    begin
       select t_seq.nextval into :new.pk from dual;
    end;