首页 > 解决方案 > ORA-38104: ON 子句中引用的列无法更新 c.emp_id

问题描述

我有 2 张简单的桌子

CREATE TABLE employee (
  emp_id INT PRIMARY KEY,
  first_name VARCHAR(40),
  last_name VARCHAR(40),
  birth_day DATE,
  sex VARCHAR(1),
  salary INT,
  super_id INT,
  branch_id INT
);

CREATE TABLE biodata (
  emp_id INT PRIMARY KEY,
  first_name VARCHAR(40),
  last_name VARCHAR(40),
  birth_day DATE,
  sex VARCHAR(1)
);

我想合并它

merge into biodata c
using employee e
on (c.emp_id = e.emp_id)
when matched then
  update set
  c.emp_id=e.emp_id,
  c.first_name=e.first_name,
  c.last_name=e.last_name,
  c.birth_day=e.birth_day,
  c.sex=e.sex
when not matched then
  insert VALUES(e.emp_id,e.first_name,e.last_name,e.birth_day,e.sex);

但甲骨文说:

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

标签: sqloraclesyntax-errorsql-merge

解决方案


只需删除c.emp_id=e.emp_idfromUPDATE子句,因为它无关紧要

UPDATE将在满足biodata条件的表的记录上完成c.emp_id = e.emp_id。因此要更新的记录已经与)emp_id相同e.emp_id

merge into biodata c
using employee e
on (c.emp_id = e.emp_id)
when matched then
  update set
  --c.emp_id=e.emp_id,
  c.first_name=e.first_name,
  c.last_name=e.last_name,
  c.birth_day=e.birth_day,
  c.sex=e.sex
when not matched then
  insert VALUES(e.emp_id,e.first_name,e.last_name,e.birth_day,e.sex);

干杯!!


推荐阅读