Fork me on GitHub
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)';

  

posted on 2016-01-14 16:27  HackerVirus  阅读(342)  评论(0编辑  收藏  举报