oracle 查询并补位生成一个编号

应用场景

     下发文件会需要生成 xxx单位  第 00x 号文件  通常会根据库里面现有记录数 查询并生成一个新的编号,如果用代码查询生成会比较麻烦,然而有了oracle函数就会方便很多:

     1.  select   lpad('11', 3, '0') from dual  

   结果

        

 lpad 第一个参数表示需要处理的字符串

        第二个表示补齐后总长度

        第三个表示补位时用什么字符代替

       比如: 

        select   lpad('abc', 5, '0') from dual   

      

       select   lpad('123', 8, 'a') from dual

      

   使用这个函数可以解决我们的问题,然而通常建议搭配另一个函数使用,

  因为比如我们获取这个文号最大值 ,开始可能为个位数 ,但是随着时间增加可能到十位,百位,甚至千位,那么  这个处理可能就不够用,因为我们需要使用decode来动态做判断

  2. decode ,简单介绍decode 类似于原来数据的 when  then 语句 具体不在赘述 需要详细了解的可以自己搜,这里简单举例说明

     SELECT decode(length(11),    1, lpad(1,3, '0'),     2,lpad(1,3,'0'),       'a') as maxNum from dual

    第一眼看过去 好像感觉是不是好多参数 好乱不知如何下手,别急我们稍微处理一下 

    

        这样看起来就方便多了,我们可以吧分隔之后的 每一个整体看做一个语句

       第一个表示我们需要处理的条件 根据这个条件得出的结果进行判断

      后面表示 结果为1 时 返回结果,,

   以此类推 ,,最后一个 表示 前面都不满足时输出为.这个值

  最后放一个我们项目中用到的sql

   SELECT decode(length(maxNum), 1, lpad(maxNum,3, '0'),2,lpad(maxNum,3,'0'), maxNum) as maxNum from
   (SELECT MAX(event_number + 0) + 1 maxNum FROM orderlyevent WHERE instr(event_date,'2018')>0 and area_code = '410102035')

SELECT decode(length(maxNum), 1, lpad(maxNum, 3, '0'),2,lpad(maxNum,3,'0'), maxNum) as maxNum
 from (SELECT MAX(${num_name} + 0) + 1 maxNum FROM ${table_name}
 WHERE instr(${year_name},${event_year})>0 and area_code = ${area_code})

    表示我们根据某个地区 某一天来查询最大文号, 且根据查询结果处理相应的文号    .
        
       

      

猜你喜欢

转载自blog.csdn.net/acoolper/article/details/84852570