当前位置:我的异常网» 数据库 » oracle 中生成流水号 步骤

oracle 中生成流水号 步骤

www.myexceptions.net  网友分享于:2013-12-03  浏览:76次

oracle 中生成流水号 方法

思路:

通过一个流水号表,记录当前最大的流水号,以便下次取用。每次取号时,将流水号表更新成大的。

涉及的表:

流水号表hp_no:

字段类型

TYPE_NAMEVARCHAR2(100)

START_NOVARCHAR2(100)

CURRENT_NOVARCHAR2(100)

代码:

1)通过函数得到最大值。 有三个参数,

第一个参数是类型,便于得到不同的流水号。

第二个参数是前缀,用于在流水号前边放置特别的字符。

第三个参数是生成的流水号长度。

复制代码

代码

CREATE OR REPLACE FUNCTION Hp_Test_GetNo(

P_TYPE_NAME   IN   VARCHAR2 DEFAULT '',  --类型 参数1

P_START_NO    IN   VARCHAR2,  --前缀 参数2

P_LENGTH      IN   NUMBER    --得到流水号长度 参数3

)

RETURN VARCHAR2      --返回类型

IS

V_RESULT       VARCHAR2 (100) := '';   --结果   变量1

V_CURRENT_NO   VARCHAR2 (100) := '';  --当前值  变量2

V_NUM          NUMBER         := 0;  --补值    变量3

V_START_NO   VARCHAR2(100);    --前缀    变量4

V_ROWID        VARCHAR2 (100);    --要更新行的RowID  变量4

BEGIN

V_START_NO :=P_START_NO;  --参数值赋给变量

SELECT COUNT (*)

INTO V_NUM

FROM HP_NO

WHERE TYPE_NAME = P_TYPE_NAME AND START_NO = P_START_NO;    --得到类型与前缀相同值的数量,主要用于判断是否产生过流水号

--判断是否有资料 没有则产生初始值插入库中

IF V_NUM = 0  --没有记录过时

THEN

V_CURRENT_NO := LPAD ('1', P_LENGTH, '0');  --得到P_length长的0001流水号

V_RESULT := V_CURRENT_NO;  --将前缀与流水号相连起来

INSERT INTO HP_NO(TYPE_NAME, START_NO, CURRENT_NO)

VALUES (P_TYPE_NAME, P_START_NO, V_CURRENT_NO);  --将新的最大值记录下来

ELSE

SELECT ROWID, CURRENT_NO + 1

INTO V_ROWID, V_CURRENT_NO

FROM HP_NO

WHERE TYPE_NAME = P_TYPE_NAME AND START_NO = P_START_NO; --得到最大值加1

V_CURRENT_NO := LPAD (V_CURRENT_NO, P_LENGTH, '0');

UPDATE HP_NO

SET CURRENT_NO = V_CURRENT_NO

WHERE ROWID = V_ROWID;    --更新最大值

END IF;

IF V_START_NO IS NULL OR V_START_NO='' THEN

V_RESULT := V_CURRENT_NO;

ELSE

V_RESULT :=V_START_NO || V_CURRENT_NO;

END IF;

RETURN V_RESULT;

END;

复制代码

使用存储过程调用函数的方法:

复制代码

代码

--调用function存储过程

CREATE OR REPLACE PROCEDURE Hp_Pro_GetTestNo

(

v_FirstLetter in varchar2,

v_Result out  varchar2

)

IS

v_FirstValue varchar2(30);

v_SystDate varchar2(30);

BEGIN

select to_char(sysdate,'yyyymm') into v_SystDate from dual;

v_FirstValue:=(v_FirstLetter || v_SystDate);

v_Result:=hp_test_getno('HpTest' ,v_FirstValue,4);

END;

复制代码

结果:

调用存储过程Hp_Pro_GetTestNo('hp',4);

结果为:hp2010020001

其它思考:

一、新增时无须显示流水号,如得到得到连续流水号

方法:

采用流水号子表,此表用于保存没有用过的流水号。当用户取号时,首选判断子表是否含有流水号,当有时,取出一个,并删除此个(防止别另外用户取用);否则调用主表得到新流水号。

当插入失败则将当前流水号保存到流水号子表中,供下次取用。

当删除时,将当前流水号保存到流水号子表中,供下次取用。

二、新增时须显示流水号,如得到得到连续流水号

方法:

采用流水号子表,此表用于保存没有用过的流水号。当用户取号时,首选判断子表是否含有流水号,当有时,取出一个,并删除此个(防止别另外用户取用);否则调用 主表得到新流水号。

当用户不保存或插入失败则将当前流水号保存到流水号子表中,供下次取用。

当删除时,将当前流水号保存到流水号子表中,供 下次取用。

其它思考的代码我没有写,有兴趣的朋友可以自己写。

转:http://www.cnblogs.com/scottckt/archive/2010/02/25/1673441.html

文章评论

oracle数据库生成流水号,oracle 中生成流水号 步骤相关推荐

  1. oracle数据库表excel文件位置,“如何将excel表格数据导入到oracle数据库对应的表中?“数据库文件导入excel表格数据库中...

    如何实现Excel表格自动导入到数据库 库?是什么数据库?sql?access?mysql?我以sql2008为例子 1.打开SQL Server Management Studio-任务-数据 2. ...

  2. oracle中毒,oracle数据库中毒恢复 oracle数据库解密恢复 服务器中勒索病毒解密恢复.Hermes666...

    oracle数据库中毒恢复 oracle数据库解密恢复 服务器中勒索病毒解密恢复.Hermes666 客户名称 保密 数据类型 oracle 11G 数据容量 100 gb 故障类型 服务器中毒,文件 ...

  3. 用ado把excel数据写入oracle,如何将excel表格数据导入到oracle数据库对应的表中?!oracle导出excel文件...

    如何把excel里的表导入到oracle里 使用第三方工具吧,toad之类的 一个excel表格中有多个sheet,如何将其导入oracle数据库 户和要用DBA 最简单得建用户: create us ...

  4. oracle表中放入word,“如何将excel表格数据导入到oracle数据库对应的表中?“将excel表格导入word...

    如何将excel表格数据导入到oracle数据库对应的表中? 敢问楼主,表A几列,表B存在几列,表C存在几列 常规方法(表中列和excel中列) PLSQL 中 : select * from A u ...

  5. column ambiguously defined oracle数据库分页语句查询中select嵌套时出错

    column ambiguously defined &oracle数据库分页语句查询中select嵌套时出错 转载于 [ lev草梦的博客](http://blog.sina.com.cn/ ...

  6. oracle 连接组件,[2021] node连接oracle数据库示例[使用oracle官方组件]

    [2021] node连接oracle数据库示例[使用oracle官方组件] node 连接 oracle 示例 本示例采用的 oracledb 和 instantclient-basic-windo ...

  7. 数据如何导入oracle数据库,如何用Oracle导入导出工具来实现Oracle数据库移植?

    Oracle数据库作为目前市场的主流数据库之一,许多应用都在其上进行开发,由于Oracle数据库更新换代的原因和不同的应用程序提供商,可能会造成在一个单位的应用中存在Oracle的几种版本,如Orac ...

  8. qt mysql 注册码_QT连接Oracle数据库并实现登录验证的操作步骤

    目的: 本文实现QT登录界面,输入账号和密码后,系统连接Oracle数据进行判断账号和密码(MD5加密)是否和数据库一致,如果一致则提示登录成功. 开发环境:Windows10+QT5.14.2+Or ...

  9. oracle数据库基础测试,ORACLE数据库基础测试题oracle数据库复习题.docx

    <ORACLE数据库基础测试题oracle数据库复习题.docx>由会员分享,可在线阅读,更多相关<ORACLE数据库基础测试题oracle数据库复习题.docx(18页珍藏版)&g ...

  10. 视频教程-oracle数据库快速入门-Oracle

    oracle数据库快速入门 十年项目开发经验,主要从事java相关的开发,熟悉各种mvc开发框架. 王振伟 ¥21.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 AP ...

最新文章

  1. CSS 框模型——规定了元素框处理元素内容、内边距、边框和外边距的方式
  2. 流程的python-《流畅的 Python》到底好在哪?
  3. 傻瓜式的php+mysql伪静态(真实存在的html页面)
  4. C#语句——循环语句(for循环与for循环嵌套)
  5. Educational Codeforces Round 106 (Rated for Div. 2)
  6. oracle plsql异常,【Oracle篇】异常处理和PLSQL
  7. 239. Sliding Window Maximum
  8. 【Java线程】深入理解Volatile关键字和使用
  9. sylixos与harmonyOS,SylixOS 下的IO系统调用
  10. ElasticSearch7.2只能用localhost访问但不能用IP地址访问---ElasticSearch工作笔记027
  11. 网络设备巨头优倍快的客户数据遭泄露
  12. 提交响应后无法调用sendredirect_DDD 指导应用垂直拆分后事务问题
  13. 机械表加智能表,双表成为富人标配
  14. 写给美术看的Unity全局光照详解
  15. [设计模式]创建模式-建造者(C++描述)
  16. JAVA流浪猫狗救助平台
  17. java接口支持ajax,【JavaWeb】jQuery对Ajax的支持
  18. 关于HTML5的11个让人难以接受的事实
  19. 【洞幺邦】单自由度弹簧阻尼系统
  20. 拉卡拉支付:推出支付产业互联网新大门

热门文章

  1. c语言编程简单教学,C语言入门教程-最简单的C程序
  2. postgis 栅格数据_postGIS教程
  3. OA办公管理系统的功能有什么特点
  4. Android串口编程入门
  5. 【叨、校长】一个基于Extjs、Pushlet美轮美奂的Web聊天室
  6. 2014年全国最新企业名录免费采集下载
  7. 在VB中使用API“SHFileOperation”删除文件的三个问题
  8. IOS开发之——数据库-Couchbase(05)
  9. 搭建Android开发环境——Eclipse
  10. SEO超级外链留痕工具 最新SEO外链一键优化网站源码