用sequence+trigger并不好,不如自己写代码来产生一个自定义的编码,下面的代码稍改一下,就可以完成你要的功能啦...
create or replace procedure get_serviceid(v_type in varchar2, v_code out varchar2) is
/*
目的:根据service_id取编码,每天都从新计数,格式是yyyymmdd+type_id+#####(五位的流水号)
*/
v_curr_val sys_admin_code.curr_val%type;
v_curr_date sys_admin_code.curr_date%type;
begin
--取编码的基本信息
select curr_val, curr_date into v_curr_val, v_curr_date
from sys_admin_code
where code_name = v_type for update;
--如果是当天,则只更新curr_val
if trunc(v_curr_date,'dd') = trunc(sysdate,'dd') then
--产生当前的编码
v_code := to_char(v_curr_date,'yyyymmdd') || v_type || lpad(to_char(v_curr_val),5,'0');
--编码累加
update sys_admin_code
set curr_val = v_curr_val + 1, curr_date = sysdate
where code_name = v_type;
elsif trunc(v_curr_date,'dd') < trunc(sysdate,'dd') then
--编码置1
v_code := to_char(sysdate,'yyyymmdd') || v_type || lpad('1',5,'0');
--如果是第二天,则需要更新curr_date与curr_val
update sys_admin_code
set curr_val = 2, curr_date = sysdate
where code_name = v_type;
end if;
--提交数据累计
commit;
end;
|