栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 数据库 > Oracle

oracle(plsql)生成流水号

Oracle 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

oracle(plsql)生成流水号

复制代码 代码如下:
CREATE OR REPLACe FUNCTION fn_no_make(v_prefix     VARCHAR2,
                                      v_table_name VARCHAR2,
                                      v_number_col VARCHAR2)
  
  RETURN VARCHAR2 IS
  v_old_no   VARCHAr2(50); --原编码
  v_new_no   VARCHAr2(50); --新编码
  v_old_num  NUMBER;       --原编码后三位编号
  v_new_num  VARCHAr2(10); --新编码后三位编号
  v_date_no  VARCHAr2(10); --当前日期编号
  v_sql      VARCHAr2(4000);
BEGIN
  v_sql := 'SELECT MAX(' || v_number_col || ') FROM ' || v_table_name;
  EXECUTE IMMEDIATE v_sql INTO v_old_no;

  v_sql := 'SELECt TO_CHAr(SYSDATE,''YYYYMMDD'') FROM DUAL';
  EXECUTE IMMEDIATE v_sql INTO v_date_no;

  v_old_num := to_number(substr(v_old_no, 12, 3));
  v_new_num := lpad(to_char(v_old_num+1), 3, '0');

  IF v_old_no IS NULL OR substr(v_old_no, 3, 8) <> v_date_no THEN
    v_new_no := v_prefix || v_date_no || '-' || '001';
  ELSE
    v_new_no := v_prefix || v_date_no || '-' || v_new_num;
  END IF;

  RETURN v_new_no;
EXCEPTION
  WHEN OTHERS THEN
    dbms_output.put_line(SQLERRM);
END fn_no_make;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/171910.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号