(原)用于 Oracle 自动创建单号的存储过程

场景:
        不同的单据根据日期和单据流水自动生成顺序的单号。

解决办法:

create or replace procedure proc_id_builder(id varchar2, sn out varchar2AS
  rowt 
int;
  upperID 
varchar2(64);
begin
upperID :
= upper(id);
  
select count(*into rowt from ts_parameter where parameterid = upperID;
  
if rowt = 0 then
    sn :
= to_char(sysdate, 'YYMMDD'|| '000001';
    
insert into ts_parameter values (upperID, sn, '');
    
commit;
    
return;
  
end if;

  
select parametervalue into sn from ts_parameter where parameterid = upperID for update;

  
if substr(sn, 16> to_char(sysdate, 'YYMMDD'then
    sn :
= '';
    
return;
  
end if;
  
--生成单号
  if substr(sn, 16< to_char(sysdate, 'YYMMDD'then
    sn :
= lpad(to_char(sysdate, 'YYMMDD'|| '000001',12,'0');
  
else
    sn :
= lpad(to_char(to_number(sn) + 1),12,'0');
  
end if;
  
--更新单号
  update ts_parameter set parametervalue = sn where parameterid = upperID;
  
commit;

EXCEPTION
  
WHEN OTHERS THEN
    
ROLLBACK;
    lfguser.proc_log_ora_exception(p_err_Num 
=> SQLCODE,
                                   p_err_Msg 
=> SQLERRM,
                                   p_err_Source 
=> 'proc_ticketid_builder');
end;
posted @ 2007-09-17 12:13  禹过天晴  阅读(621)  评论(0编辑  收藏  举报