oracle(plsql)生成流水号

 更新时间:2014年03月29日 10:22:31   作者:  
这篇文章主要介绍了oracle(plsql)生成流水号,需要的朋友可以参考下

复制代码 代码如下:

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;

相关文章

  • 详解Oracle数据库中自带的所有表结构(sql代码)

    详解Oracle数据库中自带的所有表结构(sql代码)

    这篇文章主要介绍了Oracle数据库中自带的所有表结构,本文给大家介绍的非常详细,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • MySQL安全性指南 (1)(转)

    MySQL安全性指南 (1)(转)

    MySQL安全性指南 (1)(转)...
    2007-03-03
  • Oracle数据库数据丢失恢复的几种方法总结

    Oracle数据库数据丢失恢复的几种方法总结

    相信大家无论是开发、测试还是运维过程中,都可能会因为误操作、连错数据库、用错用户、语句条件有误等原因,导致错误删除、错误更新等问题。当你捶胸顿足或吓得腿软时,肯定希望有办法来恢复这些数据。oracle就提供了一些强大的方法或机制,可以帮到有需要的你。
    2016-12-12
  • EF 配置Oracle数据库的具体操作方法

    EF 配置Oracle数据库的具体操作方法

    下面小编就为大家带来一篇EF 配置Oracle数据库的具体操作方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Oracle数据库服务器修改操作系统时间的注意事项详解

    Oracle数据库服务器修改操作系统时间的注意事项详解

    在本篇文章里小编给大家整理的是一篇关于Oracle数据库服务器修改操作系统时间的注意事项详解,需要的朋友们可以参考下。
    2020-03-03
  • 从Oracle 表格行列转置说起

    从Oracle 表格行列转置说起

    当你面对如下格式的一个表格:NO为人员的ID,MONEY是收入,DAY是星期(1代表星期一,7代表周日)。
    2009-09-09
  • Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例

    Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例

    这篇文章主要介绍了Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例,包含代码实例,而且小编已经测试过了哦,需要的朋友可以参考下
    2014-07-07
  • Oracle归档日志写满(ora-00257)了怎么办

    Oracle归档日志写满(ora-00257)了怎么办

    今天在使用oracle数据库做项目时,突然报错:ORA-00257: archiver error. Connect internal only, until freed,该问题如何解决呢?经过本人一番折腾此问题还要归档于日志满了,下面小编把Oracle归档日志写满(ora-00257)的解决办法在此分享给大家供大家参考
    2015-10-10
  • VMware中linux环境下oracle安装图文教程(一)

    VMware中linux环境下oracle安装图文教程(一)

    刚刚接触ORACLE的人来说,从那里学,如何学,有那些工具可以使用,应该执行什么操作,一定回感到无助。所以在学习使用ORACLE之前,首先来安装一下ORACLE 10g,在来掌握其基本工具。俗话说的好:工欲善其事,必先利其器。作为一个新手,我们还是先在VMware虚拟机里安装吧。
    2014-08-08
  • Oracle数据库的启动与关闭方法

    Oracle数据库的启动与关闭方法

    这篇文章主要介绍了Oracle数据库的启动与关闭方法,需要的朋友可以参考下
    2013-07-07

最新评论