zoukankan      html  css  js  c++  java
  • 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)';
    

      

  • 相关阅读:
    如何写UCHOME移动接口
    无限分类数据树形格式化
    linux下安装eclipse
    python编辑器对比和推荐
    黑马程序员面向对象07天6 (final)
    黑马程序员面向对象07天4 (super,this)
    黑马程序员面向对象07天8 (模版方法)
    黑马程序员面向对象07天7 (接口Interface)
    黑马程序员面向对象08天2 (多态)
    黑马程序员面向对象07天2 (抽象类测试)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/5130652.html
Copyright © 2011-2022 走看看