【问题标题】:Nested sql statement in talend (updated)talend 中的嵌套 sql 语句(更新)
【发布时间】:2015-12-01 15:26:29
【问题描述】:

我正在尝试在 postgresql tPostgresqlRow_1 中使用嵌套 sql。 但我收到一个错误。 如果我在 PgAdmin 中运行,以下 sql 运行正常。 但在 Talend 中,我收到一个错误。 我正在从一个表中获取最大日期并更新另一个表中的列。

update "STG_magento_de"."configuration_table"
set created_at=(select MAX(created_at) from "STG_magento_de"."sales_flat_order_test")
where table_name='sales_flat_order_test'

【问题讨论】:

  • 错误是...?

标签: sql talend


【解决方案1】:

tPostgresqlRow 组件需要一个包含 SQL 语句的 Java 字符串。

最可能的问题是语句中包含未转义的引号。这在 pgAdmin 中工作正常,因为它是有效的。要从 Talend 传递相同的语句,您必须转义语句本身中的所有引号。或者,您可以尝试从 SQL 语句中删除双引号。

记得将整个内容用引号括起来,这样它就是一个正确的 Java 字符串。

【讨论】:

    【解决方案2】:
    create or replace function eliminarComillas (text) returns text AS $$
           select replace(replace(replace($1,'**\"**','"'),'‘','‘'),'’','’');
        $$ language sql;"
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
    【解决方案3】:

    以下带有转义引号的 sql 有效。

    "update \"STG_magento_de\".\"configuration_table\"
    set created_at=(select MAX(created_at) from \"STG_magento_de\".\"sales_flat_order_test\")
    where table_name='sales_flat_order_test'"
    

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多