createorreplaceprocedure proc_id_builder(id varchar2, sn out varchar2) AS rowt int; upperID varchar2(64); begin upperID :=upper(id); selectcount(*) into rowt from ts_parameter where parameterid = upperID; if rowt =0then sn := to_char(sysdate, 'YYMMDD') ||'000001'; insertinto ts_parameter values (upperID, sn, ''); commit; return; endif; select parametervalue into sn from ts_parameter where parameterid = upperID forupdate; if substr(sn, 1, 6) > to_char(sysdate, 'YYMMDD') then sn :=''; return; endif; --生成单号 if substr(sn, 1, 6) < 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'); endif; --更新单号 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;