oralce 获取自定义主键编码,有并发问题
F_GET_SEQUENCE,功能函数
,当多个服务同时调用此函数,可能产生并发问题,待解决,加主键。
CREATE OR REPLACE Function f_Get_Sequence(As_Companyno In Varchar2,
As_Tablename In Varchar2,
As_Prefix In Varchar2,
As_Number In Number := 6)
Return Varchar2 Is
As_Seqvalue Varchar(32);
As_Tablenameupper Varchar2(64);
As_Count Number(6);
As_Sql Varchar2(500);
As_Length Number(6);
Begin
If As_Number Is Null Then
As_Length := 6;
Else
As_Length := As_Number;
End If;
As_Tablenameupper := Upper(As_Tablename);
Select Count(1)
Into As_Count
From Basic_Sequence t
Where t.Companyno = As_Companyno
And t.Tablename = As_Tablenameupper;
If As_Count = 0 Then
Begin
As_Sql := 'Insert Into Basic_Sequence(Companyno,Tablename, Currentvalue) Values (:Companyno,:Tablename, 0)';
Execute Immediate As_Sql
Using As_Companyno, As_Tablenameupper;
Commit;
End;
End If;
Update Basic_Sequence t
Set t.Currentvalue = t.Currentvalue + 1
Where t.Companyno = As_Companyno
And t.Tablename = As_Tablenameupper;
Select mod(Currentvalue,decode(As_Length,1,10,2,100,3,1000,4,10000,5,100000,1000000))
Into As_Seqvalue
From Basic_Sequence t
Where t.Companyno = As_Companyno
And t.Tablename = As_Tablenameupper;
As_Seqvalue := As_Prefix || To_Char(Sysdate, 'yyyymmdd') ||
Lpad(As_Seqvalue, As_Length, '0');
Return(As_Seqvalue);
End f_Get_Sequence;
表结构:
CREATE TABLE "Test"."BASIC_SEQUENCE"
( "COMPANYNO" VARCHAR2(32),
"TABLENAME" VARCHAR2(64),
"CURRENTVALUE" NUMBER(12,0)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "Test_DATA" ;
COMMENT ON COLUMN "SHERP"."BASIC_SEQUENCE"."COMPANYNO" IS 'Id';
COMMENT ON COLUMN "SHERP"."BASIC_SEQUENCE"."TABLENAME" IS '表名';
COMMENT ON COLUMN "SHERP"."BASIC_SEQUENCE"."CURRENTVALUE" IS '当前值';
COMMENT ON TABLE "SHERP"."BASIC_SEQUENCE" IS '基础序列表(生产连续Id)';
oralce 获取自定义主键编码,有并发问题的更多相关文章
- Hibernate自定义主键
Hibernate自定义主键,通过此方法可以解决一此特殊的主键ID,在了解自定义主键时,先了解下Hibernate有自带的10种生成主键方法. 1) assigned主键由外部程序负责生成,无需Hib ...
- PostgreSQL数据库中获取表主键名称
PostgreSQL数据库中获取表主键名称 一.如下表示,要获取teacher表的主键信息: select pg_constraint.conname as pk_name,pg_attribute. ...
- Spring boot JPA 用自定义主键策略 生成自定义主键ID
最近学习Spring boot JPA 学习过程解决的一些问题写成随笔,大家一起成长.这次遇到自定义主键的问题 package javax.persistence; public enum Gener ...
- Sql 插入自定义主键
在遇到数据库设计是自增的主键,且需要插入自定义的主键Id时,这个时候如果直接Insert的话,将会发生错误,错误提示信息: 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'XXX' ...
- GridView内按钮Click获取记录主键值 在GridView控件中,每行记录内会放置一个铵钮,当用
在GridView控件中,每行记录内会放置一个铵钮,当用户点击这个铵钮时,获取当笔记录的主键值.可看演示(是一个gif动画,重新播放尝试刷新网页): 实现这个功能,你需要为GridView控件设置Da ...
- C# AutoMaper使用自定义主键
有时候实际业务中主键不一定叫Id,比如示例数据库Northwind中的RegionID,TerritoryID等,本示例用Abp框架并以Northwind数据库Region表为数据依据 一.在Core ...
- mybatis 添加事物后 无法获取自增主键的问题
检查代码后没发现mapper文件设置自增主键返回的问题,后来检查到,关闭事务后,执行完是可以获取返回的主键的, 我在mysql的客户端里关闭自动提交,发现使用select last_insert_id ...
- Mybatis框架(9)---Mybatis自定义插件生成雪花ID做为表主键项目
Mybatis自定义插件生成雪花ID做为主键项目 先附上项目项目GitHub地址 spring-boot-mybatis-interceptor 有关Mybatis雪花ID主键插件前面写了两篇博客作为 ...
- SpringJPA主键生成采用自定义ID,自定义ID采用年月日时间格式
自定义主键生成策略 在entity类上添加注解 @Id @GeneratedValue(strategy = GenerationType.AUTO, generator = "custom ...
随机推荐
- 一个发送邮件的C++库–jwsmtp
接收邮件的,暂时没搞定,不过在SF上找到了这个发送邮件的库文件.它提供了一个比较完整的类,可以简单的调用发送邮件.下面是作者提供的一个例子,不过由于连SMTP发邮件需要密码,所以代码我改了一下.// ...
- HDU 2112 HDU Today(Dijkstra)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Time Limit: 15000/5000 MS (Java/Others ...
- Spring中继承配置的注入方法
(1)两个java类.一个父类一个字类 package com.lc.inherit; /* * 这里是父类 */ public class Student { protected String na ...
- Wamp环境下配置--Apache虚拟主机
1.首先打开apache的配置文件httpd.conf,并去掉#Include conf/extra/httpd-vhosts.conf前面的#,启用虚拟主机功能 # Virtual hosts In ...
- ExtJs 设置GridPanel表格文本垂直居中
业务场景,需要实现最终效果图如下: GridPanel代码如下配置: { xtype : 'grid', id : 'grid_jglb', frame : true, region : 'cente ...
- SE 2014年5月22日
一. 用自己的理解描述 tunnel接口状态 up和down的情况都有哪些 Tunnel接口的状态UP:隧道的目标有可达路由. Tunnel接口的状态Down:隧道的目标路由不可达. 如图配置实验 ...
- 从mina中学习超时程序编写
从mina中学习超时程序编写 在很多情况下,程序需要使用计时器定,在指定的时间内检查连接过期.例如,要实现一个mqtt服务,为了保证QOS,在服务端发送消息后,需要等待客户端的ack,确保客户端接收到 ...
- 自定义Annotation
来源:http://blog.csdn.net/lifetragedy/article/details/7394910 概念篇 来看一个最简单的annotation示例 @Target(Element ...
- session深入解读
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:尽管session机制在web应用程序中被採用已经非常长时间了.可是仍然有非常多人不清楚 ...
- freemarker导出word带图片
导出word带图片 如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可以看到如下的一片base64编码后的代码: <w:binData w:nam ...