西班牙
斯潘4
在我用来准备和构建SQL查询的聚合器转换器中,我想首先检查主键值是否为字符串类型,以便为每个值填充一个引号。。
(例如:
value1,value2,value3,…用于数字主键
'value1','value2','value3',…用于字符串主键
)
所以我选择创建一个脚本(Python)私有参数来检查string类型的主键值,然后返回一个引号,如下所示:
snglq=“,”#检查主键是否为字符串?如果type(FME_MacroValues['SDE_PK'])==str:#则添加单引号snglq=“,”“否则:#无单引号snglq=“,”返回snglq
然后将返回的值赋给Aggregator transformer中的分隔符框,如下所示:
但这不正常,总是导致值加上单引号,但主键值是数值类型!!
这里有什么问题,请帮忙
您好!@萨米苏努,有一些问题需要考虑。
例如,如果主键属性的名称是“PK_N”(数字类型主键属性名称)和“PK_S”(字符串类型主键属性名称)之一,则定义链接到聚合器中“Attributes to Concatenate”参数的用户参数“SDE_PK”以选择其中一个,这个脚本化的Python参数可以按预期工作。
如果FME_MacroValues['SDE_PK']='PK_S'else',则返回“,”
但是,如果主键是字符串类型,则使用该方法以后必须将前导单引号和尾随单引号添加到连接的值中。这很麻烦,所以我认为如果选定的主键是字符串类型,那么最好事先用单引号将各个值括起来,然后用逗号作为分隔符将这些值连接起来。
非常感谢@takashi你的答案。
你说得对,我尝试一切你所提到的渔获量,特别是第一个,脚本参数进行评估一次,并会在返回字符串,我也注意到了分隔符只能接受一个参数,而不是一个属性。
正如你指出的,解决方案可能是简单的,绝对,Oracle的SQL语句可以接受周围的数值单引号不管值是否是字符串或数字,所以我手动设置如下图所示:
然后在接下来的变压器 - SQLExecuter SQL语句,看起来像下面:
SELECT $(SDE_PK)作为PRIMARY_KEY FROM $(SDE_FEATURE_CLASS)WHERE $(SDE_PK)IN( '@Value($(SDE_PK))' #<--------)
现在,这成功合作。
再次感谢!
?2019安全亚搏在线软件公司|合法的