Oracle中批量处理增加唯一性字段的值

版权声明:版权所有,违者必究 https://blog.csdn.net/weixin_39921821/article/details/90440936

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)

 

猜你喜欢

转载自blog.csdn.net/weixin_39921821/article/details/90440936