oralce 获取自定义主键编码,有并发问题
2016-01-14 16:27
197 查看
F_GET_SEQUENCE,功能函数 ,当多个服务同时调用此函数,可能产生并发问题,待解决,加主键。 CREATE OR REPLACE Function F_Get_Sequence(As_Companyno In Varchar2, As_Tablename In Varchar2, As_Prefix In Varchar2) Return Varchar2 Is As_Seqvalue Varchar(32); As_Tablenameupper Varchar2(64); As_Count Number(6); As_Sql Varchar2(500); Begin 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 Currentvalue 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, 6, '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)';
相关文章推荐
- android StringBuffer类的使用
- Ubuntu的TOOL工具收集
- [leetcode] 6. ZigZag Conversion
- poll解析 ,poll和select区别
- Android - 自定义View 实现 文本吉他谱的 动态控制 实现
- 经济基础知识二
- cas 单点登录,退出配置
- 随笔1.14.2016
- hau 3037 Saving Beans【Lucas定理】
- easyui结合Spring实现验证输入内容与数据库中的内容是否重复
- Perl 当前包概念
- 常用的工具以及类库
- List.addAll()在Hibernate下update()遇到的问题
- RabbitMQ入门教程 For Java【5】 - Topic
- Unity3D 5.3 32位安装 No Unsupported Target module loaded
- NSCoding
- Android获取唯一标识(唯一序列号)
- LVS:三种负载均衡方式比较
- C#正则表达式开源工具,为.net开源绵尽薄力
- 贴吧事件背后 百度“自疗”的勇气