甲骨文与

时间:2018-08-24 08:23:27

标签: sql oracle merge common-table-expression

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

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语句的唯一查询,它正确运行。

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

请问有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

始终使用别名-例如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