如何对数据库执行查询(使用 tOracleInput ),如选择,并使用已在其他组件中定义为参数的字符串,例如在“tFlowToIterate”中?
例如:“来自TABLE_X的SELECT *,其中FIELD_X =?;”
我的'?'是来自我的tFlowToIterate组件(foo)的变量。我已经尝试过(String)globalMap.get(“foo”),以及其他类似的表单......
由于
[Talend Open Studio for Data Integration v5.3.1; DB:Oracle]
答案 0 :(得分:7)
你自己回答。 tOracleInput
组件接受查询作为参数。这是一个非常无聊的java字符串,不多也不少。这意味着如果要在查询中使用globalMap元素,则只需要执行java String连接。这样的事情:
"SELECT * from TABLE_X where FIELD_X='" + (String)globalMap.get("foo") + "'"
但不会工作(仔细查看引号):
"SELECT * from TABLE_X where FIELD_X='(String)globalMap.get("foo")'"
请记住,如果使用字符串连接和外部变量编写查询,查询编辑器可能会弄乱所有引号,从而生成查询损坏。
作为一般建议,我从不建议在tOracleInput
之类的数据库输入组件中使用“*”运算符。 Talend具有在编译时生成的固定方案结构。这意味着,如果有一天您将向TABLE_X添加一列,您的ETL将会失败。
更强大的解决方案如下:
答案 1 :(得分:3)
你只需要将它与你的变量连接起来。
所以在你的情况下,它看起来像:
"SELECT *
FROM TABLE_X
WHERE FIELD_X = '" + (String)globalMap.get("foo") + "'"