• 技术文章 >数据库 >mysql教程

    PLSQL生成流水号

    2016-06-07 14:57:24原创783

    无详细内容 无 CREATE OR REPLACE FUNCTION fn_no_make(v_prefix VARCHAR2, v_table_name VARCHAR2, v_number_col VARCHAR2) /* * v_prefix: 编码前缀两位 * v_table_name:编码所在表名 * v_number_col:编码所在列名 */ RETURN VARCHAR2 IS v_old_no VARCHA

    <无详细内容> <无>
    CREATE OR REPLACE FUNCTION fn_no_make(v_prefix     VARCHAR2,
                                          v_table_name VARCHAR2,
                                          v_number_col VARCHAR2)
     /*
      * v_prefix:     编码前缀两位
      * v_table_name:编码所在表名
      * v_number_col:编码所在列名
      */  
      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;

    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    千万级数据并发解决方案(理论+实战):点击学习

    Mysql单表千万级数据量的查询优化与性能分析

    Mysql主从原理及其在高并发系统中的应用

    上一篇:SQLServer复制表结构 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 一起聊聊MySQL动态SQL拼接• 实例分析MySQL中pt-query-digest工具的使用记录• MySQL关于Count函数的用法区别总结• 学习MySQL必须了解的13个关键字(总结分享)• MySQL基本操作(CRUD)详解
    1/1

    PHP中文网