【问题标题】:oracle merge with甲骨文合并
【发布时间】:2019-01-30 16:31:52
【问题描述】:

我正在尝试通过以下代码执行更新:

MERGE
INTO    target trg
USING   (
    WITH email AS (
      SELECT trim(t2.crn_0) as cf,
             coalesce(trim(t1.WEB_1),trim(t1.WEB_0)) as im
      FROM   tab1 t1 
      INNER JOIN tab2 t2 on t2.bprnum_0=t1.bpanum_0
      INNER JOIN target t3 on t3.ycodfis_0=t2.crn_0
      WHERE t1.bpaadd_0='000' 
      AND regexp_like(t3.ycodfis_0,'[^A-Za-z]') 
      AND t3.ycodfis_0 != ' '
      AND coalesce(trim(t1.WEB_1),trim(t1.WEB_0)) != ' '
      )
    SELECT email.cf, email.im FROM email
    ) ON (email.cf = trg.ycodfis_0)
WHEN MATCHED THEN UPDATE SET trg.email_0 = email.im     

我收到以下错误:

“EMAIL”.“CF”:标识符无效

我尝试运行 WITH 语句的唯一查询,它运行正确。

我多次查看合并语法,但我无法找到我的错误。

有人可以帮帮我吗?

【问题讨论】:

    标签: sql oracle merge common-table-expression


    【解决方案1】:

    您的 email 仅在 using 块内使用。从外部语句中删除它:

    ON (cf = trg.ycodfis_0)
    WHEN MATCHED THEN UPDATE SET trg.email_0 = im     
    

    【讨论】:

    • @LucaLeoni 您可以通过点击右侧的 V 符号来接受答案
    【解决方案2】:

    始终使用别名 - 例如,src

    MERGE
    INTO    target trg
    USING   (
                 ... subquery omitted for clarity ...
            ) src
    ON      ( src.cf = trg.ycodfis_0 )
    WHEN MATCHED THEN UPDATE SET trg.email_0 = src.im
    

    【讨论】:

      猜你喜欢
      • 2011-08-29
      • 2016-08-13
      • 1970-01-01
      • 2011-10-04
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      相关资源
      最近更新 更多