oracle数据库的主键格式

Dav*_*cia 1 sql oracle plsql sequence

我想对主键使用字母数字格式,即A1 A2 A3并使其自动递增.

我怎样才能做到这一点?它甚至可以推荐吗?

OMG*_*ies 6

你需要创建一个SEQUENCE:

CREATE SEQUENCE your_seq
  MINVALUE 1
  MAXVALUE 999999999999999999999999999
  START WITH 1
  INCREMENT BY 1
  CACHE 20;
Run Code Online (Sandbox Code Playgroud)

然后,你使用:

INSERT INTO your_table
  (pk_column, ...)
SELECT 'A' || your_seq.NEXTVAL ...
Run Code Online (Sandbox Code Playgroud)

如果您希望该字母数字值也增加,请创建另一个序列并使用CHR功能:

SELECT CHR(alpha_seq.NEXTVAL) || your_seq.NEXTVAL ...
Run Code Online (Sandbox Code Playgroud)

但我的建议是将此列作为代理键,并使用实际主键列的序列值:

INSERT INTO your_table
  (pk_column, surrogate_key, ...)
SELECT your_seq.NEXTVAL,
       'A' || your_seq.NEXTVAL ...
Run Code Online (Sandbox Code Playgroud)

...因为VARCHAR2将占用更多的字节NUMBER.它在JOINing表时会有所不同,并允许灵活地更改代理键而不影响参照完整性(IE:B1,B2,B3 ......).