原文发布时间:2011-09-07
一、SQLCreator直接执行SQL语句,不需要输入数据,通过转换器直接连接数据库执行查询,输出查询结果为FME要素,一个返回结果输出一个FME要素。支持的格式有:
二、SQLExecutor,执行要素与数据库的连接,输入要素作为触发器,通过转换器对数据库进行查询操作,将查询的结果添加到输入要素上,通过RESULT端口输出;触发要素通过TRIGGER端输出。同样支持上面的格式。
三、ClassicSQLExecutor与SQLExecutor的用法很相似,同样是通过输入触发要素,然后用转换器连接数据执行SQL查询,最后将查询结果作为属性添加到触发要素上输出。
该转换器支持的格式如下:
下面用案例来比较这三个转换器的使用方法:
1、用SQLCreator执行,设置与输出结果分别如下:
转换后如下图:
框选该要素的位置,查询出4个要素,每个要素都带有一个属性a的返回值。
3、用执行ClassicSQLExecutor。该转换器也会将返回值添加到要素的属性中,如果返回一条记录,就自动添加该记录添加到每个要素的属性中,如果返回了多个记录,例如本案例中返回了4个值,则需要在以下所示的步骤中,设置列表名称,将多个返回值存储在列表里,然后添加到每个要素中:
然后暴露属性,暴露只能暴露能实际返回的属性
运行的结果如下:
可以看到,会把返回的记录全部添加到同一个要素中,这是与SQLExecutor的不同之处,SQLExecutor是每个返回值添加一次。
总结
从案例的结果可以分析出:SQLCreator是最简单直接的语句运行转换器;SQLExecutor和ClassicSQLExecutor都需要输入触发要素,并将SQL查询的结果值作为属性添加到书法要素上。不同的是,前者对每个结果都对每个要素添加一次,后者是将所有的查询结果添加到每个要素上。共同点就是,对于属性的暴露都是支持的,不过都只能针对查询的属性字段,而不是整张表的查询字段。
附加
同事说这几个转换器用得不算太多,对于orcal数据的查询可以用专门的OracleQuerier转换器,利用空间交互关系查询表中的记录。不过这是专门针对空间数据的。同样地对于SDE也有专门的查询转换器ArcSDEQuerier,她的建议是不同的环境用对应的转换器比较好!