Java中有java.util.UUID來生成不重復的32位字串,oracle的sys_guid()函數也提供了相似功能,兩者都可以用來生成主鍵。
首先表的id得定義成varchar2(32)或是nvarchar2(32)的形式:
create table emp13( id varchar2(32), name nvarchar2(20), primary key(id) )
之后就可以往其中插值了:
insert into emp13(id,name) values(sys_guid(),'Andy'); insert into emp13(id,name) values(sys_guid(),'Bill'); insert into emp13(id,name) values(sys_guid(),'Cindy'); insert into emp13(id,name) values(sys_guid(),'Douglas');
插完了可以看結果:
SQL> select * from emp13; ID NAME -------------------------------- ---------------------------------------- 076CF701A507417CBDFD3931B0241E2B Andy E1D5F13DDDC047ACB4C2AEDF1DB9762F Bill 2D6F5D893791457091F1C896344CF0B4 Cindy C6BA6C13DCD14CB1AF5F3865F005022D Douglas
Mabatis門徒可以在xml或注解的SQL中直接使用此函數。
PS:若是多表都使用sys_guid()作為主鍵,建議手動加上前綴,如task_XXXX, job_XXXX,當如這么做了以后字段長度也要做出相應調整,32位當擴至40位或更長,
使用上如:
insert into emp13(id,name) values('emp_'||sys_guid(),'Douglas');
或是
select 'emp_'||sys_guid() from dual
這樣做的好處是看到ID時通過前綴就能知道屬於哪張表。
END