2012-03-19 102 views
1

我想为主键使用字母数字格式,即A1 A2 A3并让它自动递增。oracle数据库的主键格式

我该怎么做?它甚至是值得推荐的吗?

+2

为什么?数值PK有什么问题? – Rene 2012-03-19 08:59:03

回答

6

你需要创建一个序列:

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。加入表格时,它会有所作为,并允许灵活地更改代理键而不影响参照完整性(IE:B1,B2,B3 ...)。