What is cause of ORA-38104 error on SQL merge?

后端 未结 2 1787
盖世英雄少女心
盖世英雄少女心 2021-01-06 09:52

I have a code like this

MERGE INTO target_table tgt
USING source_table src
on(tgt.c1=src.c1)
WHEN MATCHED THEN
UPDATE SET tgt.c1=src.c2

I g

相关标签:
2条回答
  • 2021-01-06 10:06

    How about this, the outer join means the rid will be null and thus fail, and so flow into the WHEN NOT MATCHED part of the statement if you have one

    MERGE INTO target_table tgt
    USING ( SELECT t2.ROWID AS rid
                ,  s2.c2
            FROM   target_table t2
                 , source_table s2
            WHERE t2.c1 (+) = s2.c1
          ) src
    ON (tgt.rowid = src.rid)
    WHEN MATCHED THEN
    UPDATE SET tgt.c1=src.c2
    
    0 讨论(0)
  • 2021-01-06 10:18

    You can exploit some workarounds for ORA-38104, which seem to work up until Oracle 18c, including this one, where you'd wrap your columns in a row value expression that contains an additional dummy expression:

    MERGE INTO target_table tgt
    USING source_table src
    ON ((tgt.c1, 'dummy') = ((src.c1, 'dummy')))
    WHEN MATCHED THEN
    UPDATE SET tgt.c1=src.c2
    
    0 讨论(0)
提交回复
热议问题