斯潘8
斯潘4
你好,FMES
我有一个问题,要么我已经盯着看太久了,要么我只是离基地太远了。不管怎样,我似乎无法获得所需的输出:
我有(2)个数据集:一个Oracle非空间表和一个XLSX文件
我正在尝试将XLSX文件中的行添加到DB表中
我的XLSX文件中没有“id”字段,因此,我希望来自XLSX的新行填充“id”字段,其中现有表保留(max+1)。
我尝试将现有表作为阅读器添加——>通过一个统计计算器运行,以通过attributeCreator获得新功能的“_max”-->将“id”设置为@value(_max)+1->我的结果是“1“,而不是顺序编号。
我错过了什么步骤?
谢谢你的帮助!
其他3个答案都是很好的解决方案。基本上,您希望一个sqlExecutor找到当前的max值,并从max value+1开始计数。
但时间就是一切。
例如,如果将sqlExecutor放在主数据流中,在柜台前,然后每个特性都会触发它(例如,如果您有1000个特性,您将对数据库进行1000个查询)。这是不有效的,还有风险。如果第一个功能在第二个功能运行sqleexecutor之前写入数据库,会发生什么情况?如果编写器锁定了数据库,使sqlExecutor无法读取它,会发生什么情况(它们会坐在一起等待对方吗)?
所以,为了安全起见亚搏在线,我愿意这样做爱德华戴维斯建议。我将放置一个查询数据库以查找当前最大值的sqlcreator。然后,我将使用功能合并和固定(无条件)合并将这些信息合并到主要功能上。然后添加计数器以从maxvalue+1开始计数(使用count start参数中的算术编辑器)。
希望有帮助。回答得很好。
你为什么不把ID设为标识列,或者在Oracle中使用序列呢?
如果使用序列,您可以在FeatureTypes参数中使用高级表处理。
如果不是,你想用FME来做这一切。您需要获取初始表的最大值(您使用的是Statisticscaleculator,但我将使用sqlcreator,并使用SQL语句编写一个查询来获取最大值,因为这将使用数据库功能,而不是将每个功能都读取到FME中)。
然后您需要对新特性进行无条件合并。因此,这可能是一个特征合并,其中“1”是请求方的价值,“1”是供应商的价值。
接下来是柜台。在“count\u start”中,创建\u max attribute+1的算术函数
然后应该给你下一个ID值,写在桌子上
?2019安全亚搏在线软件公司|合法的