(本文档仅供参考)

问题

在oralce数据库表中,有两个字段。c_key 和c_file,其中c_key通过触发器实现了自增,c_file是blob字段,用于存储上传的图片文件。

现通过电子表格的回写规则,实现了一张回写报表。并且设置回写规则如下:



在上传图片文件之后,保存,报出如下错误:


解决方案

由于数据库的文件上传,是一个比较复杂的过程,需要在代码中做一下转换等。

因此,在电子表格的回写报表中,涉及到文件上传的原理如下:

在插入文件的时候,

首先去Insert into一条数据(仅file字段数据为空),然后根据主键去update 对应的数据。

即:

Insert into(col1,col2...file) values (value1,value2,...null)

select file where key = xx for update

但是如果用触发器实现主键自增的效果,这样系统就无法判断主键是什么,也就无法去更新数据了。


针对需要自增主键,但是又要上传文件的场景,建议使用宏代码实现为主键字段设置UUID,而非通过数据库触发器实现。参考:https://history.wiki.smartbi.com.cn/pages/viewpage.action?pageId=27002063中的uuid方式。