(本文档仅供参考)
现象
带参数的电子表格进行批量导入数据时,重复两次导入后报主键或唯一约束冲突:ORA-00001:违反唯一约束条件,见下图
原因:
在报表设置合理的情况下,此报错是因为第一次批量导入数据时,数据库没有对应的数据,所以执行insert操作,而第二次进行批量导入时,数据库已经存在对应数据,但是报表带参数,此时根据参数筛选出的数据并未包含需要excel表导入的数据,见下图: 在报表设置合理的情况下,此报错是因为第一次批量导入数据时,数据库没有对应的数据,所以执行insert操作,而第二次进行批量导入时,数据库已经存在对应数据,但是电子表格是带参数的,此时根据参数筛选出的报表数据并未包含excel表导入的数据,见下图:
所以进行批量导入数据后报错。此时进行批量导入excel数据后出现报错。
对于带参数的报表,批量导入功能产品是根据参数获取的数据集进行insert和update操作的,若根据参数获取的数据集在需要导入的excel表中不存在,则执行insert操作,反之,则执行update操作,对于上图中的报错,是因为数据库中已经存在数据,而前端根据参数获取的结果集并不包含excel表数据,所以导致报错,当切换参数,通过参数获取的结果集包含excel表的数据后,批量导入数据正常,见下图:对于带参数的电子表格,产品是根据参数获取的数据集来判断是执行insert操作还是update操作,若根据参数获取的数据集在需要导入的excel表中不存在,则执行insert操作,反之,则执行update操作,对于报错截图,是因为数据库中已经存在数据,而前端根据参数获取的结果集并不包含excel表数据,所以导致报错,可以通过切换参数,让参数获取的结果集包含excel表的数据,从而实现批量导入数据正常,见下图:
那么如何做到不切换参数都可以实现第一次导入数据执行insert操作,第二次导入数据执行update操作?
解决方案:
可以采用电子表格 可以采用电子表格-回写规则中的强制先执行更新再执行插入解决,见下图
关于强制先执行更新再执行插入的说明见此wiki文档:电子表格⬝ 回写规则