在informatica地图设计中,必须有一个目标表,但在我的设计中,我只使用informatica来调用存储过程,在调用它们之后,所有工作都已完成,所以我不需要要插入或更新的目标表。 我使用一个不存在的表作为目标表,并使用一个无意义的字段作为输入端口(因为必须至少有一个输入端口!),然后取消选中或在会话配置中选项(插入,更新,删除),所以信息系统不会生成DML SQL语句,避免"没有表"错误。 但是,然后informatica将输入行视为拒绝行并尝试将其写入错误文件。因为我取消选中了insert选项,会话日志显示有一个错误,它无法插入到坏文件中! 奇怪的是,这个错误从未在监视器中显示,并且所有会话都成功运行!它只出现在informatica的元表中。
有没有更好的方法来避免这个问题,虽然它对我的结果没有影响?是否有可能使用不存在的表并且不执行任何操作(包括拒绝输入行)?
答案 0 :(得分:1)
在目标之前使用过滤器转换,并将过滤条件设为' FALSE'
没有行会转到目标
答案 1 :(得分:0)
不,您总是需要一个目标才能使映射有效。但我宁愿使用平面文件目标而不是数据库表,你将要做的工作要少得多。
如果您使用的是Linux / Unix,您甚至可以将文件路由到/ dev / null(使用文件夹:/ dev /,file:null),这样文件就不会真正写入文件系统。
使用一个虚拟端口是正确的方法。正如您所说,即使您没有真正使用它,也至少需要一个端口。
答案 2 :(得分:0)
当我想要执行存储过程而没有别的时候,我遇到了同样的问题。
我通过创建一个虚拟源对象来解决这个问题,该虚拟源对象具有一个端口和一个具有相同数据类型的一个端口的虚拟目标。在源限定符中,我添加了一个SQL语句select 1 from dual
(因为它是Oracle)。
然后我添加了一个设置为false的过滤器对象。然后我将源/限定符中的单个端口连接到过滤器,最后连接到目标。
运行映射时,源限定符将返回一行中的一行值,这将传递给过滤器,但过滤器没有任何内容,因为过滤器设置为false。这种映射将始终成功且有效,因为所有端口都连接,没有任何东西使其成为“虚拟”目标,因此没有错误的文件记录或故障等。
如果您需要任何澄清,请告诉我,我可以更新此答案。