2013-11-27 51 views
0

我想获取存储在CSV文件中的信息,并将它发送到Oracle数据库表(我正在使用'tOracleOutput'组件')。 但是,在将该信息发送到表中的相应列之前,我想更改一些字段。在将CSV字段导入数据库之前修改CSV字段

例如:

如果在CSV文件中的字段X = 15 - >我想在第Y列在数据库表中写入0

如果在CSV文件中的字段X = 30 - >我想在数据库表中的Y列中写入1

我可以使用'tJava'组件来做到这一点吗?如何访问我从'tJava'组件中的CSV文件接收到的每个字段?

感谢

回答

3

访问tJavaRow中的列总是可能的。要小心,tJava在main()中插入代码,但是你需要在每次迭代时执行代码。由于您需要为数据集的每一行评估表达式,因此您需要tJavaRow。

基本上,如果'foo'是你的ingoing连接的名字,'X'是你的字段,这意味着你有一个foo公共结构,里面有'bar'公共属性。所以,你可以用foo.bar访问

鉴于“酒吧”你传出连接到tOracleOutput,你tJavaRow代码中,你可以使用类似:

bar.Y = (foo.X == 15 ? 0 : (foo.X == 30 ? 1 : null)) 

不管怎样,为什么当你可以使用一个tJavaRow组件在简单的拖放操作和tMap组件内部的几行代码的情况下也可以做到这一点?

+1

我同意这个答案,如果它如此简单,最好使用tMap –

+0

谢谢!我在我的tMap组件中使用了这个表达式。 – user2144555

0

在你插入查询,你可以使用Oracle DECODE函数:

INSERT到XTABLE ... DECODE(supplier_id,15,0, 30,1, 45,2, elseval)your_column

+0

但我使用'tOracleOutput'组件插入值。 – user2144555