use*_*555 4 sql database oracle talend
如何对我的数据库执行查询(使用tOracleInput),如Select,并使用已在其他组件中定义为参数的字符串,例如在'tFlowToIterate'中?
例如:" SELECT*from TABLE_X where FIELD_X =?; "
我的'?' 是来自我的tFlowToIterate组件(foo)的变量.我已经尝试过使用(String)globalMap.get("foo")和其他类似的表单...
谢谢
[Talend Open Studio for Data Integration v5.3.1; DB:Oracle]
你自己回答.tOracleInputcomponent接受查询作为参数.这是一个非常无聊的java字符串,不多也不少.这意味着如果要在查询中使用globalMap元素,则只需要执行java String连接.像这样的东西:
"SELECT * from TABLE_X where FIELD_X='" + (String)globalMap.get("foo") + "'"
Run Code Online (Sandbox Code Playgroud)
但是这不会工作(在引号仔细看):
"SELECT * from TABLE_X where FIELD_X='(String)globalMap.get("foo")'"
Run Code Online (Sandbox Code Playgroud)
请记住,如果使用字符串连接和外部变量编写查询,查询编辑器可能会弄乱所有引号,从而生成破坏的查询.
作为一般建议,我从不建议在数据库输入组件中使用"*"运算符tOracleInput.Talend具有在编译时生成的固定方案结构.这意味着如果有一天你将向TABLE_X添加一列,那么你的ETL将会失败.
更强大的解决方案如下: