Oracle中的字母数字自动增量ID

时间:2017-08-03 22:48:43

标签: sql oracle

我想在Oracle中使用字母数字自动增量ID。我在这里阅读了其中一篇文章并将其应用于此。但我只得到数字身份证。

我希望我的LAWYERID格式为LAWYER0000001,LAWYER0000002等等。

//my table is:

 SQL>   CREATE TABLE  "LAWYERS" 
   ( "LAWYERID" VARCHAR2(4000), 
     "NAME" VARCHAR2(4000), 
     "EXPERTISE" VARCHAR2(4000), 
     "MOBILE" VARCHAR2(4000), 
     "EMAIL" VARCHAR2(4000), 
     "FEES" VARCHAR2(4000), 
     "PASSWORD" VARCHAR2(4000), 
     "VERIFIED" VARCHAR2(4000), 
     "TEMP_ID" VARCHAR2(4000), 
     CONSTRAINT "LAWYERS_PK" PRIMARY KEY ("LAWYERID") ENABLE
   ) ;

以下是我为表名律师创建的触发器:

SQL>   CREATE OR REPLACE TRIGGER  "LAWYERS_TRIG" 
BEFORE INSERT ON lawyers 
FOR EACH ROW
BEGIN
  SELECT lawyers_sequ1.NEXTVAL
  INTO   :new.lawyerid
  FROM   dual;
END;

这是序列:

SQL>    CREATE SEQUENCE   "LAWYERS_SEQU1"  MINVALUE 1 MAXVALUE 
9999999999999999999999999999 INCREMENT BY 1 START WITH 21 CACHE 20 NOORDER  
NOCYCLE ;

2 个答案:

答案 0 :(得分:2)

使用

'LAWYER'||TO_CHAR(lawyers_sequ1.NEXTVAL,'FM0000000')

答案 1 :(得分:-3)

您可以在查询中使用此功能。

   SELECT 'LAWYER'+ REPLACE(STR(LAWYERID, 7), SPACE(1), '0') FROM LAWYERS

通常,在表格中,自动增量系统是数字的。你也可以为此编写触发器。它看起来像这样。

 DECLARE @INTNEWID INT
 DECLARE @LASTID VARCHAR(13)
 DECLARE @NEWID VARCHAR(13)
 SET @LASTID=( SELECT TOP 1 LAWYERID
               FROM LAWYERS ORDER BY LAWYERID DESC)
 SET @INTLASTID=CONVERT(INT,SUBSTRING(@LASTID,0,6))+1 
 SET @NEWID ='LAWYER'+ REPLACE(STR(CONVERT(VARCHAR,@INTNEWID),7),SPACE(1), '0') 
 UPDATE LAWYERS SET LAWYERID=@NEWID WHERE LAWYERID=(SELECT TOP 1 LAWYERID FROM INSERTED)
相关问题