oracle - SQL 合并时出现 ORA-38104 错误的原因是什么?

标签 oracle merge ora-38104

我有这样的代码

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

我得到 ORA-38104: Columns referenced in the ON clause cannot be updated 。我了解此错误的原因。但是我们如何重写这段代码呢?有没有不使用游标的可能性?

最佳答案

这个怎么样,外连接意味着 rid 将为空,因此失败,所以如果你有的话,流入语句的 WHEN NOT MATCHED 部分

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

关于oracle - SQL 合并时出现 ORA-38104 错误的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7886905/

相关文章:

python - 版本控制- merge 两个分支-[中止: uncommitted changes]

sql - ORA-38104: ON 子句中引用的列无法更新

sql - oracle查询查看数据类型列表

laravel - 错误 ORA-12505 : TNS:listener does not currently know of SID given in connect descriptor Laravel 5. 8 Yajra

linux - 如何在 RHEL 6/Linux 上设置 Oracle ODBC 驱动程序

sql - 使用 sysdate 更改表名

javascript - jsPDF - 包含其他 pdf

python - 2个Python字典如何变成1个?