Oracle中批量處理增加唯一性欄位的值

2021-09-23 10:19:00 字數 1621 閱讀 8475

1.今天突然平台測試環境下的資料沒了,原來是昨晚我這邊程式測試在檔案入庫時執行了清庫,造成的。

所以從另一張表中取了幾條必填資料,其他字段可以寫成固定資料,然後再次造100條資料

那麼問題來了,表中的主鍵你特麼要注意啊,不然很坑的,之前有儲存兩條資料,那麼除過幾條必填的,其他的按照原有的

檔案資料複製上就好了;

指令碼分析下:

insert into dfgz_pkgmx(in_time,recv_pkgno,code,contractorcorpcode,contractorcorpname,paybankname,paybanksubcode,paybanksubname,paybankcardnumber,payflag,workername,idcardtype,idcardnumber,payrollbankcardnumber,payrollbankname,payrolltopbankname,banklinknumber,payrolltopbankcode,totalpayamount,

balancedate,platflowno,sysno,payrollcode)

select sysdate,'2','20190329-01','91640000227680637t','某某某','某某某','100164003','某某某','64222396985745921','2',spname,'3621',custid,btbankno,'某某某','某某某','5234523452345','105',1000.00,sysdate,

'p20190423145620190420190328-'||substr('0000000'||rownum, length('0000000'||rownum)-6,7),'0',

'p201904231456201904001' from gjjlmk_customersign t

where rownum<=100

2.實際起初為了拼這個唯一性欄位的值,我想過用'p20190423145620190420190328-' 拼乙個sysdate中的'mmsss'(分毫秒),

或者拼乙個這個to_char(systimestamp,'ssff'),但是之後發現這個比較蠢,計算機的查詢執行速度一秒執行幾萬條不是問題,所以查詢100條時他的秒是不變的,所以不能用sysdate和systimestamp這個的,

還有想過用guid()這個,最後發現也不行,還是查詢速度太快

如:測試

select to_char(systimestamp,'ssff') from dual

select substr(sys_guid(),1,3) from dual

3.經過測試發現用可以用rownum

因為只需要7位,所以就進行擷取

substr('0000000'||rownum, length('0000000'||rownum)-6,7)
然後把最後7位和前面的字串拼一塊就能保證這個字段唯一了呀,o(∩_∩)o哈哈~

'p20190423145620190420190328-'||substr('0000000'||rownum, length('0000000'||rownum)-6,7)

Oracle唯一約束中NULL處理

根據null的定義,null表示的是未知,因此兩個null比較的結果既不相等,也不不等,結果仍然是未知。根據這個定義,多個null值的存在應該不違反唯一約束。create table testaa id number select from testaa alter table testaa add...

oracle中唯一標識的使用

原文 1.如果主鍵vachar型別,直接使用 sys guid 2.如果主鍵是number型別,要使用序列.插曲 有時候業務會操作a b兩張表,先在a表插入一條記錄,然後b表中會需要a表剛才那條記錄的id值,這裡使用mybatis ibatis中的selectkey標籤 selectkey有3個主要...

Oracle中唯一約束和唯一索引的區別

在使用toad來操作oracle資料庫時,會注意到建立約束時有primary key check unique和foreign key四種型別的約束,這與sql server中的約束沒有什麼區別,這裡的check約束除了用於一般的check約束外,在oracle中也用於非空約束的實現。也就是說如果乙...