【问题标题】:ORA-38104: Columns referenced in the ON Clause cannot be updated c.emp_idORA-38104: ON 子句中引用的列无法更新 c.emp_id
【发布时间】:2020-01-01 05:56:05
【问题描述】:

我有两张简单的桌子

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

【问题讨论】:

    标签: sql oracle syntax-error sql-merge


    【解决方案1】:

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

    UPDATE 将在满足c.emp_id = e.emp_id 条件的表biodata 的记录上完成。因此要更新的记录已经与emp_id 具有相同的emp_ide.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);
    

    干杯!!

    【讨论】:

      猜你喜欢
      • 2011-08-19
      • 2014-06-14
      • 2021-08-31
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      相关资源
      最近更新 更多