sql - 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
解决方案
只需删除c.emp_id=e.emp_id
fromUPDATE
子句,因为它无关紧要
(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);
干杯!!
推荐阅读
- ruby-on-rails - 如何在 codeanywhere 中配置 React API 代理
- security - 我应该如何在数据库中存储已知/硬编码的密码?
- typescript - 如何使用 Typescript 编译器 API 打印机在节点之间生成额外的换行符
- sql - Hive 拆分和总计
- binary - CUDD:对 BDD 的操作
- reactjs - Redux 组件被错误地渲染/调用多次?
- javascript - 使用 URL 参数定位节点服务器中的特定功能
- excel - 仅通过输入日期 (jj) 填写日期 (jj/mm/yyyy)
- jquery - JQuery保留从dom中删除元素的数据
- php - 我应该在发送 html 电子邮件时链接到图像还是使用`AddEmbeddedImage`?