创建个sequence: create sequence seq_1; 然后再获取要插入的值: select 'E'||lpad(seq_1.nextval,9,'0') FROM dual; 或者在你要insert的时候直接指定:'E'||lpad(seq_1.nextval,9,'0')即可
before insert 的触发器,根据你的规则,生成流水码。
创建一个指定表的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的最大值,然后加一,这样就不会有断点,处理也是放在触发器中.
给个简单的参考例子: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;
create sequence seq_1;
然后再获取要插入的值:
select 'E'||lpad(seq_1.nextval,9,'0') FROM dual;
或者在你要insert的时候直接指定:'E'||lpad(seq_1.nextval,9,'0')即可
select 'E'||to_char(seq_CUSTOMER.nextval,'0000000000') FROM dual;
create sequence seq_1;
然后再获取要插入的值:
select 'E'||lpad(seq_1.nextval,9,'0') FROM dual;
或者在你要insert的时候直接指定:'E'||lpad(seq_1.nextval,9,'0')即可
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的最大值,然后加一,这样就不会有断点,处理也是放在触发器中.
如果不允许,可以采用max+1的方法,此时,要考虑并发的问题。
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;