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;

(0)

相关推荐

  • Oracle基本PLSQL的使用实例详解

    Oracle基本PLSQL的使用实例详解 PL/SQL 块是在 SQL 语言之上发展起来的一种应用,可以集中的处理各种复杂的 SQL 操 作. 组成: DECLARE: 声明部分 BEGIN 编写主题 EXCEPTION 捕获异常 END; 1.一个简单的PL/SQL块 DECLARE i number; BEGIN I:=30; DBMS_OUTPUT.put_line('I的内容为:'||i); END; 此时,直接执行程序即可. 执行之后发现没有任何的输出.因为 Oracle 在系统设置中

  • win7 64位操作系统中Oracle 11g + plsql安装教程详解(图解)

    先去网上把下面列表里的文件下载下来,百度一搜索到处都是~~~ 我来解释一下以上目录都是什么: instantclient-basic-win32-11.2.0.1.0.zip 这个文件是配置文件,现在先不解释,等下会用到. OraClient.zip 这个是oracle的客户端,我在安装的时候没有用到这个,这个可以不要. plsqldev1104.zip 这个是plsql客户端,安装很简单. win32_11gR2_database_1of2.zip win32_11gR2_database_2

  • plsql连接oracle数据库报ora 12154错误解决方法

    plsql连接oracle数据库报ora 12154错误 今天遇到一个问题,使用sqlplus能够连接到远程的数据库,但是使用plsql却连接不上,报错"ORA-12154: TNS: 无法解析指定的连接标识符" 解决方法如下: 1.先检查服务器端的监听服务是否打开,如果没有打开请启动其监听 客户端:tnsping <tns_name> 服务器Linux下: #>lsnrctl status 查看监听状态 #>lsnrctl start 启动监听 2.通过Sql

  • 使用工具 plsqldev将Excel导入Oracle数据库

    1.使用工具 plsqldev 2.打开需导入的excel表格,单击office按钮,选择另存为--其他格式, 选择保存类型CSV(逗号分隔)(*.csv),单击保存 3.打开plsqldev 在工具栏中选择Tools下拉菜单下的Text Importer.进入后选择data from textfile标签.单击下面带有红线框的按钮 打开csv文件. 如果打开成功,再选择"data to oracle"标签 选择owner和table 并在fields框中选择相应的列 然后在右边的下拉

  • Windows 64位下装安装Oracle 11g,PLSQL Developer的配置问题,数据库显示空白的完美解决方案(图文教程)

    安装pl sql 后,若下图的数据库处为空.则需要安装32位的客户端,说明pl sql不支持64位客户端连接. 解决办法: 1.下载32位Oracle客户端,并安装 2.设置PLSQL Developer 打开pl sql 在"工具" - "首选项" - "连接"中,设置 OCI库 (即oracle 32位的安装位置) D:\app\Administrator\product\11.2.0\client_1\oci.dll 如下图: 3.添加环境

  • Oracle客户端与plsql查询数据乱码修改成中文的快速解决方法

    1.查询ORACLE服务器的语言.地域和字符集 select * from nls_database_paameters; 查询结果如下图, NLS_LANGUAGE 表示"语言",NLS_TERRITORY 表示"地域",NLS_CHARACTSET 表示"字符集",将他们三个按照"语言_地域.字符集"的格式拼接起来,就有了"AMERICAN_AMERICA.ZHS16GBK". 下面正式的来操作: 2.

  • oracle客户端PLSQL连接失败解决方法

    上周博客中写了oracle客户端连接服务器的文章,解决了在自己本本上安装的烦恼. 原来自己的电脑与服务器在一个局域网,所以每次都是远程服务器,但是远程也不是解决的办法哈,因为多个人使用同一个服务器,所以使用极其不方便,在自己本本上安装,又比较卡.因此才出现上边博客.嘻嘻,题外话.言归正传. 从家回来,继续我那工作,打开oracle客户端PLSQL,呀,突然连接不上了. 咦,这是怎么回事呢,前几天运转正常哩,回家三四天,咋成这样了呢? 遇到问题,冷静分析其错误,从错误中,可以得知,目标主机,也就是

  • Plsql Developer连接Oracle时出现Could not initialize oci.dll解决方案

    用plsql developer连接远程Oracle时会出现Could not initalize oci.dll警告,原因分析:安装完后Oracle的 oci.dll 是64位的,而32位应用程序 PLSQL Developer 无法加载,或者相反.因为之前实习遇到这个问题,我没有做好记录,最近又有同事遇到,问我,然后我就要重新搜索解决这个问题,所以现在就写成博客,做好记录. 步骤: 1.去http://www.oracle.com/technetwork/database/features/

  • 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_num

  • Oracle 中生成流水号的方法

    思路: 通过一个流水号表,记录当前最大的流水号,以便下次取用.每次取号时,将流水号表更新成大的. 涉及的表: 流水号表hp_no: 字段 类型 TYPE_NAME VARCHAR2(100) START_NO VARCHAR2(100) CURRENT_NO VARCHAR2(100) 代码: 1)通过函数得到最大值. 有三个参数, 第一个参数是类型,便于得到不同的流水号. 第二个参数是前缀,用于在流水号前边放置特别的字符. 第三个参数是生成的流水号长度. 代码 CREATE OR REPLAC

  • python实现自动化报表功能(Oracle/plsql/Excel/多线程)

    日常会有很多固定报表需要手动更新,本文将利用python实现多线程运行oracle代码,并利用xlwings包和numpy包将结果写入到指定excel模版(不改变模版内容),并自动生成带日期命名的新excel.此外还添加了logging模块记录运行日志,以及利用try-except实现遇到错误自动重新运行.下面将介绍整个自动化的实现过程. # -*- coding: utf-8 -*- # Create time: 2019-10-16 # Update time: 2019-11-28 # V

  • 用JS实现根据当前时间随机生成流水号或者订单号

    既然是根据当前的时间,那么我们第一步就是获取当前时间,然后拼接一个随机数,这样便实现了随机生成一个流水号,注意由于要求每个流水号都是独一无二的,生成后提交的过程中还是需要验证当前的流水号是否存在,如果存在则需要提示用户或者再次生成. // 根据当前时间和随机数生成流水号 randomNumber() { const now = new Date() let month = now.getMonth() + 1 let day = now.getDate() let hour = now.getH

  • mybatis+mysql 使用存储过程生成流水号的实现代码

    使用存储过程,在操作数据库时开启事务,避免并发时同时操作造成数据重复 CREATE DEFINER=`root`@`localhost` PROCEDURE `GetSerialNo`(IN tsCode VARCHAR(50),OUT result VARCHAR(200) ) BEGIN DECLARE tsValue VARCHAR(50); DECLARE tdToday VARCHAR(20); DECLARE nowdate VARCHAR(20); DECLARE tsQZ VAR

  • 教你如何用Java根据日期生成流水号

    前言 生成流水号,在企业中可以说是比较常见的需求,尤其是订单类业务. 一般来说,需要保证流水号的唯一性. 如果没有长度和字符的限制,那么直接使用UUID生成一个唯一字符串即可,也可以直接使用数据库表中的主键,主键就是唯一的. 那么,如果限制了流水号必须多少位,这种怎么生成呢? 可以采用"前缀+日期+数字"的方式(ps:此方式是需要用到缓存的) 前缀:为了更好的标识这个流水号是属于哪种类型: 日期:为了防止重复: 数字:为了表示当前的流水所处序号. 需求:生成一个17位数的唯一流水号,&

  • oracle自动生成uuid的实现方法

    目录 oracle自动生成uuid方法 1.创建一个表 2.生成uuid的语句 3.添加几条数据,查询就可以看到效果 oracle获取UUID乱码 oracle自动生成uuid方法 1.创建一个表 create table t_user(id varchar2(200),name varchar2(200)); 2.生成uuid的语句 alter table t_user modify id default sys_guid(); update t_user set id = sys_guid(

  • oracle 指定类型和指定位数创建序列号的代码详解

    目录 一.脚本部分 1. 表结构 2. 函数 二.代码部分 2.1. xml 2.2. 接口 2.3. api接口 2.4. api实例 2.5. 控制层 三.测试 3.1. 效果图 一.脚本部分 1. 表结构 有注释 -- Create table create table LDMAXNO ( NOTYPE VARCHAR2(17) not null, NOLIMIT VARCHAR2(12) not null, MAXNO INTEGER not null ); -- Add comment

  • 45个非常有用的 Oracle 查询语句小结

    日期/时间 相关查询 1.获取当前月份的第一天 运行这个命令能快速返回当前月份的第一天.你可以用任何的日期值替换 "SYSDATE"来指定查询的日期. 复制代码 代码如下: SELECT TRUNC (SYSDATE, 'MONTH') "First day of current month"     FROM DUAL; 2.获取当前月份的最后一天 这个查询语句类似于上面那个语句,而且充分照顾到了闰年,所以当二月份有 29 号,那么就会返回 29/2 .你可以用任

  • Oracle中instr函数使用方法

    INSTR (源字符串, 目标字符串, 起始位置, 匹配序号) 在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置.只检索一次,就是说从字符的开始到字符的结尾就结束. 语法如下: instr( string1, string2 [, start_position [, nth_appearance ] ] ) 参数分析: string1 源字符串,要在此字符串中查找. string2 要在string1中查找的字符串. start_position 代表string

随机推荐