zoukankan      html  css  js  c++  java
  • (原)用于 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;
  • 相关阅读:
    Comet OJ
    AtCoder Grand Contest 002题解
    AtCoder Grand Contest 001 题解
    线性基求交
    2019牛客暑期多校训练营(第四场)题解
    AtCoder Grand Contest 036题解
    计算几何 val.2
    计算几何 val.1
    模拟退火学习笔记
    动态点分治学习笔记
  • 原文地址:https://www.cnblogs.com/spymaster/p/895654.html
Copyright © 2011-2022 走看看