我想对主键使用字母数字格式,即A1 A2 A3,并自动增加。
我该怎么做?它甚至可以推荐吗?
答案 0 :(得分:6)
您需要创建一个SEQUENCE:
CREATE SEQUENCE your_seq
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 20;
然后,您使用:
INSERT INTO your_table
(pk_column, ...)
SELECT 'A' || your_seq.NEXTVAL ...
如果您希望增加字母数字值,请创建另一个序列&使用CHR function:
SELECT CHR(alpha_seq.NEXTVAL) || your_seq.NEXTVAL ...
但我的建议是将此列作为代理键,并使用实际主键列的序列值:
INSERT INTO your_table
(pk_column, surrogate_key, ...)
SELECT your_seq.NEXTVAL,
'A' || your_seq.NEXTVAL ...
...因为VARCHAR2
将占用比NUMBER
更多的字节。它在JOINing表时会有所不同,并允许灵活地更改代理键而不影响参照完整性(IE:B1,B2,B3 ......)。