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

    xiaoxiao2022-07-02  109

    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)

     

    最新回复(0)